k8s网络详解
kubernetes网络是由kube-proxy组件来管理的,kube-proxy负责整个k8s的内部网络访问。
环境简介
master-01 192.168.56.101
node-01 192.168.56.102
node-02 192.168.56.103
1、分析pod流量是怎么到达node上的,以及pod之间的互相通讯
安装k8s的时候需要指定不重叠的pod CIDR和service CIDR.
pod ip是来自pod CIDR的一部分
如:查看我们部署好的pod ip
kubectl get pod -o wide
看到有三个不同的pod ip,kubernetes每个pod都有一个属于自己的单独ip,而ip都是处于同一个node节点的虚拟网络段里面。
查看主节点的路由规则

-
172.16.185.192/26
对应的是node2(192.168.56.103
)节点 -
172.16.249.0/26
对应的是node1(192.168.56.102
)节点
三个pod的地址分别处于两个node的同一网段
-
node1网络情况
-
子网掩码为
255.255.255.192
-
网络号为
172.16.249.0/26
-
可用ip段为
172.16.249.1/26
-172.168.249.62/26
-
-
node2网络情况
-
子网掩码为
255.255.255.192
-
网络号为
172.168.185.192/26
-
可用ip段为
172.168.185.193/26
-172.168.185.254/26
-
-
其中一个
pod ip
为172.16.249.28
与node1网络处于同一网段 -
其中两个
pod ip
为172.16.185.221
172.16.185.222
(见图一)与node2网络处于同一网段
由此可见pod的ip都路由到了对应的node节点上
登录其中一台node节点,node2为例,找到了我们意料之中的虚拟网卡,ip为172.16.185.192

相当于我们指定的pod CIDR,它又会被划分为由node节点的虚拟ip作为CIDR,node节点充当为网桥作用。
结论: 由此我们就能推断出pod的流量是怎么打到node上去的
1、node节点会生成一个虚拟网卡,ip为指定的pod CIDR的部分
2、该虚拟网卡会作为一个网桥,所有调度在该节点上的pod,其ip都属于同一网段
3、并且linux内核会维护虚拟网卡到真实ip的路由规则,由此就可以从pod访问到对应的node上
如图:

pod互相能通讯也是因为流量到达node之后,每个node都会维护虚拟网卡ip的地址到真实ip的路由规则.
Q.E.D.