Kubernetes 之7大CNI 网络插件用法和对比

这篇具有很好参考价值的文章主要介绍了Kubernetes 之7大CNI 网络插件用法和对比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Kubernetes 它需要网络插件来提供集群内部和集群外部的网络通信。以下是一些常用的 k8s 网络插件:

  1. Flannel:Flannel 是最常用的 k8s 网络插件之一,它使用了虚拟网络技术来实现容器之间的通信,支持多种网络后端,如 VXLAN、UDP 和 Host-GW。

  2. Calico:Calico 是一种基于 BGP 的网络插件,它使用路由表来路由容器之间的流量,支持多种网络拓扑结构,并提供了安全性和网络策略功能。

  3. Canal:Canal 是一个组合了 Flannel 和 Calico 的网络插件,它使用 Flannel 来提供容器之间的通信,同时使用 Calico 来提供网络策略和安全性功能。

  4. Weave Net:Weave Net 是一种轻量级的网络插件,它使用虚拟网络技术来为容器提供 IP 地址,并支持多种网络后端,如 VXLAN、UDP 和 TCP/IP,同时还提供了网络策略和安全性功能。

  5. Cilium:Cilium 是一种基于 eBPF (Extended Berkeley Packet Filter) 技术的网络插件,它使用 Linux 内核的动态插件来提供网络功能,如路由、负载均衡、安全性和网络策略等。

  6. Contiv:Contiv 是一种基于 SDN 技术的网络插件,它提供了多种网络功能,如虚拟网络、网络隔离、负载均衡和安全策略等。

  7. Antrea:Antrea 是一种基于 OVS (Open vSwitch) 技术的网络插件,它提供了容器之间的通信、网络策略和安全性等功能,还支持多种网络拓扑结构。

CNI 网络插件

什么是 CNI?

CNI(容器网络接口)是一个云原生计算基金会项目,它包含了一些规范和库,用于编写在 Linux 容器中配置网络接口的一系列插件。CNI 只关注容器的网络连接,并在容器被删除时移除所分配的资源。

Kubernetes 使用 CNI 作为网络提供商和 Kubernetes Pod 网络之间的接口。

k8s网络插件选型,k8s从入门到精通,网络,运维,linux,kubernetes

CNI Logo

有关更多信息,请访问 CNI GitHub 项目。

CNI 社区人气[​]

下表总结了不同的 GitHub 指标,让你了解每个项目的受欢迎程度和活动。数据收集于 2022 年 1 月。

提供商 项目 Stars Forks Contributors
Canal GitHub - projectcalico/canal: Policy based networking for cloud native applications 679 100 21
Flannel GitHub - flannel-io/flannel: flannel is a network fabric for containers, designed for Kubernetes 7k 2.5k 185
Calico GitHub - projectcalico/calico: Cloud native networking and network security 3.1k 741 224
Weave GitHub - weaveworks/weave: Simple, resilient multi-host containers networking and more. 6.2k 635 84
Cilium GitHub - cilium/cilium: eBPF-based Networking, Security, and Observability 10.6k 1.3k 352

CNI 使用了哪些网络模型?

CNI 网络插件使用封装网络模型(例如 Virtual Extensible Lan,缩写是 VXLAN)或非封装网络模型(例如 Border Gateway Protocol,缩写是 BGP)来实现网络结构。

各个网络插件的 CNI 功能[​]

下表总结了 Rancher 中每个 CNI 网络插件支持的不同功能:

提供商 网络模型 路线分发 网络策略 网格 外部数据存储 加密 Ingress/Egress 策略
Canal 封装 (VXLAN) K8s API
Flannel 封装 (VXLAN) K8s API
Calico 封装(VXLAN,IPIP)或未封装 Etcd 和 K8s API
Weave 封装
Cilium 封装 (VXLAN) Etcd 和 K8s API
  • 网络模型:封装或未封装。如需更多信息,请参阅 CNI 中使用的网络模型。

  • 路由分发:一种外部网关协议,用于在互联网上交换路由和可达性信息。BGP 可以帮助进行跨集群 pod 之间的网络。此功能对于未封装的 CNI 网络插件是必须的,并且通常由 BGP 完成。如果你想构建跨网段拆分的集群,路由分发是一个很好的功能。

  • 网络策略:Kubernetes 提供了强制执行规则的功能,这些规则决定了哪些 service 可以使用网络策略进行相互通信。这是从 Kubernetes 1.7 起稳定的功能,可以与某些网络插件一起使用。

  • 网格:允许在不同的 Kubernetes 集群间进行 service 之间的网络通信。

  • 外部数据存储:具有此功能的 CNI 网络插件需要一个外部数据存储来存储数据。

  • 加密:允许加密和安全的网络控制和数据平面。

  • Ingress/Egress 策略:允许你管理 Kubernetes 和非 Kubernetes 通信的路由控制。

