eBPF Cilium實戰(2) - 底層網路可觀測性

rainbond發表於2022-04-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 https://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

相關文章