Ada banyak sekali observability tools yang beredar di Internet yang bisa Anda gunakan. Masing-masing tools memiliki kelebihan dan kekurangan yang mungkin fit dengan kebutuhan. Namun, apabila services Anda banyak berjalan di Kubernetes, Hubble bisa jadi opsi yang bisa digunakan.

Logo Hubble
Hubble adalah network, service, dan security observability platform yang dibangun di atas Cilium dan eBPF, memungkinkan pengguna untuk mengukur dan memahami perilaku sistem yang berjalan di Kubernetes dengan mudah. Cilium dan eBPF bekerja dengan cara menempatkan program kecil yang disebut “probe” di kernel Linux. Probe ini dapat digunakan untuk memantau dan memfilter lalu lintas jaringan, serta untuk memantau perilaku sistem lainnya. Hubble menggunakan probe eBPF untuk mendapatkan visibilitas yang mendalam ke dalam komunikasi dan perilaku layanan serta infrastruktur jaringan Kubernetes. Program eBPF sangat ringan dan efisien, sehingga tidak menimbulkan overhead yang signifikan pada sistem. Selain itu, program eBPF dapat diprogram secara dinamis, yang memungkinkan Hubble untuk menyesuaikan visibilitas dan pemfilteran sesuai dengan kebutuhan. Secara keseluruhan, Cilium dan eBPF merupakan teknologi yang powerful untuk observability Kubernetes. Hubble memanfaatkan teknologi ini untuk memberikan visibilitas yang mendalam, skalabilitas, dan keamanan ke dalam komunikasi dan perilaku services serta infrastruktur jaringan Kubernetes.

