提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


`

一、K8s 网络方案:Flannel 与 Calico 插件解析

Calico 网络插件(CNI)(master01 节点)

CNI(容器网络接口)是 K8s 实现 Pod 跨节点通信的核心,常用插件有 Flannel 和 Calico。本文选择 Calico(性能更优、支持网络策略)。

1.1Flannel 与 Calico 的特性对比表格:

特性 Flannel Calico
通信方式 Overlay 隧道(VXLAN/UDP) 直接路由(BGP 协议)
性能 中等(隧道封装有损耗) 优秀(无封装,原生路由)
网络策略支持 不支持 支持(细粒度访问控制)
适用场景 小型集群、简单场景 中大型集群、需网络策略场景
配置复杂度 中(需理解 BGP 基础)

二、 flannel

2.1概念

适合小型网络 简单 没有大的高并发

k8s轻量、易部署的网络插件,核心目标是解决跨 Node 节点 Pod 间的网络互通问题,让集群内所有 Pod 能通过全局唯一的 IP 直接通信。

**核心原理:**为集群中每个 Node 节点分配独立的子网段,通过 etcd 维护 Pod IP 与 Node IP 的映射关系,打通不同 Node 上 Pod 的通信路径;

Flannel 的功能:让集群中的不同节点主机创建的 Docker 容器都具有全集群唯一的虚拟 IP 地址。
Flannel 是 Overlay 网络的一种,也是将 TCP 源数据包封装在另一种网络包里面进行路由转发和通信,

2.2部署 flanne,K8S 中 Pod 网络通信:

三种情况

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
**Overlay Network(叠加网络):**在二层 / 三层基础网络上构建的虚拟网络,主机通过虚拟隧道连接;核心是对原始报文封装 UDP 头,依托主机网络路由转发,因修改报文存在性能损耗,主流实现为 VXLAN。

VXLAN:Overlay 网络的主流技术,将源数据包封装到 UDP 中,以基础网络的 IP/MAC 作为外层报文头在以太网传输,目标隧道端点解封装后转发至目标地址。
在这里插入图片描述

2.3 三种数据转发方式。

1、UDP
2、VXLAN
3、Host-gw
在这里插入图片描述

需要在每个节点上把发向容器的数据包进行封装后,再用隧道将封装后的数据包发送到运行着目标Pod
的node节点上。目标node节点再负责去掉封装,将去除封装的数据包发送到目标Pod上。数据通信性能
则大受影响。

数据包封装→隧道传输→目标节点解封装→转发至 Pod;

2.3.1UDP

#Flannel UDP 模式的工作原理:
数据从主机 A 上 Pod 的源容器中发出后,经由所在主机的 docker0/cni0 网络接口转发到 flannel0 接
口,flanneld 服务监听在 flannel0 虚拟网卡的另外一端。
Flannel 通过 Etcd 服务维护了一张节点间的路由表。源主机 A 的 flanneld 服务将原本的数据内容封装
到 UDP 报文中, 根据自己的路由表通过物理网卡投递给目的节点主机 B 的 flanneld 服务,数据到达以
后被解包,然后直接进入目的节点的 flannel0 接口, 之后被转发到目的主机的 docker0/cni0 网桥,最
后就像本机容器通信一样由 docker0/cni0 转发到目标容器。

核心路径:Pod→docker0/cni0→flannel0→flanneld(封装 UDP)→物理网卡→目标 flanneld(解包)→flannel0→docker0/cni0→目标 Pod;
关键依赖:Etcd 维护的节点路由表用于寻址,flanneld 负责报文的封装 / 解包与传输。

在这里插入图片描述

2.3.2 VXLAN

在这里插入图片描述
1、数据帧从主机 A 上 Pod 的源容器中发出后,经由所在主机的 docker0/cni0 网络接口转发到
flannel.1 接口
2、flannel.1 收到数据帧后添加 VXLAN 头部,封装在 UDP 报文中
3、主机 A 通过物理网卡发送封包到主机 B 的物理网卡中
4、主机 B 的物理网卡再通过 VXLAN 默认端口 4789 转发到 flannel.1 接口进行解封装
5、解封装以后,内核将数据帧发送到 cni0,最后由 cni0 发送到桥接到此接口的容器 B 中。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、Calico

calico方案 路由 适合大型网路架构 复杂的架构

Calico 是 Kubernetes 集群中高性能、基于三层网络的开源网络插件,核心用于解决 Pod 跨节点通信问题,同时支持强大的网络策略(Network Policy)管控。

它摒弃了 Overlay 网络的报文封装机制,通过在每个节点上部署的 CNI 插件为 Pod 创建 veth pair 设备,结合 Felix 组件维护的宿主机路由表、BIRD 组件基于 BGP 协议分发的路由信息,将集群所有节点作为 BGP Peer(边界路由器)组成全互联网络,让 Pod 数据包通过三层路由直接转发,实现无封装、低损耗的高效通信。
在这里插入图片描述
Calico不使用隧道或NAT来实现转发,而是把Host当作Internet中的路由器,使用BGP同步路由,并使用
iptables来做安全访问策略,完成跨Host转发。
采用直接路由的方式,这种方式性能损耗最低,不需要修改报文数据,但是如果网络比较复杂场景下,
路由表会很复杂,对运维同事提出了较高的要求

3.2Calico 主要由三个部分组成:

Calico CNI插件:主要负责与kubernetes对接,供kubelet调用使用。
Felix:负责维护宿主机上的路由规则、FIB转发信息库等。
BIRD:负责分发路由规则,类似路由器。
Confd:配置管理组件。

在这里插入图片描述

在这里插入图片描述

3.3Calico 工作原理:

Calico 是通过路由表来维护每个 pod 的通信。Calico 的 CNI 插件会为每个容器设置一个 veth pair 设
备, 然后把另一端接入到宿主机网络空间,由于没有网桥,CNI 插件还需要在宿主机上为每个容器的
veth pair 设备配置一条路由规则, 用于接收传入的 IP 包。
有了这样的 veth pair 设备以后,容器发出的 IP 包就会通过 veth pair 设备到达宿主机,然后宿主机根
据路由规则的下一跳地址, 发送给正确的网关,然后到达目标宿主机,再到达目标容器。
这些路由规则都是 Felix 维护配置的,而路由信息则是 Calico BIRD 组件基于 BGP 分发而来。
calico 实际上是将集群里所有的节点都当做边界路由器来处理,他们一起组成了一个全互联的网络,彼
此之间通过 BGP 交换路由, 这些节点我们叫做 BGP Peer。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