DEV Community

Cover image for Securing Your Kubernetes Website with Let's Encrypt and cert-manager
Sahil Ghanwat
Sahil Ghanwat

Posted on

Securing Your Kubernetes Website with Let's Encrypt and cert-manager

Securing Your Kubernetes Website with Let's Encrypt and cert-manager

cert-manager

In today's digital world, security is paramount. For websites, this often means implementing HTTPS (HTTPS) to encrypt communication between the server and the user. Let's Encrypt provides a free and automated way to obtain and renew SSL certificates, and cert-manager simplifies this process within your Kubernetes cluster.

This guide will walk you through the steps of securing your Kubernetes-deployed website with Let's Encrypt certificates using cert-manager.

1. Install cert-manager

  • Install Helm: If you're using Helm, install it on your Kubernetes cluster.
  • Install cert-manager: Use Helm to install cert-manager:
   helm install cert-manager jetstack/cert-manager \
       --namespace cert-manager \
       --create-namespace \
       --set installCRDs=true 
Enter fullscreen mode Exit fullscreen mode

2. Create a ClusterIssuer for Let's Encrypt

  • Create a ClusterIssuer resource: This defines how cert-manager will obtain certificates from Let's Encrypt. Here's an example:
   apiVersion: cert-manager.io/v1
   kind: ClusterIssuer
   metadata:
     name: letsencrypt-prod
   spec:
     acme:
       server: https://acme-v02.api.letsencrypt.org/directory
       email: your_email@example.com 
       privateKeySecretRef:
         secretName: letsencrypt-prod
       solvers:
       - http01:
           ingress:
             class: nginx 
Enter fullscreen mode Exit fullscreen mode
  • Replace your_email@example.com with your email address.
  • Ensure the ingress class matches your Ingress controller (e.g., nginx, traefik).

    • Apply the ClusterIssuer:
   kubectl apply -f letsencrypt-issuer.yaml
Enter fullscreen mode Exit fullscreen mode

3. Create an Ingress Resource

  • Create an Ingress resource: This defines how traffic should be routed to your application. Here's a basic example:
   apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: my-app-ingress
   spec:
     rules:
     - host: your-domain.com 
       http:
         paths:
         - path: /
           backend:
             serviceName: my-app-service 
             servicePort: 80
     tls:
     - hosts:
       - your-domain.com 
       secretName: your-domain-tls 
Enter fullscreen mode Exit fullscreen mode
  • Replace your-domain.com with your actual domain name.
  • Replace my-app-service and my-app-service with the actual names of your Service and its port.
  • Specify the secretName that cert-manager will create to store the certificate and key.

    • Apply the Ingress:
   kubectl apply -f ingress.yaml
Enter fullscreen mode Exit fullscreen mode

4. Verify Certificate Issuance

  • Check the status of the Certificate resource:
   kubectl get certificates 
Enter fullscreen mode Exit fullscreen mode

You should see a Certificate resource being created by cert-manager.

  • Check the Ingress status:
   kubectl describe ingress my-app-ingress
Enter fullscreen mode Exit fullscreen mode

The Ingress status should indicate that the TLS configuration is ready.

5. Access Your Website

  • Browse to your website: Visit https://your-domain.com in your browser. You should now see a secure connection (indicated by the green padlock in the address bar).

Important Notes:

  • DNS Configuration: Ensure that your domain name is properly configured to point to your Kubernetes cluster's LoadBalancer IP or Ingress endpoint.
  • Ingress Controller: This example assumes you are using an Ingress controller like Nginx Ingress.
  • Security: Always follow security best practices and regularly review and update your certificates.
  • Troubleshooting: If you encounter any issues, check the logs of cert-manager, your Ingress controller, and your Kubernetes cluster for error messages.

By following these steps, you can effectively secure your Kubernetes-based website with Let's Encrypt certificates using cert-manager. This will enhance the security and trust of your website for your users.


👨‍💻 About Me:

I'm an aspiring software engineer with a knack for Kubernetes, DevOps, Cloud. I thrive on building efficient systems. I love sharing my tech learnings on LinkedIn and Twitter. Follow me for insights on softwares, cutting-edge technology and many more things. 🚀


Image of Datadog

Measure and Advance Your DevSecOps Maturity

In this white paper, we lay out a DevSecOps maturity model based on our experience helping thousands of organizations advance their DevSecOps practices. Learn the key competencies and practices across four distinct levels of maturity.

Get The White Paper

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →