Portal/Notes πŸ“
Cka

Prinsip Desain Jaringan

Versi Bahasa Indonesia. Baca dalam Bahasa Inggris

Kubernetes Network Sumber: https://kubernetes.io/docs/concepts/cluster-administration/networking/#kubernetes-ip-address-ranges

Node Network

Node Network terdiri dari worker node dan control plane node Kubernetes. Semua node dapat berkomunikasi satu sama lain.

  • Setiap node dalam klaster Kubernetes harus dapat berkomunikasi dengan node lain tanpa NAT (Network Address Translation).
  • Kubernetes mengasumsikan jaringan yang flat di mana semua node dapat berkomunikasi secara bebas.
  • Node biasanya memiliki alamat IP yang dapat dirutekan dalam klaster.

Untuk melihat IP Node, kita dapat menggunakan perintah kubectl get nodes -o wide.

➜ kubectl get nodes -o wide
NAME       STATUS   ROLES           AGE   VERSION   INTERNAL-IP    
minikube   Ready    control-plane   19h   v1.31.0   192.168.49.2   

EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
<none>        Ubuntu 22.04.4 LTS   6.10.14-linuxkit   docker://27.2.0

Pod Network

Pod Network adalah tempat semua Pod Kubernetes berkomunikasi. Pod dalam klaster berkomunikasi menggunakan routing IP langsung.

  • Setiap pod mendapat alamat IP unik.
  • Komunikasi pod-to-pod terjadi langsung tanpa NAT.
  • Container Network Interface (CNI) plugin bertanggung jawab untuk mengelola pod networking.
  • Container dalam pod yang sama berkomunikasi melalui localhost.

Kita dapat menguji komunikasi pod-to-pod dengan ping dari satu pod ke pod lain.

➜ kubectl get pods -o wide
NAME                         READY   STATUS    RESTARTS   AGE     
postgres-f8f589d5b-59rw8     1/1     Running   0          4h37m   
simple-go-5dc4557ffc-c24fp   1/1     Running   0          4h8m    
simple-go-5dc4557ffc-d6tz6   1/1     Running   0          4h8m    
simple-go-5dc4557ffc-gv4fv   1/1     Running   0          4h8m    

IP            NODE       NOMINATED NODE   READINESS GATES
10.244.0.11   minikube   <none>           <none>
10.244.0.17   minikube   <none>           <none>
10.244.0.15   minikube   <none>           <none>
10.244.0.16   minikube   <none>           <none>
➜ kubectl exec -it simple-go-5dc4557ffc-c24fp -- ping 10.244.0.11
PING 10.244.0.11 (10.244.0.11): 56 data bytes
64 bytes from 10.244.0.11: seq=0 ttl=64 time=97.104 ms
64 bytes from 10.244.0.11: seq=1 ttl=64 time=0.219 ms
64 bytes from 10.244.0.11: seq=2 ttl=64 time=0.292 ms
64 bytes from 10.244.0.11: seq=3 ttl=64 time=0.160 ms
64 bytes from 10.244.0.11: seq=4 ttl=64 time=0.395 ms
^C
--- 10.244.0.11 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.160/19.634/97.104 ms

Service Network

Service Network adalah jaringan virtual yang digunakan untuk Service Kubernetes. Service mendapatkan ClusterIP yang stabil dan tidak berubah. Kubernetes melakukan load balancing traffic ke seluruh backend pod.

Kubernetes menulis ulang traffic keluar dari pod jika ditujukan untuk sebuah Service. Ini memastikan bahwa permintaan dirutekan dengan benar ke pod backend.

  • Service menggunakan ClusterIP (IP virtual) untuk merutekan traffic ke pod.
  • kube-proxy mengelola traffic service menggunakan iptables atau IPVS.

Dapatkan service endpoints:

➜ kubectl get endpoints        
NAME         ENDPOINTS                                            AGE
kubernetes   192.168.49.2:8443                                    24h
postgres     10.244.0.11:5432                                     4h35m
simple-go    10.244.0.15:8080,10.244.0.16:8080,10.244.0.17:8080   4h11m

Referensi


Edit on GitHub

Last updated on

Prinsip Desain Jaringan | Faisal Affan