Alur komponen Hubble
Untuk mendapat gambaran lebih luas, Anda bisa menyiapkan sandbox environment serta gunakan panduan cepat proses instalasi, dengan kebutuhan minimum sebagai berikut:
- Cluster Kubernetes dengan minimum 2 node menggunakan Minikube
- Cilium
- Hubble
Instalasi Minikube menggunakan 2 node.
$ minikube start --nodes 2 --network-plugin=cni --cni=false
Gunakan cilium-cli untuk memulai proses instalasi Cilium. Panduan lengkap cara penggunaannya dapat Anda temukan di sini.
$ cilium install
🔮 Auto-detected Kubernetes kind: minikube
✨ Running "minikube" validation checks
✅ Detected minikube version "1.23.2"
ℹ️ Using Cilium version 1.13.4
🔮 Auto-detected cluster name: minikube
🔮 Auto-detected datapath mode: tunnel
🔮 Auto-detected kube-proxy has been installed
Pastikan pods Cilium sudah berjalan dengan baik.
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system cilium-j4gnm 1/1 Running 0 8m39s
kube-system cilium-operator-6c4576f5b8-8626l 1/1 Running 0 8m39s
kube-system cilium-wb62r 1/1 Running 0 8m39s
kube-system coredns-78fcd69978-wb9wx 1/1 Running 0 92s
kube-system etcd-minikube 1/1 Running 1 (2d17h ago) 2d17h
kube-system kube-apiserver-minikube 1/1 Running 1 (10m ago) 2d17h
kube-system kube-controller-manager-minikube 1/1 Running 1 (2d17h ago) 2d17h
kube-system kube-proxy-b66fx 1/1 Running 1 (2d17h ago) 2d17h
kube-system kube-proxy-cwtlj 1/1 Running 1 (2d17h ago) 2d17h
kube-system kube-scheduler-minikube 1/1 Running 1 (10m ago) 2d17h
kube-system storage-provisioner 1/1 Running 2 (2d17h ago) 2d17h
Anda dapat melakukan verifikasi proses instalasinya menggunakan cilium-cli.
$ cilium status --wait
/¯¯\
/¯¯__/¯¯\ Cilium: OK
__/¯¯__/ Operator: OK
/¯¯__/¯¯\ Envoy DaemonSet: disabled (using embedded mode)
__/¯¯__/ Hubble Relay: disabled
__/ ClusterMesh: disabled
Deployment cilium-operator Desired: 1, Ready: 1/1, Available: 1/1
DaemonSet cilium Desired: 2, Ready: 2/2, Available: 2/2
Containers: cilium Running: 2
cilium-operator Running: 1
Cluster Pods: 1/1 managed by Cilium
Helm chart version: 1.13.4
Image versions cilium quay.io/cilium/cilium:v1.13.4@sha256:bde8800d61aaad8b8451b10e247ac7bdeb7af187bb698f83d40ad75a38c1ee6b: 2
cilium-operator quay.io/cilium/operator-generic:v1.13.4@sha256:09ab77d324ef4d31f7d341f97ec5a2a4860910076046d57a2d61494d426c6301: 1
Lakukan pengujian konektivitas jaringan dengan menjalankan perintah berikut:
$ cilium connectivity test
ℹ️ Monitor aggregation detected, will skip some flow validation steps
✨ [minikube] Creating namespace cilium-test for connectivity check…
.
.
.
=] Skipping Test [pod-to-ingress-service-allow-ingress-identity]
[=] Test [dns-only]
✅ All 42 tests (280 actions) successful, 12 tests skipped, 1 scenarios skipped.
Enable Hubble dan cek statusnya.
$ cilium hubble enable
$ cilium status
/¯¯\
/¯¯__/¯¯\ Cilium: OK
__/¯¯__/ Operator: OK
/¯¯__/¯¯\ Envoy DaemonSet: disabled (using embedded mode)
__/¯¯__/ Hubble Relay: OK
__/ ClusterMesh: disabled
Deployment hubble-relay Desired: 1, Ready: 1/1, Available: 1/1
DaemonSet cilium Desired: 2, Ready: 2/2, Available: 2/2
Deployment cilium-operator Desired: 1, Ready: 1/1, Available: 1/1
Containers: cilium-operator Running: 1
hubble-relay Running: 1
cilium Running: 2
Cluster Pods: 6/6 managed by Cilium
Helm chart version: 1.13.4
Image versions cilium-operator quay.io/cilium/operator-generic:v1.13.4@sha256:09ab77d324ef4d31f7d341f97ec5a2a4860910076046d57a2d61494d426c6301: 1
hubble-relay quay.io/cilium/hubble-relay:v1.13.4@sha256:bac057a5130cf75adf5bc363292b1f2642c0c460ac9ff018fcae3daf64873871: 1
cilium quay.io/cilium/cilium:v1.13.4@sha256:bde8800d61aaad8b8451b10e247ac7bdeb7af187bb698f83d40ad75a38c1ee6b: 2
Pastikan Hubble API sudah berjalan dengan baik. Gunakan hubble-client untuk mempercepat proses pengecekkan.
$ hubble status
Healthcheck (via localhost:4245): Ok
Current/Max Flows: 8,190/8,190 (100.00%)
Flows/s: 27.97
Connected Nodes: 2/2
Enable Hubble UI untuk menampilkan visualisasinya.
$ cilium hubble enable --ui
Jika semua sudah berjalan dengan baik, Anda bisa mencoba proses instalasi contoh demo service Star Wars-Inspired.
$ kubectl create -f https://raw.githubusercontent.com/cilium/cilium/1.13.4/examples/minikube/http-sw-app.yaml
Terdapat 3 microservices:
- deathstar menyediakan HTTP webservice yang berjalan di port 80 yang diekspos sebagai Kubernetes Service untuk me-load-balance request.
- tiefighter adalah service yang merepresentasikan landing-request client
- xwing adalah service yang merepresentasikan landing-request client
Dari perspektif service deathstar, hanya service dengan label org=emipre yang diizinkan untuk terkoneksi dan mendapatkan respon “Ship landed” kita menerima request.
$ kubectl exec xwing -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing
Ship landed
$ kubectl exec tiefighter -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing
Ship landed
Untuk mendapatkan visualisasi trafik yang disimulasikan silahkan jalankan perintah berikut
$ cilium hubble ui

Untuk mendapatkan variasi visualisasi, Anda bisa menjalankan perintah yang menjalankan proses pengujian konektivitas Cilium.
$ while true; do cilium connectivity test; done

Hubble UI menawarkan visualisasi yang memudahkan pengguna untuk melihat event yang terjadi pada service yang berjalan pada cluster Kubernetes. Sampai tahap ini, Anda sudah berhasil mevisualisasikan trafik service yang berjalan pada cluster Kubernetes secara cepat.