calico网络 pod 网关 default via 169.254.1.1 dev eth0

nginx pod 安装

apt-get update
apt install net-tools # ifconfig
apt install iputils-ping # ping
apt install dnsutils
apt-get install iproute iproute-doc
apt-get install iproute2
apt-get install ethtool

169.254.1.1是默认的网关,但是整个网络中没有一张网卡是这个地址。

如一个网络中设备D1 (192.168.0.2/24) 与设备D2 (192.168.1.2/24) 相互通信时,D1先发送了ARP广播,请求D2的mac地址,
但是由于两个设备处于不同网,也就是说D1的ARP请求会被R1拦截到,然后R1会封装自己的mac地址为,然后由R1代替D1去访问D2。 在Kubernetes Calico网络中,当一个数据包的目的地址不是本网络时,会先发起ARP广播,网关即169.
254.1.1收到会将自己的mac地址返回给发送端,
后续的请求由这个veth对进行完成,使用代理arp做了arp欺骗。这样做抑制了arp广播攻击,并且通过代理arp也可以进行跨网络的访问。

node服务器上查看对端网络

cali21a9df9f120对arp请求 169.254.1.1 做了代理(网卡开启了proxy_arp)
到达HOSTB后,根据内核连接跟踪功能POSTROUTING做SNAT,PREROUTING会做DNAT,源ip和目的ip 分别转换为192.168.0.2:和192.168.1.2

参考

https://www.cnblogs.com/LC161616/p/14387355.html
https://blog.csdn.net/m0_37504101/article/details/78815008

原文地址:https://www.cnblogs.com/fengjian2016/p/14784107.html