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

rainbond發表於2022-04-11



在之前的平臺中,對於元件之間的網路流向不具備直接的可觀測性,使用者元件間通訊出現問題,只能透過傳統命令列工具進行手動排查,而 cilium 的 Hubble 服務可以提供 UI 介面向使用者展示實時的流量狀態,同時可以將這些指標暴露給 Prometheus 進行聚合整理,讓使用者可以更直觀的對底層網路狀態進行觀測監控。


### 開啟 Hubble UI 服務


cilium 的網路可觀測性由 Hubble 服務提供,在安裝 cilium 時,預設不會安裝 Hubble ,可以透過以下命令開啟 Hubble 服務


```bash

helm upgrade cilium cilium/cilium --version 1.11.2 \

   --namespace kube-system \

   --reuse-values \

   --set hubble.relay.enabled=true \

   --set hubble.ui.enabled=true

```


部署完成後,可以透過以下命令確定狀態


```bash

$ 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 介面,退出命令後無法繼續訪問


  ```bash

  cilium hubble ui

  ```


- 長期開啟


  透過 Rainbond 平臺新增第三方元件的方式,隨時開啟或關閉 UI 介面的訪問入口


  ![]()


  ![]()


  ![]()


### Hubble UI  展示資訊


訪問主頁面


![]()


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


![]()


點選流量記錄可以檢視詳情


![]()


點選元件後只展示相關流量


![]()


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


![]()


選擇展示的流量型別


![]()


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


![]()


### 對接 Prometheus 和 Grafana


cilium 提供了部署 Prometheus 和 Grafana 的 yaml 檔案,其中包含了 Grafana 的模板檔案,但 cilium 預設安裝的情況下沒有開放監控指標,所以需要先開啟監控指標後再部署 Prometheus 和 Grafana


開啟監控指標


```bash

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


```bash

$ kubectl apply -f

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

```


確認執行狀態


```bash

$ 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

```


開啟對外訪問


- 臨時開啟


  ```bash

  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


![]()


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70008902/viewspace-2886504/,如需轉載,請註明出處,否則將追究法律責任。

相關文章