什么是封装网络?

此网络模型提供了一个逻辑二层(L2)网络,该网络封装在跨 Kubernetes 集群节点的现有三层(L3)网络拓扑上。使用此模型,你可以为容器提供一个隔离的 L2 网络,而无需分发路由。封装网络带来了少量的处理开销以及由于覆盖封装生成 IP header 造成的 IP 包大小增加。封装信息由 Kubernetes worker 之间的 UDP 端口分发,交换如何访问 MAC 地址的网络控制平面信息。此类网络模型中常用的封装是 VXLAN、Internet 协议安全性 (IPSec) 和 IP-in-IP。

简单来说,这种网络模型在 Kubernetes worker 之间生成了一种扩展网桥,其中连接了 pod。

如果你偏向使用扩展 L2 网桥,则可以选择此网络模型。此网络模型对 Kubernetes worker 的 L3 网络延迟很敏感。如果数据中心位于不同的地理位置,请确保它们之间的延迟较低,以避免最终的网络分段。

使用这种网络模型的 CNI 网络插件包括 Flannel、Canal、Weave 和 Cilium。默认情况下,Calico 不会使用此模型,但你可以对其进行配置。

k8s网络插件选型,k8s从入门到精通,网络,运维,linux,kubernetes

封装网络

什么是非封装网络?

该网络模型提供了一个 L3 网络,用于在容器之间路由数据包。此模型不会生成隔离的 L2 网络,也不会产生开销。这些好处的代价是,Kubernetes worker 必须管理所需的所有路由分发。该网络模型不使用 IP header 进行封装,而是使用 Kubernetes Worker 之间的网络协议来分发路由信息以实现 Pod 连接,例如 BGP。

简而言之,这种网络模型在 Kubernetes worker 之间生成了一种扩展网络路由器,提供了如何连接 Pod 的信息。

如果你偏向使用 L3 网络,则可以选择此网络模型。此模型在操作系统级别为 Kubernetes Worker 动态更新路由。对延迟较不敏感。

使用这种网络模型的 CNI 网络插件包括 Calico 和 Cilium。Cilium 可以使用此模型进行配置,即使这不是默认模式。

k8s网络插件选型,k8s从入门到精通,网络,运维,linux,kubernetes

非封装网络

k8s 支持哪些 CNI 插件?

RKE Kubernetes 集群

Rancher 开箱即用地为 RKE Kubernetes 集群提供了几个 CNI 网络插件,分别是 Canal、Flannel、Calico 和 Weave。

如果你使用 Rancher 创建新的 Kubernetes 集群,你可以选择你的 CNI 网络插件。

Canal

k8s网络插件选型,k8s从入门到精通,网络,运维,linux,kubernetes

Canal Logo

Canal 是一个 CNI 网络插件,它很好地结合了 Flannel 和 Calico 的优点。它让你轻松地将 Calico 和 Flannel 网络部署为统一的网络解决方案,将 Calico 的网络策略执行与 Calico(未封装)和 Flannel(封装)丰富的网络连接选项结合起来。

Canal 是 Rancher 默认的 CNI 网络插件,并采用了 Flannel 和 VXLAN 封装。

Kubernetes Worker 需要打开 UDP 端口 8472 (VXLAN) 和 TCP 端口 9099(健康检查)。如果使用 Wireguard,则需要打开 UDP 端口 51820 和 51821

k8s网络插件选型,k8s从入门到精通,网络,运维,linux,kubernetes

有关详细信息,请参阅 Canal GitHub 页面。

Flannel

k8s网络插件选型,k8s从入门到精通,网络,运维,linux,kubernetes

Flannel Logo

Flannel 是为 Kubernetes 配置 L3 网络结构的简单方法。Flannel 在每台主机上运行一个名为 flanneld 的二进制 Agent,该 Agent 负责从更大的预配置地址空间中为每台主机分配子网租约。Flannel 通过 Kubernetes API 或直接使用 etcd 来存储网络配置、分配的子网、以及其他辅助数据(例如主机的公共 IP)。数据包使用某种后端机制来转发,默认封装为 VXLAN。

