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 ip172.16.249.28 与node1网络处于同一网段

  • 其中两个pod ip172.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.