Kubernetes——CNI网络组件

目录

一、Kubernetes三种接口

二、Kubernetes三种网络

三、VLAN与VXLAN

1.VLAN

2.VXLAN 

3.区别

3.1作用不同

3.2vxlan支持更多的二层网络

3.3已有的网络路径利用效率更高

3.4防止物理交换机Mac表耗尽

3.5相对VLAN技术,VXLAN技术具有以下优势

四、CNI网络插件——Flannel

 1.Overlay Network

2.UDP

3.VXLAN

4.Host-gw

5.其他插件

五、总结——CNI网络插件

1.Flannel

2.Calico

2.1Calico的IPIP模式工作原理

2.2Calico的BGP模式工作原理 


一、Kubernetes三种接口

  • CRI:容器运行时接口(Docker、Containerd、Podman、Cri-o)
  • CNI:容器网络接口(Flannel、Calico、Cilium)
  • CSI:容器存储接口(NFS、Ceph、GFS、OSS、S3、Minio)

二、Kubernetes三种网络

  • 节点网络:物理服务器网卡,网卡IP。每个主机网卡的组成,集群节点的网络通信。
  • Pod网络:PodIP 提供给Docker容器使用的IP地址,虚拟IP地址。一个Pod中只有一个IP地址,一个Pod中会共享一个IP地址出去,Pod之间通讯要加网络。Pod与Pod之间可以通过PodIP相互通信。
  • Service网络:ClusterIP Service-IP地址,虚拟IP地址,给Pod提供载体。在K8S集群内可通过Service资源的ClusterIP实现对Pod集群的网络代理转发。

三、VLAN与VXLAN

1.VLAN

做资源的隔离和安全,使用Vlan,资源不够用的时候,使用VLAN,防止广播风暴

2.VXLAN 

VXLAN:虚拟网络技术,将每个电脑作为一个网络标识,都做一个虚拟化的划分,可以划分几万个标识,将每台电脑绑定固定的标识。假设从一楼到三楼的数据通信,VXLAN会将数据包进行封装,将标识符和收件人和寄件人信息封装好,通过网络传给对面。相当于建立了虚拟隧道,不需要借助设备进行。

3.区别

3.1作用不同

  • VLAN主要用作于在交换机上逻辑划分广播域,还可以配合STP生成树协议阻塞路径接口,避免产生环路和广播风暴。
  • VXLAN可以将数据帧封装成UDP报文,再通过网络层传输给其它网络,从而实现虚拟大二层网络的通信

3.2vxlan支持更多的二层网络

  • vlan使用12位bit表示vlanID,因此最多支持2^12=4094个vlan
  • vxlan使用的ID使用24位bit,最多可以支持2^24个个vlan

3.3已有的网络路径利用效率更高

  • vlan使用spanning tree protocol避免环路,会将一半的网络路径阻塞
  • vxlan的数据包封装成UDP通过网络层传输,可以使用所有的网络路径

3.4防止物理交换机Mac表耗尽

  • vlan需要在交换机的Mac表中记录Mac物理地址
  • vxlan采用隧道机制,Mac物理地址不需记录在交换机

3.5相对VLAN技术,VXLAN技术具有以下优势

  • 24位长度的VNI字段值可以支持更多数量的虚拟网络,解决了VLAN数目上限为4094的局限性的问题。
  • VXLAN技术通过隧道技术在物理的三层网络中虚拟二层网络,处于VXLAN网络的终端无法察觉到VXLAN的通信过程,这样也就使得逻辑网络拓扑和物理网络拓扑实现了一定程度的解耦,网络拓扑的配置对于物理设备的配置的依赖程度有所降低,配置更灵活更方便。
  • VLAN技术仅仅解决了二层网络广播域分割的问题,而VXLAN技术还具有多租户支持的特性,通过VXLAN分割,各个租户可以独立组网、通信,地址分配方面和多个租户之间地址冲突的问题也得到了解决。

四、CNI网络插件——Flannel

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

 1.Overlay Network

  • 叠加网络,在二层或者三层基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路隧道连接起来。
  • 通过Overlay技术(可以理解成隧道技术),在原始报文外再包一层四层协议(UDP协议),通过主机网络进行路由转发。这种方式性能有一定损耗,主要体现在对原始报文的修改。目前Overlay主要采用VXLAN。

