Calico 網路外掛探索與實作

本文深入探索 Calico 網路外掛在 Kubernetes 叢集中的設定與實作,分析常見故障排除方法及網路優化策略。

Calico 網路外掛探索與實作

概述

Calico 是 Kubernetes 生態系中廣泛使用的容器網路介面(CNI)外掛,提供高效能的網路連線和靈活的網路策略管理。本文基於生產環境實作,深入分析 Calico 的核心功能與設定要點。

核心功能架構

Calico 採用三層路由模型實現容器間通訊,主要元件包括:

  • Felix:執行在每個節點上的守護進程,負責路由設定和 ACL 規則
  • BIRD:路由分發元件,實現節點間路由資訊交換
  • confd:動態設定生成工具
  • CNI 外掛:對接 Kubernetes 網路模型

設定管理與實作

IP 位址池設定

網路架構原理

graph TD
    subgraph Kubernetes叢集
        node1[Node1] -->|BGP路由| node2[Node2]
        node1 -->|VXLAN隧道| node3[Node3]
        node2 -->|IPIP隧道| node3
    end
    node1 --> pod1[Pod]
    node2 --> pod2[Pod]
    node3 --> pod3[Pod]
[root@k8s-03:~/.kube 20:41 $]k get ippools.crd.projectcalico.org -o yaml
apiVersion: v1
items:
- apiVersion: crd.projectcalico.org/v1
  kind: IPPool
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"crd.projectcalico.org/v1","kind":"IPPool","metadata":{"annotations":{},"generation":1,"name":"default-ipv4-ippool"},"spec":{"allowedUses":["Workload","Tunnel"],"blockSize":26,"cidr":"192.168.0.0/16","ipipMode":"Never","natOutgoing":true,"nodeSelector":"all()","vxlanMode":"Always"}}
      projectcalico.org/metadata: '{"uid":"0891de51-013e-4a44-9cb6-0c142f480567","creationTimestamp":"2023-05-26T07:36:30Z"}'
    creationTimestamp: "2023-05-26T07:36:30Z"
    generation: 3
    name: default-ipv4-ippool
    resourceVersion: "37479"
    uid: de7868c1-ad93-4441-aa22-9198d07822f5
  spec:
    allowedUses:
    - Workload
    - Tunnel
    blockSize: 26
    cidr: 192.168.0.0/16
    ipipMode: Never
    natOutgoing: true
    nodeSelector: all()
    vxlanMode: Always
kind: List
metadata:
  resourceVersion: ""

[root@k8s-03:~/.kube 20:41 $]k edit ippools.crd.projectcalico.org default-ipv4-ippool

設定修改注意事項

  1. 修改 IPPool 後需重啟 calico-node 元件使設定生效
  2. CIDR 變更可能導致已有 Pod 網路中斷,需謹慎操作
  3. VXLAN/IPIP 模式選擇需考慮網路效能與相容性

詳細設定步驟

修改 IPPool 設定

  1. 取得目前設定:
    kubectl get ippools.crd.projectcalico.org -o yaml
    
  2. 編輯設定:
    kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool
    
  3. 主要參數說明:
    • cidr: Pod 網路 CIDR 範圍
    • vxlanMode: Always 啟用 VXLAN
    • ipipMode: Never 停用 IPIP
    • natOutgoing: true 啟用出站 NAT

常見故障排除

節點間通訊失敗

flowchart TD
    A[節點間網路不通] --> B{檢查模式}
    B -->|VXLAN| C[驗證 UDP 4789 連接埠]
    B -->|IPIP| D[驗證協定編號 4]
    C --> E[防火牆設定]
    D --> E
    E --> F[問題解決]

設定驗證指令

# 檢查 Calico 節點狀態
calicoctl node status

# 檢視路由表
ip route show

效能優化建議

  1. 大型叢集使用 BGP 取代 VXLAN
  2. 啟用 eBPF 資料平面提升效能
  3. 合理設定 IP 位址區塊大小

參考文件