Harness the Power of Nginx Ingress with Let’s Encrypt

Spread the love

How to install nginx ingress with SSL
Photo by Farzad on Unsplash


The Nginx Ingress Controller is a popular Kubernetes Ingress Controller that manages inbound network traffic to Kubernetes services. It serves as a reverse proxy, allowing for load balancing, SSL/TLS termination, and routing of incoming requests.

Additionally, the Nginx Ingress Controller provides extensibility via custom annotations and configuration options. It supports customizing Nginx settings, enabling advanced features such as rate limiting, request/response rewriting, and proxy buffering.

In this tutorial, I will explain you How to deploy nginx ingress controller with Let’s encrypt to enable SSL on your website. To deploy and configure Nginx Ingress with Let’s Encrypt on Kubernetes, you can follow these steps:

Step 1: Set up a Kubernetes cluster: Ensure you have a Kubernetes cluster up and running. You can use a managed Kubernetes service like AWS EKS, GKE, or AKS, or set up your own cluster using tools like kops, kubeadm, or minikube.


Step 2: Install the Nginx Ingress Controller: Deploy the Nginx Ingress Controller in your Kubernetes cluster. You can use the official Helm chart or deploy it directly using the Kubernetes manifests. Here’s an example using Helm:

$helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
$helm install my-nginx ingress-nginx/ingress-nginx


Step 3: Install cert-manager: Cert-manager is a Kubernetes add-on that helps with managing Let’s Encrypt certificates. Install cert-manager in your cluster using its official Helm chart or the provided Kubernetes manifests. Here’s an example using Helm:

$helm repo add jetstack https://charts.jetstack.io
$helm install cert-manager jetstack/cert-manager –namespace cert-manager —version <chart-version>

Step 4: Create an Issuer or ClusterIssuer resource: In your Kubernetes cluster, create an Issuer or ClusterIssuer resource that specifies your Let’s Encrypt account details. This resource defines how Let’s Encrypt will verify and issue certificates. Here’s an example of a ClusterIssuer manifest:

See also  Deployment in version "v1" cannot be handled as a Deployment

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
  name: letsencrypt-prod
    email: your-email@example.com
    server: https://acme-v02.api.letsencrypt.org/directory
      name: letsencrypt-prod
    – http01:
          class: nginx

Step 5: Deploy your application and configure Ingress rules: Deploy your application in Kubernetes and create Ingress resources to define the routing rules for incoming traffic. Specify the desired hostname(s) and path(s) in the Ingress rules. Make sure to set the ingress.class annotation to nginx for the Nginx Ingress Controller to handle the requests.


Step 6: Request Let’s Encrypt certificates: Once the Ingress resources are set up, cert-manager will automatically detect the Ingress objects and request Let’s Encrypt certificates for the specified hostnames. It will handle the verification process and manage the certificate lifecycle.


Step 7: Verify certificate issuance: Monitor the certificate issuance process using cert-manager logs or Kubernetes events. You can also check the status of the certificate using kubectl describe certificate.


Step 8: Test and verify: Access your application using the configured hostname(s) over HTTPS to verify that the Let’s Encrypt certificates are correctly applied and the Nginx Ingress is routing traffic properly.

By following these steps, you can deploy and configure Nginx Ingress with Let’s Encrypt certificates on Kubernetes, enabling secure communication for your applications.


Leave a Comment