1. Deploy the envoy helm chart on Kubernetes


    Deploying a Helm chart to Kubernetes using Pulumi involves several steps. You need to ensure that you have a Kubernetes cluster running and have configured your Pulumi environment to interact with it. We will use the kubernetes.helm.v3.Chart resource to deploy a Helm chart, which represents a collection of predefined Kubernetes resources that can be deployed and managed as a unit.

    Here's a step-by-step program written in TypeScript which deploys the Envoy proxy using its Helm chart:

    1. Import required packages: We'll need the @pulumi/kubernetes package to interact with Kubernetes.

    2. Create a Chart resource: The Chart resource is used to deploy a Helm chart to a Kubernetes cluster. You'll need to provide the name of the chart and, optionally, configuration values to customize the deployment.

    3. Export relevant resources: After deployment, we may need to export some details, like the service endpoint.

    Here is the TypeScript program that deploys the Envoy Helm chart to a Kubernetes cluster:

    import * as k8s from "@pulumi/kubernetes"; // Create a Kubernetes Namespace const ns = new k8s.core.v1.Namespace("envoy-ns", { metadata: { name: "envoy" } }); // Deploy the Envoy Helm chart in the created Namespace const envoyChart = new k8s.helm.v3.Chart("envoy", { namespace: ns.metadata.name, chart: "envoy", version: "1.18.3", // Specify the version of the Helm chart. fetchOpts: { repo: "https://charts.bitnami.com/bitnami", // Helm chart repository containing the Envoy chart } }, { dependsOn: ns }); // Export the Namespace name and the Chart resources export const namespaceName = ns.metadata.name; export const chartResources = envoyChart.resources;

    In this program:

    • We import the Pulumi Kubernetes (k8s) SDK to work with Kubernetes resources.
    • We create a new Kubernetes Namespace specifically for Envoy, which adds a layer of isolation by segregating the cluster resources within this namespace.
    • We deploy the Envoy Helm chart into the previously created namespace by creating an instance of the k8s.helm.v3.Chart resource. We specify the chart name (envoy), the chart version, and the repository URL where the chart can be found.
    • We use dependsOn to ensure the namespace is created before the Helm chart is deployed.
    • The Helm chart version number represents a specific version of Envoy you want to deploy. Make sure that this version is available in the specified chart repository.
    • We export the namespace's name and chart resources, which can be used later to reference the deployment or retrieve details such as service endpoints.

    Please replace version: "1.18.3" with the version of the Envoy chart that you wish to deploy, and ensure the version is available in the repository. You can find different versions in the Helm repository or the documentation for the Envoy chart provided by Bitnami or other maintainers.

    Keep in mind that this program assumes your Pulumi environment is already configured to communicate with your Kubernetes cluster (typically via kubeconfig). If you are working with a remote cluster, make sure that your configuration is set up correctly before running this program.

    After you have added the above code to a file (for example, deployEnvoy.ts), you can deploy your program using the Pulumi CLI:

    pulumi up

    This command will prompt you to confirm the deployment after showing a preview. After confirming, Pulumi will proceed to deploy the Envoy Helm chart into your Kubernetes cluster.