Mengenal Service dan Networking di Kubernetes
Kubernetes (K8s) udah jadi standar buat manage aplikasi containerized di berbagai skala, mulai dari kecil sampe besar. Salah satu aspek kunci yang bikin K8s keren banget adalah cara dia ngatur service dan networking-nya. Nah, buat kamu yang mungkin masih awam, nggak usah khawatir! Kita bakal bahas bareng-bareng gimana K8s ngatur networking dan service buat aplikasimu.
Dasar Networking di Kubernetes
Pertama-tama, kita perlu ngerti dulu konsep dasar networking di K8s. Di dalam cluster K8s, setiap pod punya IP address sendiri. Tapi, inget ya, pod itu bisa muncul dan hilang kapan aja (karena scaling atau kegagalan). Jadi, nggak bisa ngandelin IP pod buat akses jangka panjang.
Nah, di sinilah service masuk. Service di K8s itu kayak abstraksi yang ngejalanin satu set pod dan nyediain cara konsisten buat ngaksesnya. Nggak peduli pod-pod itu nongol atau ilang, service bakal ngejaga agar traffic bisa terus ngalir ke pod yang masih hidup.
Macam-macam Jenis Service
Ada beberapa tipe service di K8s yang bisa kamu pilih tergantung kebutuhan:
ClusterIP: Ini tipe default. Service punya IP internal di dalam cluster dan cuma bisa diakses dari dalam cluster. Misalnya, kamu punya service database yang cuma perlu diakses sama aplikasi lain di dalam cluster.
NodePort: Service ini menambahkan akses eksternal ke service dengan mapping port tertentu di setiap node. Jadi, kamu bisa akses service lewat
<NodeIP>:<NodePort>
. Biasanya dipake buat testing atau akses sementara.LoadBalancer: Kalo kamu pake cloud provider, biasanya K8s integrasi sama load balancer mereka. Service LoadBalancer bakal ngebuat load balancer eksternal yang ngatur traffic ke pod-podmu. Tipe ini cocok buat aplikasi yang perlu diakses publik.
ExternalName: Service ini ngemap ke DNS name di luar cluster. Misalnya, kamu bisa ngebuat service yang pura-pura jadi bagian dari cluster, tapi sebenernya ngarah ke URL eksternal.
Headless: Ini khusus buat kasus-kasus yang kita nggak butuh load balancing atau IP tunggal. Pod-pod bisa langsung diakses lewat their individual IPs. Biasanya dipake buat stateful application kaya database.
Contoh Ngebuat Service
Nah, gimana caranya ngebuat service di K8s? Nih contoh YAML buat service ClusterIP sederhana:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
Dengan konfig di atas, K8s bakal ngebuat service dengan nama nginx-service
yang ngarahin traffic ke port 80 di pod dengan label app: nginx
.
Kalo kamu pake kubectl, bisa pake perintah kayak kubectl expose deployment nginx-deployment --name=nginx-service --port=80 --target-port=80
buat ngebuat service yang mirip.
Network Policies: Ngatur Akses ke Pod
Kadang-kadang, kita perlu ngatur gimana traffic bisa ngalir antar pod. K8s nyediain fitur bernama Network Policies buat ngontrol ini. Dengan Network Policies, kamu bisa ngasi ijin atau ngeblok traffic berdasarkan aturan tertentu.
Contoh, kamu bisa ngebuat aturan kalo aplikasi frontend cuma bisa ngakses aplikasi backend di port 80, atau database cuma bisa diakses sama backend tertentu.
DNS di Kubernetes
K8s pake CoreDNS atau kube-dns (tergantung versi) buat nyediain DNS internal di dalam cluster. Setiap service otomatis dapet entry DNS dengan format <service-name>.<namespace>.svc.cluster.local
.
Jadi, misalnya kamu punya service namanya web
di namespace default
, kamu bisa akses pake web.default.svc.cluster.local
. Kerennya, DNS ini ngejaga kalo service nggak perlu pake IP yang statis dan bisa diakses dengan nama konsisten.
Istio dan Service Mesh
Untuk aplikasi yang lebih kompleks, mungkin kamu perlu fitur tambahan kaya observability, security, atau advanced traffic management. Nah, di sini service mesh kaya Istio bisa jadi solusi. Istio ngebuat layer tambahan di atas networking K8s, yang ngejalanin sidecar proxy (Envoy) di setiap pod, biar kamu bisa ngatur traffic dengan lebih halus.
Misalnya, bisa ngebuat A/B testing, canary deployment, atau rate limiting dengan mudah pake konfig Istio.
Yap, networking dan service di K8s punya banyak hal menarik buat dieksplorasi. Dari service dasar sampe tool tambahan kayanya Istio, K8s memungkinin kamu ngelola aplikasi dengan lebih fleksibel dan robust.