目录

一、k8s的三种网络模式

1.Pod 内容器与容器之间的通信

2.同一个node节点中pod之间通信

3.不同的node节点的pod之间通信

二、k8s的三种接口

三、Flannel 网络插件

1.UDP 模式(8285端口)

2.VXLAN 模式

四、部署 flannel

1.在 master01 节点上操作

上传文件并解压

​复制到2个node节点

 部署 CNI 网络

2.在 node01 节点上操作

1.查看并导入镜像

2.创建目录并解压

3.检查端口

3.在 node02 节点上操作

1.查看并导入镜像

2.创建目录并解压

         3.检查端口 


一、k8s的三种网络模式

k8s集群中pod网络通信分类

1.Pod 内容器与容器之间的通信

在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命名空间,相当于它

们在同一台机器上一样,可以用 localhost 地址访问彼此的端口

2.同一个node节点中pod之间通信

每个 Pod 都有一个真实的全局 IP 地址,同一个 Node 内的不同 Pod 之间可以直接采用对方 Pod 的 IP 地址进行通信,Pod1 与 Pod2 都是通过 Veth 连接到同一个 docker0 网桥,网段相同,所以它们之间可以直接通信

3.不同的node节点的pod之间通信

Pod 地址与 docker0 在同一网段,docker0 网段与宿主机网卡是两个不同的网段,且不同 Node 之间的通信只能通过宿主机的物理网卡进行。
要想实现不同 Node 上 Pod 之间的通信,就必须想办法通过主机的物理网卡 IP 地址进行寻址和通信。因此要满足两个条件:①Pod 的 IP 不能冲突;将 Pod 的 IP 和所在的 Node 的 IP 关联起来,②通过这个关联让不同 Node 上 Pod 之间直接通过内网 IP 地址通信。

关于k8s的三种网络:

网络种类通信IP如何通信
节点网络nodeIP物理网卡的IP实现节点间的通信
pod网络podIPpod与pod之间可通过pod的IP相互通信
service网络clusterIP在k8s集群内部可通过service资源的clusterIP实现对pod集群的代理转发

关于k8s的三种类型网络IP

  • 节点网络:nodeIP---node节点的物理网卡ip,实现node节点之间的通信
  • Pod网络:PodIP---Pod与Pod之间通过PodIP进行通信
  • service网络:clusterIP---k8s集群内部,service资源的clusterIP实现对Pod集群的网络代理

Overlay Network

叠加网络,在二层或者三层基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链

路隧道连接起来。

通过Overlay技术(可以理解成隧道技术),在原始报文外再包一层四层协议(UDP协议),通过

主机网络进行路由转发。这种方式性能有一定损耗,主要体现在对原始报文的修改。目前Overlay

主要采用VXLAN。

VXLAN 即 Virtual Extensible LAN(虚拟可扩展局域网)

是一种网络虚拟化技术,它使用一种隧道协议,将二层以太网帧封装在四层UDP报文中,通过三层

网络传输,组成一个虚拟大二层网络,到达目的地后由隧道端点解封装并将数据发送给目标地址。

从而实现分布在不同的宿主机上的虚拟机或者容器就像在同一个局域网(LAN)里那样自由通信。

关于k8s的三种接口:

接口类型常见插件
CRI容器运行时接口docker、containerd、pod、cri-o
CSI容器存储接口nfs、ceph、oss、s3
CNI容器网络接口flannel、calico、cilium

二、k8s的三种接口

  • CRI:容器进行时接口,连接容器引擎--docker、containerd、cri-o、podman
  • CNI:容器网络接口,用于连接网络插件如:flannel、calico、cilium
  • CSI:容器存储接口,如nfs、ceph、gfs、oss、s3、minio

三、Flannel 网络插件

Flannel 的功能是让集群中的不同节点主机创建的 Docker 容器都具有全集群唯一的虚拟 IP 地址。

Flannel 是 Overlay 网络的一种,也是将 TCP 源数据包封装在另一种网络包里面进行路由转发和通

