iT邦幫忙

2025 iThome 鐵人賽

DAY 18
1
DevOps

牧場主的 K8s 放牧日記系列 第 18

Day 18: Cilium 網路觀測與除錯工具 - 牧場的智慧監控系統

  • 分享至 

  • xImage
  •  

牧場主今日工作

昨天認識了 Cilium 這個高科技網路魔法師,今天要來學習如何使用它的「千里眼」和「順風耳」!就像現代牧場主需要監控系統來觀察牛隻的健康狀況和活動路徑,Cilium 提供了 Hubble 這個強大的觀測平台,讓我們能即時洞察網路流量的每個細節。準備好成為網路流量的偵探了嗎?

技術背景與概念

網路可觀測性的重要性

在複雜的 Kubernetes 環境中,網路問題往往最難調試。傳統的除錯方式就像拿著放大鏡在巨大的牧場裡找一根針,效率極低且容易遺漏關鍵資訊。

傳統網路除錯的痛點

  • 缺乏即時的網路流量可視性
  • 難以追蹤 Pod 之間的通信路徑
  • 無法快速定位網路策略問題
  • 效能瓶頸難以識別和分析

Cilium 觀測解決方案

  • Hubble:網路流量的即時監控和分析
  • Tetragon:運行時安全觀測和執行
  • Cilium CLI:強大的命令列除錯工具

Hubble:網路可觀測性平台

Hubble 核心功能

Hubble 就像是牧場的智慧監控中心,能夠提供網路世界的全景視圖:

核心能力

  1. 即時流量監控:觀察每一個網路封包的流向
  2. 服務依賴映射:自動繪製服務間的關係圖
  3. DNS 查詢追蹤:監控 DNS 解析過程
  4. 安全事件檢測:識別異常流量和攻擊行為

Hubble 架構組件

# Hubble 的三層架構
┌─────────────────┐
│   Hubble UI     │  # 網頁圖形介面
├─────────────────┤
│  Hubble Relay   │  # 資料聚合和分發
├─────────────────┤
│ Hubble Observer │  # 資料收集(每個節點)
└─────────────────┘

1. Hubble Observer

  • 部署方式:每個節點的 Cilium Agent 內建
  • 功能:收集該節點上的所有網路事件
  • 資料來源:eBPF 程式直接從核心收集

2. Hubble Relay

  • 部署方式:集群級別的服務
  • 功能:聚合所有節點的觀測資料
  • API:提供 gRPC API 供客戶端查詢

3. Hubble UI

  • 部署方式:Web 應用程式
  • 功能:圖形化展示網路拓撲和流量

實際操作:Hubble 觀測實戰

安裝 Cilium CLI (macOS)

首先在你的 MacBook 上安裝 Cilium CLI:

# 自動偵測架構並安裝最新版本
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "arm64" ]; then CLI_ARCH=arm64; fi

# 下載並驗證
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-darwin-${CLI_ARCH}.tar.gz{,.sha256sum}
shasum -a 256 -c cilium-darwin-${CLI_ARCH}.tar.gz.sha256sum

# 安裝到系統路徑
sudo tar xzvfC cilium-darwin-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-darwin-${CLI_ARCH}.tar.gz{,.sha256sum}

# 驗證安裝
cilium version --client

https://ithelp.ithome.com.tw/upload/images/20250831/201417942QPNroSPkJ.png

安裝 Hubble CLI (macOS)

同樣在 MacBook 上安裝 Hubble 客戶端:

# 自動偵測架構並安裝最新版本
HUBBLE_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/hubble/master/stable.txt)
HUBBLE_ARCH=amd64
if [ "$(uname -m)" = "arm64" ]; then HUBBLE_ARCH=arm64; fi

# 下載並驗證
curl -L --fail --remote-name-all https://github.com/cilium/hubble/releases/download/$HUBBLE_VERSION/hubble-darwin-${HUBBLE_ARCH}.tar.gz{,.sha256sum}
shasum -a 256 -c hubble-darwin-${HUBBLE_ARCH}.tar.gz.sha256sum

# 安裝到系統路徑
sudo tar xzvfC hubble-darwin-${HUBBLE_ARCH}.tar.gz /usr/local/bin
rm hubble-darwin-${HUBBLE_ARCH}.tar.gz{,.sha256sum}

# 驗證安裝
hubble version

連接到 Rancher 管理的 Cilium 集群

前提條件:Rancher 中已建立使用 Cilium CNI 的 Custom Cluster

# 1. 確認 kubectl 已連接到正確的集群
kubectl get nodes

# 2. 檢查 Cilium 是否已運行
kubectl get pods -n kube-system -l k8s-app=cilium

# 3. 驗證 Cilium CLI 能連接到集群
cilium status

