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!