Calico 網路外掛探索與實作
本文深入探索 Calico 網路外掛在 Kubernetes 叢集中的設定與實作,分析常見故障排除方法及網路優化策略。
Categories:
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
設定修改注意事項
- 修改 IPPool 後需重啟 calico-node 元件使設定生效
- CIDR 變更可能導致已有 Pod 網路中斷,需謹慎操作
- VXLAN/IPIP 模式選擇需考慮網路效能與相容性
詳細設定步驟
修改 IPPool 設定
- 取得目前設定:
kubectl get ippools.crd.projectcalico.org -o yaml - 編輯設定:
kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool - 主要參數說明:
cidr: Pod 網路 CIDR 範圍vxlanMode: Always 啟用 VXLANipipMode: Never 停用 IPIPnatOutgoing: 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
效能優化建議
- 大型叢集使用 BGP 取代 VXLAN
- 啟用 eBPF 資料平面提升效能
- 合理設定 IP 位址區塊大小