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

Tags: