单节点Microk8s环境Multus主接口eno8无法被Pod访问问题排查求助
根因分析
- macvlan原生限制:macvlan bridge模式下,从母接口(你这里是eno8)创建的所有macvlan子接口(Pod的eth1),默认无法直接与母接口通信,这是内核层面的设计限制,因此Pod直接ping宿主机eno8的IP 10.128.1.244不通属于预期现象。
- 路由配置不匹配:你Pod的默认路由指向Calico的eth0接口,访问公网、同网段网关的流量默认不会走Multus分配的eth1接口,导致访问网关10.128.1.1不通。
- 二层网络限制:如果交换机端口开启了端口安全、MAC地址数量限制,会阻断macvlan子接口的通信,因为每个Pod的eth1都会生成独立的MAC地址,超出交换机端口的MAC数量限制后流量会被丢弃。
修复方案
1. 解决Pod与宿主机eno8通信问题
在宿主机上创建同模式的macvlan子接口,将eno8的IP迁移到该子接口上,配置对应路由:
# 创建macvlan子接口,模式和Multus配置一致为bridge ip link add link eno8 name macvlan0 type macvlan mode bridge # 迁移eno8的IP到macvlan0 ip addr del 10.128.1.244/24 dev eno8 ip addr add 10.128.1.244/24 dev macvlan0 ip link set macvlan0 up # 添加路由,确保宿主机访问Pod的macvlan网段走子接口 ip route add 10.128.1.147/28 dev macvlan0
如需持久化配置,可将上述规则写入netplan配置文件或开机自启脚本中。
2. 解决Pod访问网关、外部网络问题
方式一:调整Pod路由优先级
在Pod的metadata中添加注解,指定Multus网卡的默认路由:
annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "test-network", "default-route": ["10.128.1.1"] } ]'
方式二:开启ARP代理
如果需要外部网络直接访问Pod的macvlan IP,在宿主机开启eno8的ARP代理:
# 临时生效 sysctl -w net.ipv4.conf.eno8.proxy_arp=1 # 持久化生效,写入/etc/sysctl.conf后执行sysctl -p net.ipv4.conf.eno8.proxy_arp = 1
3. 排查二层网络限制
联系网络管理员确认eno8接入的交换机端口,是否开启了端口安全、MAC地址过滤、IP-MAC绑定等限制,放开对应规则即可。
内容的提问来源于stack exchange,提问作者van
相关产品推荐
相关产品推荐