信,目前支持 UDP、VXLAN、Host-gw 3种数据转发方式

1.UDP 模式(8285端口)

  • 原始数据包从源主机的Pod容器发出到cni0网桥接口,再由cni0转发到flannel0虚拟接口
  • flanneld服务会监听flannel0接口收到的数据,并会将原始数据包封装到UDP报文里
  • flanneld服务会根据在etcd中维护的路由表查到目标Pod所在的nodeIP,并在UDP报文外封装nodeIP头部、MAC头部等,再通过物理网卡发送到目标node节点
  • UDP报文通过8285端口送达到目标node节点的flanneld服务进程解封装获取原始数据包,数据报文再根据本地路由规则通过flannel0接口发送到cni0网桥,再由cni0发送到目标Pod容器

etcd 之 Flanneld 提供说明

存储管理 Flannel 可分配的IP地址段资源

监控 etcd 中每个 Pod 的实际地址,并在内存中建立维护 Pod 节点路由表

由于在 UDP 模式下 flanneld 进行网络的封包和解包工作,而 VXLAN 模式下封包解包的工作由内

核完成,因此性能上 UDP 模式会比在内核态做转发的 VXLAN 模式差

2.VXLAN 模式

VXLAN 模式是 Flannel 默认和推荐的模式,flannel 会为每个节点分配一个 24 位子网,并在每个

节点上创建两张虚机网卡:cni0 和 flannel.1 。 cni0 是一个网桥设备,类似于 docker0 ,节点上所

有的 Pod 都通过 veth pair 的形式与 cni0 相连。 flannel.1 则是一个 VXLAN 类型的设备,充当

VTEP 设备(VXLAN Tunnel Endpoint)的角色,实现对 VXLAN 报文的封包解包。

在 VXLAN 模式下,flanneld 启动时先确保 VXLAN 设备已存在,如果不存在则创建,存在则跳

过。并将 VTEP 设备的信息上报到 etcd 中,当 flannel 网络有新节点加入集群时并向 etcd 注册,

各节点上的 flanneld 会从 etcd 得到通知。

Flannel VXLAN 模式跨主机的工作原理

  1. 原始数据帧从源主机的Pod容器发出到cni0网桥接口,再由cni0转发到flannel.1虚拟接口
  2. flannel.1接口收到数据帧后添加VXLAN头部,再由内核将原始数据帧封装到UDP报文里
  3. 根据在etcd中维护的路由表查到目标Pod所在的nodeIP,并在UDP报文外封装nodeIP头部、MAC头部等,再通过物理网卡发送到目标node节点
  4. UDP报文通过8472端口送达到目标node节点的flannel.1接口并由内核解封装获取原始数据帧,数据报文再根据本地路由规则发送到cni0网桥,再由cni0发送到目标Pod容器
     

四、部署 flannel

1.在 master01 节点上操作

上传文件并解压
unzip flannel-v0.21.5.zip
 复制到2个node节点
scp flannel*.tar 192.168.80.102:/opt/k8s
scp flannel*.tar 192.168.80.103:/opt/k8s
scp cni-plugins-linux-amd64-v1.3.0.tgz 192.168.80.102:/opt/k8s/
scp cni-plugins-linux-amd64-v1.3.0.tgz 192.168.80.103:/opt/k8s/

 部署 CNI 网络
kubectl apply -f kube-flannel.yml 
 
kubectl get pods -n kube-flannel
 
kubectl get pods -A
 
kubectl get pods -A -owide
 
kubectl get nodes
 
ip -d a show flannel.1   #在node上查看flannel.1的端口

2.在 node01 节点上操作

1.查看并导入镜像
docker load -i flannel.tar
docker load -i flannel-cni-plugin.tar

2.创建目录并解压
mkdir -p /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin

3.检查端口

3.在 node02 节点上操作

1.查看并导入镜像

 

2.创建目录并解压
mkdir -p /opt/cni/bin
tar zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin

3.检查端口 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