type
Post
status
Published
date
Aug 9, 2022
slug
flannel
summary
flannel 需要重新启动所有pod跨节点才能通讯,问题是systemd和flannel竞争修改mac地址,解决方案:改变flannel的策略。
tags
K8s
Flannel
category
云原生
icon
fab fa-docker
password
Property
Aug 9, 2022 09:55 AM
 

1. 预期行为

跨节点 pod 流量应该可以工作,节点到 pod 流量应该可以跨节点工作。
 

2. 当前行为

当使用 systemd 242+ 运行 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
kind环境上云(K8S)

华不再扬
我们置身于互联网这个“水大鱼大”的市场,如果不清楚商业思维,无异于鱼儿身处水中而不知何为水。