1. 预期行为
跨节点 pod 流量应该可以工作,节点到 pod 流量应该可以跨节点工作。
2. 当前行为
当使用 systemd 运行 flannel 时,在 flannel 编程 flannel.1 接口的 mac 地址和 systemd 编程虚拟接口上的 mac 地址之间似乎存在竞争条件。由于不正确的目标 vtep mac,这会导致在目标节点的第 2 层丢弃所有跨节点流量。
使用 systemd 242默认策略设置为MACAddressPolicy=persistent
/usr/lib/systemd/network/99-default.link
[Link]
NamePolicy=keep kernel database onboard slot path
MACAddressPolicy=persistent
当 flannel 启动接口时,它会编程 mac 地址,然后 systemd 会再次对其进行重新编程。
在下面的跟踪中,您将看到
clear@clr-02 ~ $ ip addr show flannel.1
4: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
link/ether d6:02:e3:df:ea:7a brd ff:ff:ff:ff:ff:ff
inet 10.244.1.0/32 scope global flannel.1
valid_lft forever preferred_lft forever
但是远程节点上的 arp 表设置了不同的 mac 地址d6:02:e3:df:ea:7a
vs5e:89:db:49:c6:a4
clear@clr-01 ~ $ ip neigh
10.244.1.0 dev flannel.1 lladdr 5e:89:db:49:c6:a4 PERMANENT
查看 netlink 跟踪,您会看到 mac 地址被更改了两次,第一次由 flannel 更改,第二次由 systemd 根据其默认策略更改为不同的地址
clear@clr-02 ~ $ sudo ip monitor all
[NETCONF]inet flannel.1 forwarding on rp_filter off mc_forwarding off proxy_neigh off ignore_routes_with_linkdown off
[NETCONF]inet6 flannel.1 forwarding off proxy_neigh off ignore_routes_with_linkdown off
[LINK]4: flannel.1: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN group default
link/ether 5e:89:db:49:c6:a4 brd ff:ff:ff:ff:ff:ff
[LINK]4: flannel.1: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN group default
link/ether d6:02:e3:df:ea:7a brd ff:ff:ff:ff:ff:ff
[ADDR]4: flannel.1 inet 10.244.1.0/32 scope global flannel.1
valid_lft forever preferred_lft forever
3. 可能的解决方案
-
MACAddressPolicy=none
用户可以在每个系统的 flannel* 接口上设置一个特定的 MAC 地址策略来隐藏问题,但需要更改节点级别
-
Flannel 可以监视链接上的mac地址变化并重新编程
4. 解决方案
cat<<'EOF'>/etc/systemd/network/10-flannel.link
[Match]
OriginalName=flannel*
[Link]
MACAddressPolicy=none
EOF
文章末尾固定信息

我的微信
微信扫一扫
1F
学到了学到了