2.UDP

UDP用户态,就是应用程序封装,通过UDP协议,IP封装,解封装的过程,原理通过FLannel服务进行封装,将UDP封装进去

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

3.VXLAN

隧道模式,默认配置,利用内核VXLAN来封装主机(host)之间传送数据包

  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 中。

4.Host-gw

Host-gw:二层网络配置,不支持云环境,通过在主机的路由表中直接创建路由信息(subnet路由条目),到达目标,性能好,配置麻烦

5.其他插件

  • Antree
  • Cannal
  • Kube-OVN
  • Weave-Net

五、总结——CNI网络插件

1.Flannel

通常会采用VXLAN模式,用的是叠加网络(二层和三层网络)、IP隧道方式传输数据,由于要进行封装和解封装,对性能有一定的影响。
Flannel产品成熟,依赖性较少,易于安装,功能简单,配置方便,利于管理。但是不具备复杂的网络策略配置能力。同时不具备策略的配置能力。

3种模式(UDPVXLANHost-gw

  • VLAN隧道模式,默认配置,利用内核VXLAN来封装主机(host)之间传送数据包
  • UDP用户态,就是应用程序封装,通过UDP协议,IP封装,解封装的过程,原理通过FLannel服务进行封装,将UDP封装进去。由于 UDP 模式是在用户态做转发,会多一次报文隧道封装,因此性能上会比在内核态做转发的 VXLAN 模式差。
  • Host-gw:二层网络配置,不支持云环境,通过在主机的路由表中直接创建路由信息(subnet路由条目),到达目标,性能好,配置麻烦

注:其中只配置一种,根据你的需求来配(或者自己判断)

默认网段10.244.0.0/16

2.Calico

功能强大,没有封装和解封装的过程,对性能影响较小,具有网络策略的配置能力,但是路由表维护起来比较复杂。

使用IPIP模式可以实现跨子网传输,但是传输过程中需要额外的封包和解包过程,对性能有一定的影响。
使用BGP模式会把每个node节点看作成路由器,通过Felix、BIRD组件来维护和分发路由规则,可实现直接通过BGP路由协议实现路由转发,传输过程中不需要额外封包和解包过程,因此性能较好,但是只能在同一个网段里使用,无法跨子网传输。
Calico不使用CNI0网桥,而使通过路由规则把数据包直接发送到目标主机,所以性能较高;而且还具有更丰富的网络策略配置管理能力,功能更全面,但是维护起来较为复杂。

默认网段192.168.0.0/16

模式:网络BGP、IPIP(封装的模式)、混合模式(CrossSubnet)

BGP:跨网络网关的动态路由协议,实现路由的最佳状态到达对端  

2.1Calico的IPIP模式工作原理

  1. 原始数据包从源主机的Pod容器发出,通过 veth pair 设备送达到tunl0接口,再被内核的IPIP驱动封装到node节点网络的IP报文
  2. 根据Felix维护的路由规则通过物理网卡发送到目标node节点
  3. IP数据包到达目标node节点的tunl0接口后再通过内核的IPIP驱动解封装得到原始数据包,再根据本地路由规则通过 veth pair 设备送达到目标Pod容器

2.2Calico的BGP模式工作原理 

每个Pod容器都有一个 veth pair 设备,一端接入容器,另一个接入宿主机网络空间,并设置一条路由规则。这些路由规则都是 Felix 维护配置的,由 BIRD 组件基于 BGP 动态路由协议分发路由信息给其它节点。

  1. 原始数据包从源主机的Pod容器发出,通过 veth pair 设备送达到宿主机网络空间
  2. 根据Felix维护的路由规则通过物理网卡发送到目标node节点
  3. 目标node节点接收到数据包后,会根据本地路由规则通过 veth pair 设备送达到目标Pod容器

所以对于较小规模且网络要求简单的K8S集群,可以采用Flannel作为CNI网络插件。

对于K8S集群规模较大且要求更多的网络策略配置时,可以考虑采用性能更好更全面的Calico或Cilium 

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值