本文主要介绍calico作为kubernetes网络模型时,创建的pod内流量如何进出?
我们先看pod内的网络状况。
1,ip地址。在pod的有一个eth0接口,配置了地址。
2.再看路由表
可以看到有一条169.254.1.1的默认路由,以及一条明细路由。
我们先来回顾一下正常报文的收发原理:
针对二层报文,会先去查arp表,没有arp表项,就会arp request广播,进而来获取目的mac,获取后进行封装发送。
针对三层报文,就会在arp表查网关的mac,没有arp表项,就会发网关地址的arp request,获取到网关mac后,封装报文发送。
查询arp表,可以查看到
但是我们在host主机上没有看到有169.254.1.1的相关信息,那这个arp信息是如何获取的呢?
回答:
首先我们知道calico会创建一个veth-pair对,一端映射成了pod内的eth0, 另一端则在host主机上,caliXXXX。在caliXXXX设备上开启了proxy-arp功能,即pod内eth0发出的arp-request到达caliXX后,直接回复的caliXX的mac地址。因此pod内无论发出的二层报文还是三层报文,即无论是去往同网段的pod,还是跨网段的pod,报文的目的mac都是对应caliXX的mac地址。最终无论是二层报文还是三层报文都巧妙的转化成了三层报文。进而通过主机的路由进行相应处理。