Masdika Loading..
Masdika.ID

DevOps Engineer

Cloud Engineer

System Administrator

  • Home
  • Portfolio
  • Services
  • Resume
  • Skills
  • Blog
  • Contact
Masdika.ID

DevOps Engineer

Cloud Engineer

System Administrator

Download CV

Recent Posts

  • Panduan Lengkap Install K3s di Ubuntu dan Konfigurasi Remote Kubectl dari Windows PC/Laptop
  • Deploy Next.js di Kubernetes dengan Ingress + SSL Let’s Encrypt
  • Tutorial Lengkap: Membuat Cloudflare API Token & Menggunakannya di Kubernetes dengan cert-manager
  • Panduan Lengkap Deploy WordPress + Redis + MySQL di Kubernetes dengan SSL Cloudflare
  • Panduan Lengkap Install & Konfigurasi Ceph 3 Node dengan RGW (S3 Compatible)

Recent Comments

  1. Rudy on Panduan Lengkap Install K3s di Ubuntu dan Konfigurasi Remote Kubectl dari Windows PC/Laptop
  2. Masdika.ID on Tutorial Lengkap: Membuat Cloudflare API Token & Menggunakannya di Kubernetes dengan cert-manager
  3. Sahrull on Tutorial Lengkap: Membuat Cloudflare API Token & Menggunakannya di Kubernetes dengan cert-manager
  4. Masdika.ID on Tutorial Lengkap: Membuat Cloudflare API Token & Menggunakannya di Kubernetes dengan cert-manager
  5. Sahrull on Tutorial Lengkap: Membuat Cloudflare API Token & Menggunakannya di Kubernetes dengan cert-manager

Categories

  • Tutorial

Masddika.BIZ.ID

  • About
  • Terms & Conditions
  • Privacy Policy
BLOG POST

Panduan Lengkap Deploy Ingress NGINX dan Cert-Manager Kubernetes dengan HTTPS Otomatis (Let’s Encrypt)

June 26, 2025 Tutorial by Masdika.ID
Panduan Lengkap Deploy Ingress NGINX dan Cert-Manager Kubernetes dengan HTTPS Otomatis (Let’s Encrypt)

🌟 Pendahuluan

Panduan ini menjelaskan langkah-langkah melakukan deployment Ingress NGINX dan Cert-Manager di Kubernetes dengan SSL otomatis dari Let’s Encrypt. Tutorial ini juga dilengkapi konfigurasi MetalLB untuk Load Balancer pada VPS atau bare-metal.

Selain itu, panduan ini mencakup setup redirect dari domain non-www ke www demi konsistensi SEO dan branding.

πŸ“ Struktur Folder

.
β”œβ”€β”€ cert-manager
β”‚   β”œβ”€β”€ cert-manager-deploy.yaml
β”‚   β”œβ”€β”€ cluster-issuer.yaml
β”‚   └── namespace.yaml
β”œβ”€β”€ ingress-nginx
β”‚   β”œβ”€β”€ ingress-nginx-deploy.yaml
β”‚   β”œβ”€β”€ ingress-nginx-svc.yaml
β”‚   └── namespace.yaml
└── nginx-test
    β”œβ”€β”€ deployment.yaml
    β”œβ”€β”€ ingress-www.yaml
    β”œβ”€β”€ redirect-to-www.yaml
    └── service.yaml

πŸ”§ Isi File YAML

πŸ“‚ Folder cert-manager

1. cert-manager-deploy.yaml

Install cert-manager:

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.0/cert-manager.yaml

2. 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: [email protected]
    privateKeySecretRef:
      name: letsencrypt-prod-private-key
    solvers:
    - http01:
        ingress:
          class: nginx

3. namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: cert-manager

πŸ“‚ Folder ingress-nginx

1. namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: ingress-nginx

2. ingress-nginx-deploy.yaml

Deployment NGINX Controller lengkap dengan konfigurasi:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/component: controller
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: ingress-nginx
      app.kubernetes.io/component: controller
  template:
    metadata:
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/component: controller
    spec:
      serviceAccountName: ingress-nginx
      containers:
      - name: controller
        image: registry.k8s.io/ingress-nginx/controller:v1.10.1
        args:
          - /nginx-ingress-controller
          - --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
          - --election-id=ingress-controller-leader
          - --controller-class=k8s.io/ingress-nginx
          - --ingress-class=nginx
          - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
        env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
        ports:
          - name: http
            containerPort: 80
          - name: https
            containerPort: 443
        readinessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
        livenessProbe:
          httpGet:
            path: /healthz
            port: 10254
            scheme: HTTP
        resources:
          limits:
            cpu: 500m
            memory: 512Mi
          requests:
            cpu: 250m
            memory: 256Mi

3. ingress-nginx-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: https

πŸ“‚ Folder nginx-test

1. deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-test
  template:
    metadata:
      labels:
        app: nginx-test
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

2. service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-test
spec:
  selector:
    app: nginx-test
  ports:
    - port: 80
      targetPort: 80

3. ingress-www.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-test
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - www.masdika.my.id
    secretName: www-masdika-my-id-tls
  rules:
  - host: www.masdika.my.id
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-test
            port:
              number: 80

4. redirect-to-www.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: redirect-to-www
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/permanent-redirect: https://www.masdika.my.id$request_uri
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - masdika.my.id
    secretName: masdika-my-id-tls
  rules:
  - host: masdika.my.id
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: dummy
            port:
              number: 80

πŸš€ Langkah-Langkah Deploy Lengkap

  1. Deploy Cert-Manager:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.0/cert-manager.yaml
kubectl apply -f cert-manager/cluster-issuer.yaml
  1. Deploy Ingress NGINX:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.3/deploy/static/provider/cloud/deploy.yaml
  1. Deploy Aplikasi NGINX Test:
kubectl apply -f nginx-test/deployment.yaml
kubectl apply -f nginx-test/service.yaml
  1. Buat Ingress untuk Domain Utama (www):
kubectl apply -f nginx-test/ingress-www.yaml
  1. Buat Redirect dari Non-WWW ke WWW:
kubectl apply -f nginx-test/redirect-to-www.yaml
  1. Verifikasi:
  • πŸ“… Akses https://www.masdika.my.id βœ”οΈ Berhasil
  • πŸ“… Akses https://masdika.my.id βœ”οΈ Redirect ke www
  • πŸ” HTTPS valid dengan sertifikat dari Let’s Encrypt

🏁 Penutup

Dengan setup ini, kamu mendapatkan:

  • 🌐 Load Balancer dengan Ingress NGINX
  • πŸ”’ SSL/TLS otomatis dari Let’s Encrypt via Cert-Manager
  • πŸ” Redirect non-www ke www otomatis
  • πŸ“ Struktur folder rapi dan terorganisir
Share:
Tags: cert managerkubernetesnginxssl
Related Posts
Panduan Lengkap Install K3s di Ubuntu dan Konfigurasi Remote Kubectl dari Windows PC/Laptop

πŸš€ Apa itu K3s? K3s adalah distribusi Kubernetes ringan dari Rancher yang dirancang untuk mempermudah proses instalasi dan penggunaan Kubernetes….

Deploy Next.js di Kubernetes dengan Ingress + SSL Let’s Encrypt

Buat kamu yang lagi Deploy aplikasi dengan Next.js dan pengen jalan di Kubernetes dengan domain custom + SSL otomatis, artikel…

Post navigation

Prev
Next
Write a comment Cancel Reply


Β© 2025 www.masdika.id β€” Semua hak cipta dilindungi