Deploy the ingress-controller helm chart on Kubernetes
TypeScriptTo deploy the ingress-controller using a Helm chart on a Kubernetes cluster with Pulumi, you'll need to leverage the
@pulumi/kubernetes
package, particularly theChart
resource. This allows you to deploy Helm charts in a declarative way using infrastructure as code.Here's a step-by-step walkthrough of the program:
- Import Dependencies: You'll import the necessary Pulumi and Kubernetes libraries.
- Create a Chart Resource: You'll instantiate a
Chart
resource from the@pulumi/kubernetes
package, which represents a Helm chart. - Deploy the Chart: Using the
Chart
resource, you'll set the respective parameters, such aschart
,version
,values
(optional), andnamespace
(optional) to deploy the NGINX Ingress Controller Helm chart. Thevalues
field can be used to customize the deployment if needed (e.g., setting custom annotations, resource limits, etc.). - Export Outputs: You will commonly export any important resulting resource attributes, such as the ingress controller service IP or hostname, which might be necessary to access the NGINX Ingress Controller from outside the cluster.
Now, let's look at the Pulumi program:
import * as pulumi from '@pulumi/pulumi'; import * as k8s from '@pulumi/kubernetes'; const namespace = new k8s.core.v1.Namespace('ingress-ns', { metadata: { name: 'ingress-nginx' } }); const nginxIngressController = new k8s.helm.v3.Chart('nginx-ingress', { chart: 'ingress-nginx', version: '3.7.1', // specify the version you want to deploy namespace: namespace.metadata.name, fetchOpts: { repo: 'https://kubernetes.github.io/ingress-nginx', // Helm repository URL }, // Optional: if you have custom values you wish to override. values: { controller: { publishService: { enabled: true, }, }, }, }, { dependsOn: [namespace] }); // Export the external IP of the ingress controller for easy access export const ingressIp = nginxIngressController .getResourceProperty('v1/Service', 'ingress-nginx-controller', 'status') .apply(status => status.loadBalancer.ingress[0].ip);
Explanation
- We start by importing the necessary modules from the Pulumi and Kubernetes packages.
- A new Kubernetes namespace is created for the ingress controller, giving it a dedicated space within the cluster.
- The
nginxIngressController
is an instance of aChart
resource. It references the NGINX Ingress Controller Helm chart, specifying the chart version and repository. Adjust theversion
attribute to match the chart version you prefer. - The
values
object is where you could put custom configurations. These values override the Helm chart's default configurations. - Finally, we export the external IP of the NGINX Ingress Controller service, which is dynamically acquired from the service's status once it is deployed. This external IP is used to access the ingress controller from outside the Kubernetes cluster.
Remember that before running this program, you must have:
- Pulumi CLI installed and configured for use.
- Access to a Kubernetes cluster and have the
kubeconfig
file configured on your machine.
To run this Pulumi program, save it to a file (e.g.,
index.ts
), then runpulumi up
through the Pulumi CLI. This command will start the deployment process, and you will see a summary of the proposed changes before they are applied to your cluster. Confirm the deployment, and Pulumi will provision the specified resources.For more detailed information, please refer to the Pulumi documentation for Kubernetes and Helm.