发布时间:2020-03-02 09:50:30来源:阅读:
我们这里假设flannel使用VXLAN协议。每台主机都安装有flannel。k8s定义的flannel网络为10.0.0.0/16,各主机的flannel从这个网络申请一个子网。pod1所在的主机的flannel子网为10.0.14.1/24,pod2所在主机的flannel子网为10.0.5.1/24。每台主机有cni0和flannel.1虚拟网卡。cni0为在同一主机pod共用的网桥,当kubelet创建容器时,将为此容器创建虚拟网卡vethxxx,并桥接到cni0网桥。flannel.1是一个tun虚拟网卡,接收不在同一主机的POD的数据,然后将收到的数据转发给flanneld进程。原理图:

pod1路由表:
default via 10.0.14.1 dev eth0 
10.0.0.0/16 via 10.0.14.1 dev eth0 
10.0.14.0/24 dev eth0  proto kernel  scope link  src 10.0.14.15 
host1路由表:
default via 192.168.93.254 dev eno16777984  proto static  metric 100 
10.0.0.0/16 dev flannel.1 
10.0.14.0/24 dev cni0  proto kernel  scope link  src 10.0.14.1 
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1 
192.168.93.0/24 dev eno16777984  proto kernel  scope link  src 192.168.93.212  metric 100 
pod1 IP地址:10.0.14.15
pod2 IP地址:10.0.5.150
下面是从pod1 ping pod2的数据包流向
1. pod1(10.0.14.15)向pod2(10.0.5.150)发送ping,查找pod1路由表,把数据包发送到cni0(10.0.14.1)
2. cni0查找host1路由,把数据包转发到flannel.1
3. flannel.1虚拟网卡再把数据包转发到它的驱动程序flannel
4. flannel程序使用VXLAN协议封装这个数据包,向api-server查询目的IP所在的主机IP,称为host2(不清楚什么时候查询)
5. flannel向查找到的host2 IP的UDP端口8472传输数据包
6. host2的flannel收到数据包后,解包,然后转发给flannel.1虚拟网卡
7. flannel.1虚拟网卡查找host2路由表,把数据包转发给cni0网桥,cni0网桥再把数据包转发给pod2
8. pod2响应给pod1的数据包与1-7步类似
下面是这次ping数据包的wireshark解析出的协议数据:
pod1 ping请求:

pod2响应:

pod1和pod2在同一台主机的话,由cni0网桥直接转发请求到pod2,不需要经过flannel。
创建一个service时,相应会创建一个指向这个service的域名,域名规则为{服务名}.{namespace}.svc.{集群名称}。之前service ip的转发由iptables和kube-proxy负责,目前基于性能考虑,全部为iptables维护和转发。iptables则由kubelet维护。service仅支持udp和tcp协议,所以像ping的icmp协议是用不了的,所以无法ping通service ip。
现在我们尝试看看在pod1向kube-dns的service ip 10.16.0.10:53发送udp请求是如何转发的。
我们先找出与此IP相关的iptables规则:
【PREROUTING链】
-m comment --comment "kubernetes service portals" -j KUBE-SERVICES
【KUBE-SERVICES链】
-d 10.16.0.10/32 -p udp -m comment --comment "kube-system/kube-dns:dns cluster IP" -m udp --dport 53 -j KUBE-SVC-TCOU7JCQXEZGVUNU
【KUBE-SVC-TCOU7JCQXEZGVUNU链】
-m comment --comment "kube-system/kube-dns:dns" -j KUBE-SEP-L5MHPWJPDKD7XIFG
【KUBE-SEP-L5MHPWJPDKD7XIFG链】
-p udp -m comment --comment "kube-system/kube-dns:dns" -m udp -j DNAT --to-destination 10.0.0.46:53
 
                            eyebeam(网络电话软件) v1.5 破解版
7.6M
 
                            ppstream(网络电视观看平台)v1.0 绿色版
1.29MB
 
                            wifi共享软件(网络共享工具) v7.8.8.9 免费版
6MB
 
                            三好网络电视下载
18.7MB
 
                            腾讯网游加速器(网络游戏加速软件) 3.0.8861.134 免费版
36.1M
 
                            长角牛网络监控机(局域网管理辅助软件) V3.48 破解版
2.8M
 
                            MusicTools下载
4.6M
 
                            cisco模拟器
166M
 
                            ipcamera下载
3.1M
 
                            kiftd下载
178.8M
 
                            netxray下载
10MB
 
                            protel99下载
81M
 
                            scanport下载
146K
 
                            sniffer pro下载
40.59 MB
 
                            tftpd32下载
0.52MB
 
                            微信域名防封检测工具
7.6M
 
                            美萍安全卫士下载
387.32KB
2020-02-17
外接音箱或耳机和内置喇叭同时发声
USB接口无法识别设备的解决方法
B305一体机在Windows XP系统下网卡驱动下载及安装过程
CentOS-5 yum安装mysql-5.5/5.1
开机提示invalid partition table的解决方案
Excel横坐标变成数字
如何通过联想电源管理软件调整电源模式
Ubuntu系统安装Nginx web服务器
天禧二的摄像头、手写板,以及电视卡是否有WINXP下的驱动程序?