问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Calico的工作原理以及网络模式

创作时间:
作者:
@小白创作中心

Calico的工作原理以及网络模式

引用
1
来源
1.
https://www.cnblogs.com/leojazz/p/18694718

Calico作为CNCF毕业项目,凭借其高性能、零信任安全和多云兼容性,已成为企业级Kubernetes网络的事实标准。本文将深入剖析Calico的核心原理、网络模式及生产环境最佳实践。

一、Calico架构与核心组件

1.1 核心组件协作

(注:Calico官方架构图)

组件
角色说明
Felix
节点代理,负责配置路由、ACL规则,同步网络策略到本地 iptables/eBPF
BIRD
BGP客户端,广播节点路由信息,实现跨节点通信
Typha
大规模集群中降低 API Server 负载的代理层(可选组件)
CNI插件
集成 Kubernetes CNI 标准,管理 Pod 网络命名空间和虚拟设备
Confd
动态生成 BIRD 配置文件(旧版本中使用)

1.2 数据流示例

# Pod A (Node1) -> Pod B (Node2) 的通信流程
1. Pod A 发送报文到目标 IP(Pod B)
2. Node1 根据路由表确定下一跳为 Node2 的物理接口 IP
3. 报文通过物理网络直接到达 Node2
4. Node2 根据路由表将报文转发到 Pod B 的 veth 设备

二、Calico工作原理详解

2.1 节点网络配置

  • 路由表管理 :每个节点维护 /etc/calico/calico-node 路由表,记录集群所有 Pod CIDR 信息
  • ARP 代理 :通过 proxy_arp 设置解决跨节点 ARP 请求问题
  • Veth Pair :每个 Pod 通过 veth 对连接到宿主机的网络命名空间

2.2 BGP路由分发

# 查看节点 BGP 邻居状态
calicoctl node status

# 示例输出:
+---+---+---+---+---+
|  NODE NAME    |     PEER IP       | STATE |  SINCE   |    INFO     |
+---+---+---+---+---+
| node-01       | 192.168.0.254     | up    | 09:30:00 | Established |
| node-02       | 192.168.0.253     | up    | 09:30:05 | Established |
+---+---+---+---+---+

2.3 网络策略实施

示例策略 :禁止 default 命名空间的 Pod 访问数据库服务

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: deny-db-access
  namespace: default
spec:
  selector: role == 'db'
  ingress:
- action: Deny
      source:
        namespaceSelector: name == 'default'
  egress:
- action: Allow

三、Calico网络模式对比

模式
协议
性能
网络要求
典型场景
BGP模式
L3 BGP
★★★★
节点间 L3 可达
本地数据中心
IP-in-IP
L3隧道
★★★☆
跨子网
跨可用区云环境
VXLAN模式
L2覆盖
★★☆☆
需要 UDP 4789 端口开放
传统网络环境
WireGuard模式
加密隧道
★★☆☆
需要内核支持
跨公网加密通信(3.15+版本)

四、生产环境最佳实践

4.1 安装优化

# 使用 Tigera Operator 安装(推荐)
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/custom-resources.yaml

4.2 IP地址管理

# 自定义 IP 池配置示例
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: custom-ippool
spec:
  cidr: 172.16.0.0/20
  blockSize: 26
  natOutgoing: true
  nodeSelector: !all()

4.3 性能调优

  1. 启用 eBPF 数据平面

    calicoctl patch kubecontrollersconfiguration default --patch='{"spec": {"controllers": {"node": {"hostEndpoint": {"autoCreate": "Enabled"}}}}}'
    
  2. 调整 BGP 参数

    apiVersion: projectcalico.org/v3
    kind: BGPConfiguration
    metadata:
      name: default
    spec:
      logSeverityScreen: Info
      nodeToNodeMeshEnabled: true
      asNumber: 64512
    

五、监控与故障排查

5.1 监控指标

  • 关键指标
  • felix_resync_state:数据同步状态
  • bgp_peer_up:BGP 邻居状态
  • iptables_chain_update_seconds:策略更新时间

5.2 常见问题排查

问题 :Pod 跨节点通信失败

排查步骤

  1. 检查节点间网络连通性
  2. 验证 BGP 会话状态:calicoctl node status
  3. 查看路由表:ip route show table all
  4. 检查网络策略:calicoctl get networkpolicy -A

六、Calico的适用场景

  1. 金融行业 :满足 PCI-DSS 要求的网络隔离
  2. AI/ML 训练 :需要 RDMA 高性能网络支持
  3. 混合云架构 :跨云厂商/数据中心的统一网络策略
  4. 边缘计算 :轻量级网络方案(Calico 3.15+ 支持边缘节点)

结语

Calico 通过创新的 BGP 路由分发和动态策略执行机制,在 Kubernetes 生态中建立了网络与安全的黄金标准。无论是本地数据中心还是多云环境,合理选择网络模式并结合 eBPF 等高级特性,都能构建出既高效又安全的云原生网络架构。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号