kubernetes:flannel vxlan的通信过程

kubernetes

      • 1.网络使用的是flannel
      • 2.flannel vxlan的通信过程

1.网络使用的是flannel

flannel使用的镜像为quay.io/coreos/flannel:v0.12.0-amd64
下载地址:https://github.com/coreos/flannel/releases

2.flannel vxlan的通信过程

kubernetes:flannel vxlan的通信过程_第1张图片

nodes 容器(pod) cni0 flannel.1
172.25.60.3(server3) 10.244.1.36 10.244.1.1/24 10.244.1.0/32
172.25.60.4(server4) 10.244.2.35 10.244.2.1/24 10.244.2.0/32

(1)在node上创建的容器通过网关将数据传送的cni0
10.244.1.36---->10.244.1.1
容器在物理机上的veth59aab0aa网卡上,因为使用cji接口标准,所以veth59aab0aa网卡会桥接在cni0网桥上。

[root@server3 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
cni0		8000.1a5f8fc31ca1	no		veth59aab0aa

(2)数据包走到cni0网桥后,通过查看路由表

[root@server3 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.60.250   0.0.0.0         UG    0      0        0 eth0
10.244.0.0      10.244.0.0      255.255.255.0   UG    0      0        0 flannel.1
10.244.1.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.244.2.0      10.244.2.0      255.255.255.0   UG    0      0        0 flannel.1

根据路由和掩码,选择对应的flannel.1(.1表示cni0的值),下一跳就是10.244.2.0

(3)进入到flannel.1,封装数据包(vtep进行封装和解封的工作),通过arp来获取对应的mac地址

[root@server3 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
10.244.2.0               ether   ba:30:dd:e7:1a:d0   CM                    flannel.1

查看目标flannel.1的mac地址:mac地址相同

[root@server4 ~]# ip addr show
6: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether ba:30:dd:e7:1a:d0 brd ff:ff:ff:ff:ff:ff
    inet 10.244.2.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::b830:ddff:fee7:1ad0/64 scope link 
       valid_lft forever preferred_lft forever

(4)在宿主机之间通过udp传输,进而将server3上的flannel.1上的数据帧发送出去,但是如何知道10.244.2.0 在server4上呢?
通过查看桥接转发的数据库

[root@server3 ~]# bridge fdb show
ba:30:dd:e7:1a:d0 dev flannel.1 dst 172.25.60.4 self permanent
a2:a5:59:51:c7:81 dev flannel.1 dst 172.25.60.4 self permanent
0a:a6:f9:a3:06:4a dev flannel.1 dst 172.25.60.2 self permanent
06:59:bf:4a:4d:f4 dev flannel.1 dst 172.25.60.2 self permanent

所以可以知道ba:30:dd:e7:1a:d0(mac地址)在172.25.60.4宿主机上

(5)查找172.25.60.4对应的mac地址

[root@server3 ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.25.60.4              ether   52:54:00:4d:cd:c9   C                     eth0

查看server4上的eth0的mac地址:与上面相同

[root@server4 ~]# ip addr show
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:4d:cd:c9 brd ff:ff:ff:ff:ff:ff
    inet 172.25.60.4/24 brd 172.25.60.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe4d:cdc9/64 scope link 
       valid_lft forever preferred_lft forever

你可能感兴趣的:(kubernetes)