eBPF Cilium實戰(2) - 底層網路可觀測性
- 2022 年 4 月 11 日
- 筆記
在之前的平台中,對於組件之間的網路流向不具備直接的可觀測性,用戶組件間通訊出現問題,只能通過傳統命令行工具進行手動排查,而 cilium 的 Hubble 服務可以提供 UI 介面向用戶展示實時的流量狀態,同時可以將這些指標暴露給 Prometheus 進行聚合整理,讓用戶可以更直觀的對底層網路狀態進行觀測監控。
開啟 Hubble UI 服務
cilium 的網路可觀測性由 Hubble 服務提供,在安裝 cilium 時,默認不會安裝 Hubble ,可以通過以下命令開啟 Hubble 服務
helm upgrade cilium cilium/cilium --version 1.11.2 \
--namespace kube-system \
--reuse-values \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true
部署完成後,可以通過以下命令確定狀態
$ kubectl get po -n kube-system |grep hubble
hubble-relay-65ff5f9bf6-247pt 1/1 Running 0 5d19h
hubble-ui-5f7cdc86c7-gq5hs 3/3 Running 0 5d19h
$ kubectl get svc -n kube-system | grep hubble
hubble-relay ClusterIP 10.43.73.95 <none> 80/TCP 5d19h
hubble-ui ClusterIP 10.43.20.190 <none> 80/TCP 5d19h
Hubble 部署完成後,集群外部還無法直接訪問,可以通過以下方式開啟對外訪問
-
臨時開啟
執行命令時可以通過
IP:12000訪問 UI 介面,退出命令後無法繼續訪問cilium hubble ui -
長期開啟
通過 Rainbond 平台添加第三方組件的方式,隨時開啟或關閉 UI 介面的訪問入口



Hubble UI 展示資訊
訪問主頁面

進入需要查看的名稱空間,頁面中部展示當前的流量拓撲,下部展示流量記錄

點擊流量記錄可以查看詳情

點擊組件後只展示相關流量

選擇流量記錄展示的資訊列

選擇展示的流量類型

選擇展示時是否忽略特殊類型流量

對接 Prometheus 和 Grafana
cilium 提供了部署 Prometheus 和 Grafana 的 yaml 文件,其中包含了 Grafana 的模板文件,但 cilium 默認安裝的情況下沒有開放監控指標,所以需要先開啟監控指標後再部署 Prometheus 和 Grafana
開啟監控指標
helm upgrade cilium cilium/cilium --version 1.11.2 \
--namespace kube-system \
--reuse-values \
--set prometheus.enabled=true \
--set operator.prometheus.enabled=true \
--set hubble.enabled=true \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,port-distribution,icmp,http}"
部署 Prometheus 和 Grafana
$ kubectl apply -f //raw.githubusercontent.com/cilium/cilium/1.11.2/examples/kubernetes/addons/prometheus/monitoring-example.yaml
namespace/cilium-monitoring created
serviceaccount/prometheus-k8s created
configmap/grafana-config created
configmap/grafana-cilium-dashboard created
configmap/grafana-cilium-operator-dashboard created
configmap/grafana-hubble-dashboard created
configmap/prometheus created
clusterrole.rbac.authorization.k8s.io/prometheus unchanged
clusterrolebinding.rbac.authorization.k8s.io/prometheus unchanged
service/grafana created
service/prometheus created
deployment.apps/grafana created
deployment.apps/prometheus created
確認運行狀態
$ kubectl get po -n cilium-monitoring
NAME READY STATUS RESTARTS AGE
grafana-d69c97b9b-5ztrj 1/1 Running 0 5d20h
prometheus-655fb888d7-456n4 1/1 Running 0 5d20h
$ kubectl get svc -n cilium-monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 10.43.230.15 <none> 3000/TCP 5d20h
prometheus ClusterIP 10.43.219.180 <none> 9090/TCP 5d20h
開啟對外訪問
-
臨時開啟
kubectl -n cilium-monitoring port-forward service/grafana --address 0.0.0.0 --address :: 3000:3000 kubectl -n cilium-monitoring port-forward service/prometheus --address 0.0.0.0 --address :: 9090:9090 -
長期開啟




Grafana 展示資訊
Cilium Metrics

Cilium Operator

Hubble









