Ingress: Routing
Versi Bahasa Indonesia. Baca dalam Bahasa Inggris
Ingress mengekspos rute HTTP dan HTTPS dari luar cluster ke service-service di dalam cluster. Routing traffic dikendalikan oleh aturan yang didefinisikan pada resource Ingress.
*Kubernetes Official Docs
Ingress menyediakan satu titik masuk (entry point) yang merutekan request ke service yang berbeda berdasarkan:
- Hostnames (contoh: app.example.com)
- Paths (contoh: /api, /web)
- TLS Settings (untuk HTTPS)
- Annotations (untuk perilaku tambahan seperti rewrite, redirect, dll.)
Ada banyak use case yang memanfaatkan ingress seperti TLS, Force HTTPS, Force Redirect, Basic Authentication, Rate Limiting, IP Whitelisting, dll. Tapi untuk sekarang kita fokus ke implementasi dasar untuk routing traffic.
Enable Minikube Ingress Addons
Untuk mengaktifkan ingress di minikube, kita perlu mengaktifkan addons terlebih dahulu.
β minikube addons enable ingress
π‘ ingress is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
π‘ After the addon is enabled, please run "minikube tunnel" and your ingress resources would be available at "127.0.0.1"
βͺ Using image registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.3
βͺ Using image registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.4.3
βͺ Using image registry.k8s.io/ingress-nginx/controller:v1.11.2
π Verifying ingress addon...
π The 'ingress' addon is enabledUntuk memvalidasi apakah ingress controller sudah berjalan, kita bisa gunakan kubectl get pods -n ingress-nginx. Mungkin perlu waktu hingga satu menit sebelum pod-pod ini terlihat.
β kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-fmhdk 0/1 Completed 0 2m40s
ingress-nginx-admission-patch-zxmgn 0/1 Completed 0 2m40s
ingress-nginx-controller-bc57996ff-rz4wd 1/1 Running 0 2m40sCreate Ingress
Mari ekspos service simple-go kita ke luar menggunakan ingress yang kita definisikan di bawah. Buat file baru ingress.yaml dan masukkan definisi ingress di sana.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: simple-ingress
spec:
ingressClassName: nginx
rules:
- host: simple-go.mine
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: simple-go
port:
number: 8080Ini akan membuat object ingress dengan nama simple-ingress menggunakan nginx. Ada ingressClassName lain seperti Traefik, HAProxy, Istio, dll. Tapi dalam kasus ini kita akan pakai nginx.
Di bagian rules kita bisa mendefinisikan aturan untuk ingress ini. Sebuah aturan Ingress menentukan bagaimana traffic HTTP(S) yang masuk dirutekan di dalam cluster Kubernetes.
host: Menentukan domain mana yang harus cocok (opsional).paths.path: Mendefinisikan path URL yang akan dirutekan.paths.pathType: Tipe pencocokan path (detail lebih lanjut di bawah). Untuk daftar lengkap path type bisa baca lebih lanjut di Path Type Example.backend.service.name: Nama service Kubernetes untuk menerima traffic.backend.service.port.number: Port service untuk meneruskan traffic.
Jadi dalam definisi ingress kita, kita ingin mencocokkan semua traffic untuk domain simple-go.mine ke service dengan nama simple-go dan port 8080.
Ayo apply definisi ingress kita dan validasi apakah sudah terdaftar.
β kubectl apply -f ingress.yaml
ingress.networking.k8s.io/simple-ingress createdβ kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
simple-ingress nginx simple-go.mine 192.168.49.2 80 15sTest Ingress
Karena saya menggunakan MacOS (Minikube dengan Docker Driver), saya perlu melakukan tunneling terlebih dahulu menggunakan perintah minikube tunnel. Ini akan men-tunnel semua traffic localhost untuk port 80 dan 443 ke minikube.
β minikube tunnel
β
Tunnel successfully started
π NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...
β The service/ingress simple-ingress requires privileged ports to be exposed: [80 443]
π sudo permission will be asked for it.
π Starting tunnel for service simple-ingress.Setelah tunneling berjalan, kita bisa mengaksesnya menggunakan perintah curl di bawah.
β curl --resolve "simple-go.mine:80:127.0.0.1" -i http://simple-go.mine
HTTP/1.1 200 OK
Date: Fri, 31 Jan 2025 03:37:49 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 65
Connection: keep-alive
[{"id":1,"content":"Hello!"},{"id":2,"content":"Good Morning!"}]Kamu bisa coba mengubah path dan domain untuk melihat perubahannya.
References
- https://kubernetes.io/docs/concepts/services-networking/ingress/
- https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/
Last updated on