Pada artikel sebelumnya, AKSES POD ‘HTTP’ DARI INTERNET MENGGUNAKAN NGINX INGRESS, kita telah berhasil mengekspose aplikasi kita ke internet. Pada artikel tersebut app kita masih menggunakan protokol http yang tidak aman. Pada artikel ini kita akan membuat ingress kita menggunakan protokol https dan menggunakan sertifikat tls gratis dari let’s encrypt.

Install cert-manager

Cert-Manager adalah solusi standar de-facto untuk manajemen sertifikat di kluster Kubernetes. Ini mendukung manajemen sertifikat x.509 untuk Kubernetes dan kluster OpenShift, mengambil sertifikat dari penerbit privat(internal) atau publik, dan memastikan mereka dirotasi dengan benar dan selalu diperbarui.

Kalian bisa menggunakan helm atau manifes berikut: https://cert-manager.io/docs/installation/

Atau kalian yang menggunakan microk8s bisa menggunakan command microk8s enable cert-manager

Jika cert-manager sudah terinstall selanjutnya kita pasang clusterissuer

ClusterIssuer

ClusterIssuer digunakan untuk mengonfigurasi akun dengan Let’s Encrypt.

buat template bernama clusterissuer.yml

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
 name: lets-encrypt
spec:
 acme:
   email: [email protected]
   server: https://acme-v02.api.letsencrypt.org/directory
   privateKeySecretRef:
     # Secret resource that will be used to store the account's private key.
     name: lets-encrypt-priviate-key
   # Add a single challenge solver, HTTP01 using nginx
   solvers:
   - http01:
       ingress:
         class: public

Kemudian apply kan ke kubernetes dengan perintah berikut:

kubectl apply -f clusterissuer.yml

Cek secara berkala apakah clusterissuer sudah siap digunakan atau belum menggunakan perintah berikut:

k get clusterissuer

Jika sudah ready, maka kita bisa ke langkah selanjutnya yaitu mengedit atau meng apply template ingress baru.

Template Ingress

Pada artikel sebelumnya kita memiliki template ingress.yml seperti berikut:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: httpbin-ingress
  namespace: tkjpedia
spec:
  ingressClassName: public
  rules:
  - host: 'httpbin.tkjpedia.com'
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: httpbin-service
            port:
              number: 80

Kita perlu menambahkan beberapa baris seperti template berikut:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: httpbin-ingress
  namespace: tkjpedia
  annotations:
   cert-manager.io/cluster-issuer: lets-encrypt
spec:
  ingressClassName: public
  tls:
  - hosts:
    - 'httpbin.tkjpedia.com'
    secretName: httpbin-tkjpedia-com-tls
  rules:
  - host: 'httpbin.tkjpedia.com'
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: httpbin-service
            port:
              number: 80

dan apply kembali template tersebut

Sesaat setelah di apply, maka app kalian jika di akses akan di redirect ke https dan balakan error seperti ini, tenang aja. ini ga akan berlangsung lama karena sertifikat tls valid sedang di proses di background.

cek secara berkala dan refresh refresh terus hehehe.. sampai bisa diakses dengan tidak ada tanda https coret / not secure (sertifikat sudah valid) seperti gambar berikut:

Selamat!