李成笔记网

专注域名、站长SEO知识分享与实战技巧

精通k8s(5)Pod网络探幽:先看内部_k8s pod spec

节点的地址段

在节点加入集群之后,默认会分配一块地址段:

这是集群根据规则预先分配好的,所以作者的node1节点中的Pod都是10.244.36.xx地址,node2节点都是10.244.169.xx地址。

以下的大段文章是作者的个人理解,有歧义的地方可以讨论。

创建Pod之后发生什么

创建Pod之后,节点机会创建一个veth设备对,一头连接Pod,另一头挂载到节点的网络命名空间内。

部署了三个副本,其中node2节点分配了两个,每个Pod里面只有一个容器,现在就在node2机器上观察。

(1)每创建一个Pod,就会生成一对veth设备。我们可以通俗的认为就是一对虚拟网卡,它的一头挂在Pod内,也就是容器内。另一头挂到节点机的默认网络命名空间内。我们这里有两个Pod,因此就创建了两对这样的设备。

(2)什么是veth设备呢?

在实际生活中,我们知道两个电脑可以用一根网线对连,因为网线两端就是两个网卡,linux就想,我能不能照着这个情景也模拟一下,于是就产生了veth设备。这个设备是软件模拟的,成对出现,从一头进,就马上从另一头出,这就是它的特性

Ping节点内的Pod怎么走

当我们ping 10.244.169.154时,系统会发现这个网段是自己内部的。因为这个网卡是属于自己的,就是说当前系统认为自己有三个网卡(见拓扑图),所以它就把这个数据直接转给veth设备一头的calidc35cdcb4a6,然后这个数据就流到容器内部的eth0设备。

查看本机路由进一步验证

在本机路由中,可以查看它路由的规则

#执行命令
ip route show

----------- 结果 ----------------
...
10.244.169.154 dev calif0a25e5265a scope link 
10.244.169.155 dev calidc35cdcb4a6 scope link 
...

规则表示:凡是发到这两个地址的数据,直接通过dev cali....发送

如何验证这两个设备就是一对呢?

第一步:进入Pod内部的容器查看,命令:

#进入容器,其中92d43f5f168b是创建的一个容器
docker exec -it 92d43f5f168b sh

#执行ip addr show命令 
ip addr show

----------- 结果 ----------------
eth0@if35: <BROADCAST,MULTICAST.......

可以看到eth0虚拟网卡的对端序号是35,退出容器。

第二步:根据序号查找veth设备

#在节点机内(的网络命名空间)执行
ip link show | grep -E '^35:'

----------- 结果 ----------------
35: calidc35cdcb4a6@if4: <BROADCAST,MULTICAST,UP.....

可以看到就是另一端的calidc35cdcb4a6,这说明容器内的eth0和calidc35cdcb4a6是一对设备。在另一个Pod操作方法相同。

总结

同学们看完本篇之后考试一下(做题是最快的成长方式):

  1. 节点上ping本地的Pod,为什么能ping通?
  2. 在容器中的网卡设备名字叫什么?怎样能找到它的配对设备?

评论聊一聊。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言