Kubernetes-Calico-网络原理(3) - Pod & Node

Kubernetes 网络原理(2) - Container & Pod 中,我们已经看到了在一个 Node 内部的 PodContainer 的通讯,我们今天来看看跨NodePod通讯。

Pod <-> Node

我们首先先部署一个环境,在 work-2 上部署一个新的 echo-server

我们可以查看到在 worker-2 上面有了新的服务。

1
2
3
4
5
6
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
c2c-network-demo 2/2 Running 0 2d2h 192.168.1.10 k8s-worker-1 <none> <none>
c2c-network-demo-w2 2/2 Running 0 87s 192.168.2.6 k8s-worker-2 <none> <none>
echo-server 1/1 Running 0 11d 192.168.1.2 k8s-worker-1 <none> <none>
test-tools 1/1 Running 0 7h45m 192.168.1.12 k8s-worker-1 <none> <none>

我们可以看到 c2c-network-demo-w2 分配的 IP 是 192.168.2.6,我们在 k8s-worker-1Node 尝试访问下,毫无疑问的可以访问通。

1
2
3
root@test-tools:/# ping 192.168.2.6
PING 192.168.2.6 (192.168.2.6): 56 data bytes
64 bytes from 192.168.2.6: icmp_seq=0 ttl=62 time=0.467 ms

k8s-worker-1的路由表查一下:

1
2
3
4
5
6
7
8
9
10
11
12
➜  ~ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.12.0.1 0.0.0.0 UG 0 0 0 ens192
10.12.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ens192
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.0.0 10.12.22.1 255.255.255.0 UG 0 0 0 tunl0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 *
192.168.1.2 0.0.0.0 255.255.255.255 UH 0 0 0 cali0005aea454a
192.168.1.10 0.0.0.0 255.255.255.255 UH 0 0 0 calid9d486e54a8
192.168.1.12 0.0.0.0 255.255.255.255 UH 0 0 0 calied9d42cb137
192.168.2.0 10.12.22.3 255.255.255.0 UG 0 0 0 tunl0

我们可以发现命中的是

1
192.168.2.0     10.12.22.3      255.255.255.0   UG    0      0        0 tunl0

我们的网络包从 tunl0 网卡出去,目标是下一条的 Gateway:10.12.22.3 但是我们 tunl0 的另一头是一个单独的应用,此时我们同时抓包 ens192tunl0 从黑盒的模式看看,这个Calico的应用做了什么事情。

  • tunl0
  • ens192

从上面的抓包里面可以分辨出,从 tun0 出来的数据包,到了 eth0 这里被封装成了 IP in IP 的数据包,也就是在本来的 TCP/IP 的协议包之外又封装了一层物理网络的 IP

汇总

我们从最近的一系列分析中:

  • Pod -> Node-A
    通过 veth 设备将数据从容器的 eth0 发出
  • Node-A -> Node-B
    eth 通过路由表将数据发送到 tunl0, 然后 tunl0 将报文分装成 IPinIP
  • Node-B -> Pod
    eth 将 IPIP 协议包解包,使用路由表将数据从 veth 输入到 Pod 的 eth0

New Question

除了 IPIP 的模式以为,Calico 还提供了 BGP 模式,那它的工作模式又是如何呢?切看我们下章分解。