默认情况下,封装的流量是不加密的。Flannel 提供了两种加密方案:

  • IPSec:使用 strongSwan 在 Kubernetes worker 之间建立加密的 IPSec 隧道。它是加密的实验性后端。

  • WireGuard:比 strongSwan 更快的替代方案。

Kubernetes Worker 需要打开 UDP 端口 8472 (VXLAN)。有关详细信息,

k8s网络插件选型,k8s从入门到精通,网络,运维,linux,kubernetes

Flannel Diagram

有关详细信息,请参阅 Flannel GitHub 页面。

Weave[​]

Weave 在云上的 Kubernetes 集群中启用网络和网络策略。此外,它还支持加密对等节点之间的流量。

Kubernetes worker 需要打开 TCP 端口 6783(控制端口)、UDP 端口 6783 和 UDP 端口 6784(数据端口)。有关详细信息,请参阅下游集群的端口要求。

有关详细信息,请参阅以下页面:

  • Weave Net 官网

RKE2 Kubernetes 集群

Rancher 开箱即用地为 RKE2 Kubernetes 集群提供了几个 CNI 网络插件,分别是 Canal(见上一节)、Calico 和 Cilium。

如果你使用 Rancher 创建新的 Kubernetes 集群,你可以选择你的 CNI 网络插件。

Calico

k8s网络插件选型,k8s从入门到精通,网络,运维,linux,kubernetes

Calico Logo

Calico 在云上的 Kubernetes 集群中启用网络和网络策略。默认情况下,Calico 使用纯净、未封装的 IP 网络结构和策略引擎为 Kubernetes 工作负载提供网络。工作负载能够使用 BGP 在云上和本地进行通信。

Calico 还提供了一种无状态的 IP-in-IP 或 VXLAN 封装模式。如果需要,你可以使用它。Calico 还支持策略隔离,让你使用高级 ingress 和 egress 策略保护和管理 Kubernetes 工作负载。

如果使用 BGP,Kubernetes Worker 需要打开 TCP 端口 179,如果使用 VXLAN 封装,则需要打开 UDP 端口 4789。另外,使用 Typha 时需要 TCP 端口 5473。有关详细信息,请参阅下游集群的端口要求。

重要提示:

在 Rancher 2.6.3 中,Calico 探测到在安装 RKE2 时 Windows 节点会失败。请注意,此问题已在 v2.6.4 中解决。

  • 要解决此问题,请先导航到 https://<rancherserverurl>/v3/settings/windows-rke2-install-script

  • 在那里,将当前设置 https://raw.githubusercontent.com/rancher/wins/v0.1.3/install.ps1 更改为新设置 https://raw.githubusercontent .com/rancher/rke2/master/windows/rke2-install.ps1

k8s网络插件选型,k8s从入门到精通,网络,运维,linux,kubernetes

Calico Diagram

有关详细信息,请参阅以下页面:

  • Project Calico 官方网站

  • Calico 项目 GitHub 页面

Cilium

k8s网络插件选型,k8s从入门到精通,网络,运维,linux,kubernetes

Cilium Logo

Cilium 在 Kubernetes 中启用网络和网络策略(L3、L4 和 L7)。默认情况下,Cilium 使用 eBPF 技术在节点内部路由数据包,并使用 VXLAN 将数据包发送到其他节点。你也可以配置非封装的技术。

Cilium 推荐大于 5.2 的内核版本,从而充分利用 eBPF 的能力。Kubernetes worker 需要打开 TCP 端口 8472(VXLAN)和 TCP 端口 4240(健康检查)。此外,还必须为健康检查启用 ICMP 8/0。有关详细信息,请查看 Cilium 系统要求。

Cilium 中跨节点的 Ingress 路由

默认情况下,Cilium 不允许 Pod 与其他节点上的 Pod 通信。要解决此问题,请启用 Ingress Controller 以使用 “CiliumNetworkPolicy” 进行跨节点路由请求。

选择 Cilium CNI 并为新集群启用项目网络隔离后,配置如下:文章来源地址https://www.toymoban.com/news/detail-735935.html

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: hn-nodes
  namespace: default
spec:
  endpointSelector: {}
  ingress:
    - fromEntities:
      - remote-node

