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:7avs5e: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

文章末尾固定信息
weinxin
我的微信
微信扫一扫
评论  1  访客  1
    • 熊
      0

      学到了学到了

    匿名

    发表评论

    匿名网友 填写信息

    :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: