问题概述
由于canal是通过明细路由将数据转发到对应的pod容器网卡上,当访问的pod的IP不存在时,或者当pod访问外部服务在回包的过程中pod已经不存在没有对应的明细路由时,会导致该数据包进入到主机时,找不到对应的明细路由,最终通过默认网关转发到主机外部(交换机)。此时就会在交换机上可以看到源IP是pod IP、Mac地址是物理主机的Mac地址的数据包。
问题影响
正常情况下,该数据包通过默认路由走到网关后,网关会将该数据包丢弃。但是由于思科ACI网络的GARP学习机制,会导致交换机学习到错误的MAC-IP的地址,造成频繁的MAC-IP地址学习,影响交换机使用的性能,严重时会影响到整个ACI网络发送错误的数据包到错误的主机上。
解决思路
基于上述问题,我们可以通过添加黑洞路由来解决这个问题
先查看主机flannel.1网卡的IP
# ip a flannel.1
Command "flannel.1" is unknown, try "ip address help".
root@node01:~# ifconfig flannel.1
flannel.1: flags=4163