1. NetworkManager 兼容性问题

背景:当物理机使用 NetworkManager 服务管理网卡设备时,重启 NetworkManager 服务导致 vxlan.calico 的 IP 地址丢失,跨节点 Pod 无法访问。

定位方式:执行 systemctl restart NetworkManager vxlan.calico 上 Node 节点的网关 IP 会丢失并且设备状态变为 Down (或者Pod跨节点范围时出现一些奇怪的现象 >_<!)。

解决方式:编辑 /etc/NetworkManager/conf.d/calico.conf 文件,加入以下内容,使 NetworkManager 不再接管 Calico 相关的网络设备。

1
2
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:wireguard.cali

参考文档

2. Firewalld 兼容性问题

背景:当物理机上部署 Calico 并开启 Firewalld 时,Pod 访问网络异常。

解决方式:由于 Firewalld 基于黑名单机制,因此开启时所有转发报文会被丢弃,导致 pod-pod 流量不可访问。

可以添加以下配置暂时进行规避:

1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<direct>
  <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-j ACCEPT</rule>
</direct>

修改之后执行firewalld-cmd --reload

PS:由于 Calico 的 Network Policy 原有实现基于 Iptables,导致 Firewalld 开启时两者相互影响。因此官方建议关闭 Firewalld,使用 HostEndpoint/GlobalNetworkPolicy 替代。

image-20220217145031721

参考文档

3. 探针配置问题

背景:使用官方提供的 calico-vxlan.yaml 的 manifest 部署时,calico/node 容器探针无法就绪。

健康检查报如下告警:

1
2
3
2021-11-18 10:06:28.555 [WARNING][87] felix/health.go 188: Reporter is not ready. name="aws-source-destination-check"
2021-11-18 10:06:28.566 [WARNING][87] felix/health.go 188: Reporter is not ready. name="aws-source-destination-check"
2021-11-18 10:06:28.566 [WARNING][87] felix/health.go 154: Health: not ready

解决方式:修改 calico-vxlan.yaml 配置, 注释掉以下环境变量:

1
2
- name: FELIX_AWSSRCDSTCHECK
  value: Disable

参考文档