行业知识
二进制部署k8s之网络部分
1 CNI 网络组件
1.1 K8S的三种接口
CRI 容器运行时接口 docker containerd podman cri-o
CNI 容器网络接口 flannel calico cilium
CSI 容器存储接口 nfs ceph gfs oss s3 minio
1.2 K8S的三种网络
节点网络 nodeIP 物理网卡的IP实现节点间的通信
Pod网络 podIP Pod与Pod之间可通过Pod的IP相互通信
Service网络 clusterIP 在K8S集群内可通过service资源的clusterIP实现对Pod集群的网络代理转发
K8S 中 Pod 网络通信:
●Pod 内容器与容器之间的通信
在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命令空间,相当于它们在同一台机器上一样,可以用 localhost 地址访问彼此的端口。
●同一个 Node 内 Pod 之间的通信
每个 Pod 都有一个真实的全局 IP 地址,同一个 Node 内的不同 Pod 之间可以直接采用对方 Pod 的 IP 地址进行通信,Pod1 与 Pod2 都是通过 Veth 连接到同一个 docker0 网桥,网段相同,所以它们之间可以直接通信。
●不同 Node 上 Pod 之间的通信
Pod 地址与 docker0 在同一网段,docker0 网段与宿主机网卡是两个不同的网段,且不同 Node 之间的通信只能通过宿主机的物理网卡进行。 要想实现不同 Node 上 Pod 之间的通信,就必须想办法通过主机的物理网卡 IP 地址进行寻址和通信。因此要满足两个条件:Pod 的 IP 不能冲突;将 Pod 的 IP 和所在的 Node 的 IP 关联起来,通过这个关联让不同 Node 上 Pod 之间直接通过内网 IP 地址通信。
1.3 Flannel
Flannel 的功能是让集群中的不同节点主机创建的 Docker 容器都具有全集群唯一的虚拟 IP 地址。 Flannel 是 Overlay 网络的一种,也是将 TCP 源数据包封装在另一种网络包里面进行路由转发和通信,目前支持 udp、vxlan、 host-GW 3种数据转发方式。
flannel的三种模式
| 模式类型 | 说明 |
|---|---|
| UDP | 出现最早的模式,但是性能最差,基于flanneld应用程序实现数据包的封装/解封装 |
| VXLAN | flannel的默认模式,也是推荐使用的模式,性能比UDP模式更好,基于内核实现数据帧的封装/解封装,而且配置简单使用方便 |
| HOST-GW | 性能最好的模式,但是配置负载,且不能跨网段 |
flannel的UDP模式工作原理
1)原始数据包从源主机的Pod容器发出到cni0网桥接口,再由cni0转发到flannel0虚拟接口 2)flanneld服务进程会监听flannel0接口接收到的数据,flanneld进程会将原始数据包封装到UDP报文里 3)flanneld进程会根据在etcd中维护的路由表查到目标Pod所在的nodeIP,并在UDP报文外封装nodeIP头部、MAC头部,再通过物理网卡发送到目标node节点 4)UDP报文通过8285端口送达到目标node节点的flanneld进程进行解封装,再根据本地路由规则通过flannel0接口发送到cni0网桥,再由cni0发送到目标Pod容器
ETCD 之 Flannel 提供说明
存储管理Flannel可分配的IP地址段资源 监控 ETCD 中每个 Pod 的实际地址,并在内存中建立维护 Pod 节点路由表
VXLAN
将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后在以太网上传输,到达目的地后由隧道端点解封装并将数据发送给目标地址。
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容器
VLAN 和 VXLAN 的区别
1)作用不同:VLAN主要用作于在交换机上逻辑划分广播域,还可以配合STP生成树协议阻塞路径接口,避免产生环路和广播风暴,VXLAN可以将数据帧封装成UDP报文,再通过网络层传输给其它网络,从而实现虚拟大二层网络的通信 2)VXLAN支持更多的二层网络:VXLAN最多可支持 2^24 个;VLAN最多支持 2^12 个(4096-2) 3)VXLAN可以防止物理交换机MAC表耗尽:VLAN需要在交换机的MAC表中记录MAC物理地址;VXLAN采用隧道机制,MAC物理地址不需记录在交换机
Overlay Network
叠加网络,在二层或者三层基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路隧道连接起来(类似于***)。
1.4 flannel部署
在 node01、node02 节点上操作
上传 cni-plugins-linux-amd64-v0.8.6.tgz 和 flannel.tar 到 /opt 目录中cd /opt/ mkdir /opt/cni/bin -pdocker load -i flannel-cni-plugin.tar #导入镜像docker load -i flannel.tar #导入镜像tar zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin #解压cni的压缩包到cni插件的工作目录
在 master01 节点上操作
cd /opt/k8skubectl apply -f kube-flannel.yml #启动flannel插件kubectl get pods -n kube-flannel #进入kube-flannel网络命名空间NAME READY STATUS RESTARTS AGEkube-flannel-ds-hjtc7 1/1 Running 0 7skubectl get nodes #查看node状态NAME STATUS ROLES AGE VERSION192.168.111.11 Ready 81m v1.20.11
重启服务器查看node01、node02是否分配网卡
systemctl restart networkip -d addr show flannel.18: flannel.1: mtu 1450 qdisc noqueue state UNKNOWN link/ether 22:37:61:bb:a1:64 brd ff:ff:ff:ff:ff:ff promiscuity 0 vxlan id 1 local 192.168.111.22 dev ens33 srcport 0 0 dstport 8472 nolearning ageing 300 inet 10.244.0.0/32 scope global flannel.1 valid_lft forever preferred_lft forevernode01和node02都分配了一个flannel.1的虚拟网卡,网段是10.244.0.0/16分配的目标端口是8472(对应的flannel的vxlan模式)
网络插件的目的是为了解决跨node节点的pod进行通信,那么进行验证
在master01节点创建pod资源
kubectl create deployment test-v1 --image=soscscs/myapp:v1 --replicas=2 #创建poddeployment.apps/test-v1 createdkubectl get pods -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATEStest-v1-56f56b4db5-82hf6 1/1 Running 0 22s 10.244.0.2 node02 test-v1-56f56b4db5-zrcgv 1/1 Running 0 22s 10.244.1.2 node01 /opt/kubernetes/cfg/kube-controller-manager
上一篇:轻松掌握下载本机的方法攻略!
下一篇:服务器宽带怎么控制的?