k8s(五)—容器间的网络通信

1、同一节点不同pod之间的通信原理

[root@server2 ~]# kubectl get pod -o wide    查看pod 的ip
NAME                            READY   STATUS    RESTARTS        AGE   IP            NODE      NOMINATED NODE   READINESS GATES
deployment-2-77cd76f9c5-2zrkd   1/1     Running   1 (7h40m ago)   25h   10.244.2.68   server4   <none>           <none>
deployment-2-77cd76f9c5-96cwp   1/1     Running   1 (7h40m ago)   25h   10.244.2.69   server4   <none>           <none>
deployment-2-77cd76f9c5-stppk   1/1     Running   1 (7h40m ago)   25h   10.244.1.77   server3   <none>           <none>
deployment-678fcbc488-2lf22     1/1     Running   1 (7h40m ago)   30h   10.244.1.80   server3   <none>           <none>
deployment-678fcbc488-5ms5s     1/1     Running   1 (7h40m ago)   30h   10.244.2.70   server4   <none>           <none>
deployment-678fcbc488-sgcd6     1/1     Running   1               30h   10.244.1.79   server3   <none>           <none>
[root@server2 ~]# kubectl exec -it deployment-2-77cd76f9c5-stppk  -- sh   进入其中一个pod
/ # route -n    查看容器的网关
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.244.1.1      0.0.0.0         UG    0      0        0 eth0
10.244.0.0      10.244.1.1      255.255.0.0     UG    0      0        0 eth0
10.244.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
/ # ping 10.244.1.80    可以看出同一节点server3上不同pod可以通信,原理是数据包通过默认网关连接网桥cni0通信,然后网桥连接另一个pod
PING 10.244.1.80 (10.244.1.80): 56 data bytes
64 bytes from 10.244.1.80: seq=0 ttl=64 time=0.212 ms
64 bytes from 10.244.1.80: seq=1 ttl=64 time=0.071 ms

2、不同节点不同pod之间的通信原理

flannel网络原理图:
在这里插入图片描述
在这里插入图片描述

[root@server2 ~]# kubectl exec -it deployment-2-77cd76f9c5-stppk  -- sh
/ # ping 10.244.2.70   此节点地址在server4上,
PING 10.244.2.70 (10.244.2.70): 56 data bytes
64 bytes from 10.244.2.70: seq=0 ttl=62 time=1.059 ms
64 bytes from 10.244.2.70: seq=1 ttl=62 time=0.445 ms
节点上的pod的ip地址是由是由subnet划分的,如下
[root@server3 ~]# cd /var/run/flannel
[root@server3 flannel]# cat subnet.env 
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.1.1/24   
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

封装信息如何得知?
知道原地址10.244.1.77和目标地址10.244.2.70,现在需要知道原mac地址和目标mac地址,原mac地址好找
[root@server3 flannel]# ip addr show flannel.1   可以查看原mac地址

在这里插入图片描述
但是server3是如何知道server4上的mac地址

[root@server3 flannel]# route -n   可以看出0网段和2网段的都要走隧道模式到flannel.1

在这里插入图片描述

[root@server3 flannel]# arp -an

在这里插入图片描述

后端mac地址的获取是由后台程序 flanneld运行在后端,他在分配子网段后,他还会获取整个集群节点的内部信息,他还会把每个设备的mac地址缓存到本地
[root@server3 flannel]# ps ax | grep flanneld     
 6163 ?        Ssl    0:38 /opt/bin/flanneld --ip-masq --kube-subnet-mgr
17409 pts/0    S+     0:00 grep --color=auto flannel

知道原地址和mac地址,目标地址和mac地址,然后通过vxlan进行1此封装,现在还需要知道对端flannel.1连接的eth0 ip地址和mac地址,需要查询转发数据库
[root@server3 flannel]# bridge fdb 查询,可以查出目标eth0的设备地址为172.25.50.4
在这里插入图片描述
然后再通过[root@server3 flannel]# arp -an 查寻172.25.50.4的mac地址
在这里插入图片描述
知道eth0这些地址后进行一个正常的udp封装,内部数据帧承载着正常的udp数据包传到对端eth0上,然后对端开始解包,匹配到内部数据帧是flannel.1d的然后由对端flannel.1 vtep进行解包,拿到原地址和目标地址
[root@server4 ~]# route -n 可以看到目标地址走的是2网段所以开始走cni0,这样就可以通信了

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小莫细说linux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值