Install Cert-manager let’s encrypt on Kubernetes

Introduction

Dalam ekosistem Kubernetes, memastikan aplikasi kita dapat diakses melalui HTTPS adalah salah satu langkah penting untuk meningkatkan keamanan. Salah satu cara yang paling populer dan mudah untuk mengelola sertifikat SSL/TLS adalah menggunakan Cert-Manager.
Dengan Cert-Manager, Kubernetes dapat mengelola sertifikat dari berbagai issuer, termasuk Let’s Encrypt, secara otomatis — mulai dari pembuatan, validasi, hingga perpanjangan sertifikat tanpa campur tangan manual.

Dalam artikel ini, kita akan membahas flow proses, prasyarat, serta panduan lengkap step-by-step untuk menginstal Cert-Manager dan mengaktifkan Let’s Encrypt pada cluster Kubernetes kita.

Flow

Arhchitecture Overview

Prerequisites:

  • Domain aktif mengarah ke LoadBalancer Ingress
  • kubectl terhubung ke cluster
  • Helm install
  • Akses DNS untuk membuat A record ke IP Ingress

Step by Step Implementation

Step 1: Install Cert-manager

Cert-Manager direkomendasikan di-install menggunakan Helm.

helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager --create-namespace \
--version v1.12.0 \
--set installCRDs=true

Verify cert-manager

kubectl get pods -n cert-manager

Step 2: Create ClusterIssuer (Let’s Encrypt)

# cluster-issuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: admin@igunawan.com
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx

Apply file : kubectl apply -f cluster-issuer.yaml

Step 3: Install NGINX Ingress Controller (Jika belum ada)

Add helm

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx --create-namespace

Step 4: Create Ingress Resource Dengan TLS

Contoh untuk domain igunawan.com

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: api-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  tls:
    - hosts:
        - igunawan.com
      secretName: api-tls
  rules:
    - host: igunawan.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: api-service
                port:
                  number: 80

Apply:

kubectl apply -f ingress.yaml

Step 5: Verify TLS

Leave a Reply

Your email address will not be published. Required fields are marked *