Calico 网络组件IPIP模式介绍

微信扫一扫,分享到朋友圈

Calico 网络组件IPIP模式介绍

Kubernetes为每个Pod都分配了唯一的IP地址,一个Pod里的多个容器共享 PodIp 地址。Kubernetes要求底层网络支持集群内任意两个Pod间的TCP/IP直接通信。

Kubernetes的跨主机任意Pod访问方式主要是遵循CNI容器网络规范,目前已经有多个开源组件支持CNI,包括Flannel、Open VSwitch、Calico等。

本文主要介绍在Calico的ipip模式下,K8s的Pod间访问原理。

一、Calico IPIP 模式介绍

Calico中的IP Pool可以使用两种模式:BGP或者IPIP。本文使用的是IPIP模式,是一种将各Node的路由之间做一个tunnel,再把网络连接起来的模式:

Calico 服务IPIP 网络模式图

从字面上说,就是将一个IP数据包套在另一个IP包里,使用到了Linux提供的隧道技术。可以理解为一个基于IP层的网桥,将两个本不通的网络通过点对点连接起来。

二、Calico IPIP 模式网络结构

下面通过创建一个 Calico IPIP模式的网络环境,来分析一下 IPIP 模式会在宿主机上做些什么操作。

2.1、实验环境介绍

搭建了一个三个节点的K8s 集群,设置为 Calico IPIP 网络模式。在Slave 节点分配部署一个Pod 容器,部署情况如图:

Kubernetes 服务中Pod分布情况图

2.2、Node1 节点的网络信息

#ip addr
...省略部分
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:02:03:5c brd ff:ff:ff:ff:ff:ff
inet 172.31.112.2/20 brd 172.31.127.255 scope global dynamic eth0
valid_lft 311927346sec preferred_lft 311927346sec
4: tunl0@NONE: <NOARP,UP,LOWER_UP> mtu 1440 qdisc noqueue state UNKNOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.0.0.0
inet 10.100.15.128/32 brd 10.100.15.128 scope global tunl0
valid_lft forever preferred_lft forever
26: cali3ef8aad4b4e@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
link/ether ee:ee:ee:ee:ee:ee brd ff:ff:ff:ff:ff:ff link-netnsid 1

Node1 服务器中除了eth0外,多了tunl0和cali3ef8aad4b4e(下面简称为cali.4e)。

  1. 由之前的说明,我们可以判断 tunl0 这个网卡是用于 Calico 在 IPIP 模式下建立隧道使用的。当跨宿主机的网络传输时,需要通过 tunl0 网卡对数据包进行一次封装才能正确的和其他宿主机通讯。
  2. cali.4e 网卡和 Pod 上的挂在的网卡相对应;是属于一个veth pair 的两个 EndPoint。在宿主机上我们可以看到此 EndPoint 的编号为 26;在Pod 对象中,我们也可以看到这个编号的EndPoint。

2.3、Pod 对象中的网络信息

#ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
4: eth0@if26: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP group default
link/ether ce:83:2b:89:af:9e brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.100.15.150/32 scope global eth0
valid_lft forever preferred_lft forever

我们可以看到 Pod 中变量为4的网卡,此网卡的名称有if26字段;和宿主机中的网卡相对映。

2.4、Node1 服务器中的路由信息

#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.31.127.253  0.0.0.0         UG    0      0        0 eth0
10.100.6.128    172.31.112.1    255.255.255.192 UG    0      0        0 tunl0
10.100.9.192    172.31.127.252  255.255.255.192 UG    0      0        0 tunl0
10.100.15.128   0.0.0.0         255.255.255.192 U     0      0        0 *
10.100.15.150   0.0.0.0         255.255.255.255 UH    0      0        0 cali3ef8aad4b4e
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.31.112.0    0.0.0.0         255.255.240.0   U     0      0        0 eth0

路由表分析

网卡 IP端 Ip范围 说明
tunl0 10.100.6.128/255.255.255.192 10.100.6.129-190 Master 上Pod的网段
tunl0 10.100.9.192/255.255.255.192 10.100.9.193-254 Node2 上Pod的网段
cali3ef8aad4b4e 10.100.15.150/32 10.100.15.150 Pod 对象

2.5、总结

由上,我们可以总结出跨宿主机间 Calico IPIP模式下的数据通信情况:

Calico IPIP模式下跨主机通信方式

微信扫一扫,分享到朋友圈

Calico 网络组件IPIP模式介绍

厂商悄然升级RTX3080:电容变了

上一篇

CNNIC报告:5G网络建设速度和规模超出预期

下一篇

你也可能喜欢

Calico 网络组件IPIP模式介绍

长按储存图像,分享给朋友