輸出範例

    /¯¯\
 /¯¯\__/¯¯\    Cilium:             OK
 \__/¯¯\__/    Operator:           OK
 /¯¯\__/¯¯\    Envoy DaemonSet:    disabled (using embedded mode)
 \__/¯¯\__/    Hubble Relay:       disabled
    \__/       ClusterMesh:        disabled

DaemonSet              cilium                   Desired: 2, Ready: 2/2, Available: 2/2
Deployment             cilium-operator          Desired: 2, Ready: 2/2, Available: 2/2
Image versions         cilium             rancher/mirrored-cilium-cilium:v1.17.6: 2
                       cilium-operator    rancher/mirrored-cilium-operator-generic:v1.17.6: 2

從輸出可以看到:

  • Cilium 和 Operator 運行正常
  • 使用 Rancher 鏡像版本 v1.17.6
  • Hubble Relay 目前是 disabled 狀態

啟用 Hubble 觀測平台

由於 Rancher 預設安裝的 Cilium 沒有啟用 Hubble,我們需要手動啟用:

方法1: 直接透過 kubectl apply 建立 HelmChartConfig(推薦)

# 直接建立 HelmChartConfig 資源啟用 Hubble
kubectl apply -f - <<EOF
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: rke2-cilium
  namespace: kube-system
spec:
  valuesContent: |-
    hubble:
      enabled: true
      relay:
        enabled: true
      ui:
        enabled: true
EOF

# 檢查狀態
cilium status

方法2: 透過編輯配置檔案

# 編輯 RKE2 的 Cilium 配置檔案
sudo vi /var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yaml

# 添加相同的 HelmChartConfig 內容,然後重啟服務
sudo systemctl restart rke2-server

啟用成功後的輸出範例

    /¯¯\
 /¯¯\__/¯¯\    Cilium:             OK
 \__/¯¯\__/    Operator:           OK
 /¯¯\__/¯¯\    Envoy DaemonSet:    disabled (using embedded mode)
 \__/¯¯\__/    Hubble Relay:       OK
    \__/       ClusterMesh:        disabled

DaemonSet              cilium                   Desired: 2, Ready: 2/2, Available: 2/2
Deployment             cilium-operator          Desired: 2, Ready: 2/2, Available: 2/2
Deployment             hubble-relay             Desired: 1, Ready: 1/1, Available: 1/1
Deployment             hubble-ui                Desired: 1, Ready: 1/1, Available: 1/1
Containers:            cilium                   Running: 2
                       cilium-operator          Running: 2
                       hubble-relay             Running: 1
                       hubble-ui                Running: 1
Cluster Pods:          14/14 managed by Cilium

注意變化:

  • Hubble Relay 從 disabled 變成 OK
  • 新增了 hubble-relayhubble-ui 的 Deployment
  • 所有組件都在正常運行

基本觀測指令

現在我們可以開始使用 Hubble 觀測網路流量:

# 檢查 Hubble 狀態
hubble status

# 觀察即時網路流量
hubble observe

# 查看特定命名空間的流量
hubble observe --namespace default

# 觀察被拒絕的連線(網路策略效果)
hubble observe --verdict DROPPED

Cilium CLI:基本除錯工具

基本狀態檢查

# 檢查 Cilium 整體狀態
cilium status

# 檢查連通性(基本網路測試)
cilium connectivity test --test-namespace default

# 查看 Cilium 配置
cilium config view

基本觀測能力展示

有了 Hubble 和 Cilium CLI,我們就能:

  1. 即時觀察網路流量:看到 Pod 之間的通信
  2. 監控 DNS 查詢:了解服務發現過程
  3. 檢查網路策略效果:觀察被允許或拒絕的連線
  4. 診斷連通性問題:快速定位網路問題

這些基本功能為後續的網路策略設定和故障排除奠定了基礎。

今日總結與明日預告

今天我們掌握了 Cilium 的觀測和除錯工具!從 Hubble 的即時流量監控,到 Tetragon 的安全觀測,再到 Cilium CLI 的除錯指令,這些工具讓網路問題無所遁形。記住,好的觀測能力是運維成功的關鍵。

明天我們將進入 Cilium Network Policy 的實戰環節,學習如何設計和實作多租戶網路隔離策略,真正發揮 Cilium L3-L7 網路策略的強大威力!

💡 牧場主小提示:Hubble 就像牧場的智慧監控系統,讓你不用親自巡視就能掌握全域狀況!記住三個觀測利器:hubble observe 看流量、cilium status 查健康、cilium connectivity test 測連通。善用這些工具,網路問題就像陽光下的影子,無處躲藏!


上一篇
Day 17: Cilium CNI 基礎概念與架構 - 牧場的高科技網路魔法師
下一篇
Day 19: Cilium Network Policy 網路隔離實戰 - 牧場的智慧圍欄系統
系列文
牧場主的 K8s 放牧日記20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言