calico 网络模型pod如何收发报文

本文主要介绍calico作为kubernetes网络模型时,创建的pod内流量如何进出?

我们先看pod内的网络状况。

1,ip地址。在pod的有一个eth0接口,配置了地址。

calico 网络模型pod如何收发报文_第1张图片

2.再看路由表

可以看到有一条169.254.1.1的默认路由,以及一条明细路由。

我们先来回顾一下正常报文的收发原理:

针对二层报文,会先去查arp表,没有arp表项,就会arp request广播,进而来获取目的mac,获取后进行封装发送。

针对三层报文,就会在arp表查网关的mac,没有arp表项,就会发网关地址的arp request,获取到网关mac后,封装报文发送。

查询arp表,可以查看到

问题1:但是我们在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地址。最终无论是二层报文还是三层报文都巧妙的转化成了三层报文。进而通过主机的路由进行相应处理。

注意: pod地址都是32位掩码,意思就是是一个孤立的局域网,所以不存在同一个子网的二层互通场景,所以无论向谁通信都是跨网段的三层报文,都是要去获取gateway的mac地址出去的。

 

你可能感兴趣的:(kubernetes,calico)