Setelah kluster selesai dibuat, kamu dapat mengakses pod dengan menggunakan service bertipe NodePort. Agar aplikasi dapat dibuka menggunakan domain name atau menggunakan service bertipe ClusterIP, maka kita harus memasang Ingress Controller.
Pada tutorial ini, saya akan menggunakan NGINX Ingress Controller.
- Kluster Kubernetes
- Helm Chart 3
- Secara default, tipe service ingress adalah LoadBalancer/LB, sehingga kamu harus mempunyai LB terlebih dahulu. (Jika kamu memasang kubernetes pada bare metal, maka kamu memerlukan MetalLB sebagai internal load balancer)
- Jalankan perintah:
helm repo add nginx-stable https://helm.nginx.com/stable
helm repo update
- Buat namespace baru
kubectl create ns ingress
- Kemudian, install nginx ingress:
helm install nginx-ingress nginx-stable/nginx-ingress -n ingress
- Lalu, cek prosesnya
watch -n2 'kubectl get all -n ingress'
- Sampai tahap ini, ingress nginx berhasil diinstall. Namun, status LoadBalancer nginx akan terus
<pending>
sampai service LoadBalancer (Service dari provider atau menggunakan MetalLB) memberikan IP eksternal.
- Jalankan perintah:
helm repo add nginx-stable https://helm.nginx.com/stable
helm repo update
- Lalu, download
values.yaml
dari ingress nginx
cd k8s
mkdir -p ingress
cd ingress
helm show values nginx-stable/nginx-ingress > values.yaml
- Buka
values.yaml
, cari dan ganti service.typeLoadBalancer
menjadiNodePort
- (Opsional) Jika kamu ingin menjadikan node port static, cari dan ganti:
- service.httpPort.nodePort dengan port antara 30000 - 32767
- service.httpsPort.nodePort dengan port antara 30000 - 32767
- service.externalIPs dengan IP external kamu (Jika kamu mengguna tipe NodePort)
- Buat namespace
ingress-nginx
:
kubectl create ns ingress
- Terakhir install chart:
helm install ingress-default nginx-stable/nginx-ingress -f values.yaml -n ingress
- Dan lihat workload-nya sampai selesai running:
watch -n2 'kubectl get all -n ingress -o wide'
- Terakhir, kita akan cek apakah ingress berhasil di install (Disini saya menggunakan
30000
sebagai port HTTP dan30443
sebagai port HTTPS):- HTTP:
curl <ip.address.node.worker>:30000
- HTTPS:
curl <ip.address.node.worker>:30443
Atau, apabila kamu telah set External IPs:
curl <ip.address.external.ip>
tanpa menambah port dibagian belakang
Apabila kamu ingin mengupdate values.yaml
, jalankan ini setelah ada update:
helm upgrade ingress-nginx nginx-stable/nginx-ingress -f values.yaml -n ingress
helm uninstall ingress-nginx -n ingress
- Buatlah sebuah node baru khusus sebagai ingress controller. Sehingga, saat production, IP node ingress tersebut yang akan menjadi gateway. Sehingga worker lainnya tidak terganggu. (Jika tidak menggunakan LB)
- Jika menggunakan tips diatas, pastikan bahwa untuk setiap node diberi label dan hanya deploy apps ke node yang berlabel "worker" misalnya