到了这里,关于Kubernetes 之7大CNI 网络插件用法和对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8s 部署 CNI 网络组件+k8s 多master集群部署+负载均衡

    ------------------------------ 部署 CNI 网络组件 ------------------------------ ---------- 部署 flannel ---------- K8S 中 Pod 网络通信: ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命名空间,相当于它们在同一台机器上一样,可以用 lo

    2024年02月08日
    浏览(37)
  • K8s进阶之网络:pod内不同容器、同节点不同pod通信、CNI插件、不同节点pod通信、Flannel容器网络、Serivce连接外部网络、服务发现、Nginx反向代理与域名、Ingress代理

    Pod是Kubernetes中最小的可部署单元,它是一个或多个紧密关联的容器的组合,这些容器共享同一个网络命名空间和存储卷,因此Pod中的 所有容器都共享相同的网络命名空间和IP地址——PodIP ,所以在同一个Pod内的容器间通信可以 通过localhost直接通信 。 k8s创建Pod时永远都是首先

    2024年02月05日
    浏览(39)
  • 云原生之深入解析Kubernetes CNI插件的选型和应用场景

    在学习容器网络的时候,肯定都听说过 Docker 的 bridge 网络、Vethpair、VxLAN 等术语,从 Docker 到 Kubernetes 后,学习 Flannel、Calico 等主流网络插件,分别代表了 Overlay 和 Underlay 的两种网络传输模式,也是很经典的两款 CNI 网络插件。那么,还有哪些好用的 CNI 插件呢 ? 先来看看 C

    2024年02月15日
    浏览(40)
  • 【云原生】K8S二进制搭建二:部署CNI网络组件

    解决了什么问题? 容器镜像(带有应用程序规范的文件)必须以标准化,安全和隔离的方式启动 标准化,因为无论它们在何处运行,都需要标准的操作规则。 安全,因为你不希望任何不应该访问它的人,对它操作。 隔离,因为你不希望应用程序影响其他应用,或受其他应用

    2024年02月10日
    浏览(32)
  • K8s:部署 CNI 网络组件+k8s 多master集群部署+负载均衡及Dashboard k8s仪表盘图像化展示

    目录 1 部署 CNI 网络组件 1.1 部署 flannel 1.2 部署 Calico 1.3 部署 CoreDNS 2 负载均衡部署 3 部署 Dashboard K8S 中 Pod 网络通信: ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命令空间,相当于它们在同一台机器上一样,可以用

    2024年02月05日
    浏览(37)
  • 【 云原生 | K8S 】部署 CNI 网络组件+k8s 多master集群部署+负载均衡及Dashboard k8s仪表盘图像化展示管理

    目录 1 部署 CNI 网络组件 1.1 部署 flannel 1.2 部署 Calico 1.3 部署 CoreDNS 2 负载均衡部署 3 部署 Dashboard K8S 中 Pod 网络通信: ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命令空间,相当于它们在同一台机器上一样,可以用

    2024年01月22日
    浏览(38)
  • [Kubernetes[K8S]集群:master主节点初始化]:通过Calico和Coredns网络插件方式安装

    主节点:安装coredns - init初始化 主节点(此时还没有安装calico) 从节点:基于主节点生成join命令加入集群 主节点:安装calico:apply 生成pod,此时没有调整yaml网卡 coredns 和calico pod 运行成功 但是 calico-node-cl8f2 运行失败 查看 解决链接 因为之前写过一篇,calico一直异常,步骤

    2024年04月15日
    浏览(40)
  • Kubernetes 的用法和解析(K8S 日志方案) -- 8

    通过应用和系统日志可以了解Kubernetes集群内所发生的事情,对于调试问题和监视集群活动来说日志非常有用。对于大部分的应用来说,都会具有某种日志机制。因此,大多数容器引擎同样被设计成支持某种日志机制。 对于容器化应用程序来说,最简单和最易接受的日志记录

    2024年02月04日
    浏览(33)
  • 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一、认识 Kubernetes 网络 二、外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、worker 节点之间)能够做正常的 IP 寻址和通讯。 Kubernetes 第二层网络就是 Pod 网络,构建于节点网络之上

    2024年01月16日
    浏览(43)
  • k8s Calico网络和flannel网络对比

    Calico 和 Flannel 是 Kubernetes(K8s) 中常用的两种网络插件,它们都有各自的优点和适用场景。以下是 Calico 网络与 Flannel 网络的一些主要对比点: Calico 1. 技术基础 :Calico 依赖于 BGP(Border Gateway Protocol)路由协议来实现节点间通信,可以支持大规模的集群。 2. 性能 :由于使用

    2024年04月27日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包