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 地址块大小