K8S
1、项目总览
1.1、最终架构方案
1.2、IP分配规划
1.3、域名规划
1.4、CPU优化指南
1.5、云C部署指南
1.6、部署检查清单
1.7、快速参考手册
2.1、API-VIP高可用配置
2.2、Calico网络配置
2.3、存储方案配置
2.4、Ingress入口配置
2.5、安全加固配置
2.6、etcd优化配置
2.7、灾难恢复配置
2.8、公司网络配置
K8s部署
本文档使用 MrDoc 发布
-
+
首页
2.2、Calico网络配置
# Calico网络配置 ## 📖 说明 本文档提供Calico CNI插件的完整配置,适用于跨WAN混合云环境。 ## 🎯 方案对比 | 方案 | 性能 | 复杂度 | 安全性 | 推荐场景 | |------|-----|--------|--------|---------| | **方案A:VXLAN模式** | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | 推荐,简单可靠 | | **方案B:Calico WireGuard** | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | 推荐,自动加密 | | **方案C:混合模式** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | 性能优先 | ## 📄 完整配置 ```yaml # ======================================== # 修正后的Calico配置(跨WAN混合云) # ======================================== # 方案A:VXLAN模式(推荐,简单可靠) --- apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: pod-pool-cloud-a spec: cidr: 10.16.72.0/21 vxlanMode: Always # 改用VXLAN封装 ipipMode: Never natOutgoing: true # 必须开启,否则Pod无法访问公网 nodeSelector: topology.kubernetes.io/zone == "cloud-a" --- apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: pod-pool-cloud-b spec: cidr: 10.17.72.0/21 vxlanMode: Always ipipMode: Never natOutgoing: true nodeSelector: topology.kubernetes.io/zone == "cloud-b" --- apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: pod-pool-corp spec: cidr: 172.16.100.0/21 vxlanMode: Always ipipMode: Never natOutgoing: true nodeSelector: topology.kubernetes.io/zone == "corp" # VXLAN会增加约50字节开销,MTU需要调整 # WireGuard MTU 1410 - VXLAN 50 = 1360 # kubelet配置: # --mtu=1360 --- # 方案B:Calico内置WireGuard(推荐,更安全) # 替代系统级WireGuard,Calico自动管理Pod间加密 --- apiVersion: projectcalico.org/v3 kind: FelixConfiguration metadata: name: default spec: wireguardEnabled: true wireguardInterfaceName: wireguard.cali wireguardMTU: 1340 # 1500 - 60(IP) - 40(WG) - 60(预留) = 1340 # 使用此方案时,系统级WireGuard可以移除 # Calico会自动在节点间建立加密隧道 --- apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: pod-pool-unified spec: cidr: 10.244.0.0/16 # 统一Pod网段,Calico自动分配 vxlanMode: Never # Calico WG模式下用直接路由 ipipMode: Never natOutgoing: true blockSize: 26 # 每个节点64个IP --- # 方案C:混合模式(同区域直连,跨区域VXLAN) --- apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: pod-pool-cloud-a spec: cidr: 10.16.72.0/21 vxlanMode: CrossSubnet # 同子网直连,跨子网VXLAN ipipMode: Never natOutgoing: true nodeSelector: topology.kubernetes.io/zone == "cloud-a" # CrossSubnet模式要求在路由表配置: # 同区域节点:直接路由 # 跨区域节点:VXLAN封装 --- # ======================================== # 关键路由配置(如果用DirectRouting) # ======================================== # 必须在WireGuard上配置静态路由 # 云A节点添加(/etc/wireguard/wg0.conf PostUp) PostUp = ip route add 10.17.72.0/21 via 10.255.0.2 dev wg0 PostUp = ip route add 172.16.100.0/21 via 10.255.0.3 dev wg0 PostDown = ip route del 10.17.72.0/21 via 10.255.0.2 dev wg0 PostDown = ip route del 172.16.100.0/21 via 10.255.0.3 dev wg0 # 云B节点添加 PostUp = ip route add 10.16.72.0/21 via 10.255.0.1 dev wg0 PostUp = ip route add 172.16.100.0/21 via 10.255.0.3 dev wg0 PostDown = ip route del 10.16.72.0/21 via 10.255.0.1 dev wg0 PostDown = ip route del 172.16.100.0/21 via 10.255.0.3 dev wg0 # 公司节点添加 PostUp = ip route add 10.16.72.0/21 via 10.255.0.1 dev wg0 PostUp = ip route add 10.17.72.0/21 via 10.255.0.2 dev wg0 PostDown = ip route del 10.16.72.0/21 via 10.255.0.1 dev wg0 PostDown = ip route del 10.17.72.0/21 via 10.255.0.2 dev wg0 --- # ======================================== # MTU计算参考 # ======================================== # 公网链路MTU: 1500 # - IP头: 20 # - UDP头: 8 # - WireGuard头: 32 # = WireGuard可用: 1440 # - 安全余量: 30 # = WireGuard MTU: 1410 ✓(你的配置) # # Pod流量MTU: # WireGuard MTU: 1410 # - VXLAN封装: 50 # = Pod MTU: 1360 ✓(建议值) # # 或使用Calico WG: # 公网MTU: 1500 # - Calico WG开销: 160 # = Pod MTU: 1340 ``` ## 🔧 部署步骤 ### 方案A:VXLAN模式 ```bash # 1. 应用IPPool配置 calicoctl apply -f solutions/calico-fix.yaml # 2. 配置节点标签 kubectl label node cloud-a-master topology.kubernetes.io/zone=cloud-a kubectl label node cloud-b-master topology.kubernetes.io/zone=cloud-b kubectl label node corp-master topology.kubernetes.io/zone=corp # 3. 调整kubelet MTU echo '--network-plugin=cni --mtu=1360' >> /var/lib/kubelet/kubeadm-flags.env systemctl restart kubelet # 4. 验证VXLAN接口 ip -d link show vxlan.calico ``` ### 方案B:Calico WireGuard ```bash # 1. 启用Calico WireGuard calicoctl patch felixconfiguration default --patch \ '{"spec":{"wireguardEnabled":true}}' # 2. 验证WireGuard状态 kubectl exec -n kube-system <calico-node-pod> -- wg show # 3. 检查加密隧道 calicoctl get node <node-name> -o yaml | grep wireguard ``` ## 📊 MTU配置对照表 | 网络层 | MTU值 | 说明 | |--------|-------|------| | 公网链路 | 1500 | 标准以太网MTU | | WireGuard接口 | 1410 | 1500 - 90(IP+UDP+WG头) | | Pod网络(VXLAN) | 1360 | 1410 - 50(VXLAN封装) | | Pod网络(Calico WG) | 1340 | 1500 - 160(Calico WG开销) | ## ⚠️ 注意事项 - **MTU配置错误**:会导致大包被丢弃,表现为小文件传输正常,大文件卡死 - **节点标签**:IPPool的nodeSelector依赖正确的节点标签 - **VXLAN开销**:增加约50字节,记得调整Pod MTU - **Calico WireGuard**:比系统级WireGuard更简单,但开销稍大 ## 📁 原始文件 原始YAML配置文件位于:`solutions/calico-fix.yaml` ## 🔗 相关文档 - 网络规划:[1.2、IP分配规划.md](./1.2、IP分配规划.md) - 架构方案:[1.1、最终架构方案.md](./1.1、最终架构方案.md) - 部署指南:[1.5、云C部署指南.md](./1.5、云C部署指南.md) --- **更新时间:** 2025-01-22
arise
2025年11月22日 09:49
转发文档
收藏文档
‹‹
‹
10
/ 17
›
››
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码