选择容器网络接口

虚拟私有云

查看以下有关选择容器网络接口 (CNI) 的信息。

在 Red Hat OpenShift on IBM Cloud 4.20 及更高版本中,Calico 是默认 CNI,但使用 RHCOS 工作节点的 VPC 群集可以选择开放虚拟网络 (OVN) 作为其群集 CNI。

Calico 默认值
Calico 是一个用于联网、网络安全和可观测性的单一平台,可用于云、内部部署或边缘的任何 Kubernetes 分布。 无论您是刚刚开始使用 Kubernetes 还是大规模运营,Calico 的开源、企业和云版本都能提供您所需的网络、安全性和可观测性。 更多信息,请参阅 Calico 文档
OVN- Kubernetes (OVN) 4.20 及更高版本 仅适用于 RHCOS 工作节点
OVN- Kubernetes 基于开放虚拟网络(OVN),提供基于覆盖的网络实现。 使用 OVN- Kubernetes 插件的群集还在每个节点上运行 Open vSwitch (OVS)。 OVN 在每个节点上配置 OVS,以执行所声明的网络配置。 更多信息,请参阅 Red Hat 文档

Calico 和 OVN 的比较

查看下表,比较 Calico 和 OVN 的特性和功能。

使用 OVN 时,必须确保 VPC 子网不与下表中指定的其他子网重叠。 如果存在子网重叠,pod 与 pod 之间的联网就会失败。

Layer2 此外,layer3 用户定义网络(UDN)不支持使用DHCP的工作负载,例如 OpenShift 虚拟化虚拟机。

Calico 和 OVN 对照表
组件 Calico OVN- Kubernetes
封装
  • IP 协议中的 IP(不是 UDP 或 TCP )
  • 仅封装运行在不同子网节点上的 pod 之间的 pod 流量。
  • 日内瓦: UDP 端口 6081 上的协议
  • 封装所有 pod 至 pod 的流量
默认群集网络/ Pod MTU 默认为 1480 字节(20 字节 IPinIP 标头)。 这是可以改变的。 默认为 1400 字节(100 字节 Geneve 报头)。 这是可以改变的。 Daemonset 需要创建 NetworkManager 文件,而不是直接运行 ip link set dev ens3 mtu。 您还必须重新启动新的工作节点。
波德 IPAM Calico 最初会为每个新节点分配一个 /26 子网(64 个 IP,其中至少一个通常用作 tunl0 IP,其余可用于 pod)。 如果使用了 /26 中的所有 pod IP,Calico 就会为节点分配第二个 /26 子网,并在需要时分配更多子网。 您可以使用 calicoctl ipam check 查看分配给每个节点的子网。 OVN 最初会为每个新群集节点分配 /24 pod 子网(256 个 IP)。 没有添加更多 pod 子网的选项。 它还会为每个新节点分配一个加入子网 IP,由 OVN 在内部使用
吊舱到吊舱路由
  • 使用 linux 路由。
  • 使用 BGP 分配路由。
  • tunl0 每个节点上都有用于封装的接口。
  • Open vSwitch (OVS) 在每个节点上运行,并路由 pod 到 pod 的流量。
  • OVN 配置 OVS 流量,以定义 pod 到 pod 的路由。
  • 每个节点上还创建了许多其他接口,如 ovs-system, genev_sys_6081, ovn-k8s-mp0, br-int, br-ex 并由 OVN 和 OVS 使用
Kubernetes 网络策略
  • 通过 calico-node 添加 iptables 规则来实现。
  • 记录被网络策略阻止的流量是可能的,但比较复杂。 这需要使用 "日志 "操作的额外 Calico 策略,并需要考虑和规划在何时何地放置这些日志操作。
  • 将日志发送到工作节点上的 syslog ,可能难以检索。
  • 日志不包括允许或阻止流量的策略。
  • OVS 使用逻辑端口上的 ACL(而非 iptables)来实现。
  • 使用注释可以更方便地记录网络策略删除和/或允许的流量。
  • 注释要记录策略活动的命名空间,以及要记录允许、拒绝还是两者。
  • 日志会发送到 ovnkube-node pod 中的文件 /var/log/ovn/acl-audit-log.log
  • 还存在将这些日志发送到其他日志目标的配置选项。
  • 日志包括允许流量的策略,但不包括拒绝流量的策略,因为策略只允许流量。
  • 必须至少有一个策略允许流量才能记录日志。
主机网络政策 Calico GlobalNetworkPolicies
附加子网
  • 加入子网100.64.0.0/16 ( OpenShift 默认设置)。
  • 伪装子网169.254.64.0/18。 这与 OpenShift 默认的 169.254.0.0/17 不同。 这种差异是为了避免与本地注册表 haproxy 使用的 169.254.2.0/24 IP 冲突。
  • 转接子网100.88.0.0/16 ( OpenShift 默认)。
APIserver 手表
  • calico-typha 注册资源监视器,并充当 calico-node pod 的代理,以通知更改。
  • calico-node 连接到 calico-typha pod 中的一个,并注册以获取资源变更通知。
  • 控制平面中的 ovnkube-cluster-manager 容器负责监控新节点。
  • 每个群集节点上的 ovnkube-controller 容器负责监控资源,并将其转化为 nbdb 中的 OVN 逻辑条目。
CNI calicocalico-ipam CNI 二进制文件由 calico-node pod 上的 install-cni initContainer 复制到每个节点。 ovnkube-node pod 的 ovnkube-controller 容器会执行用于添加和删除调用的 CNI 二进制文件。
已创建资源
  • calico-apiserver 命名空间
  • calico-apiserver (部署,2 个 pod)
  • calico-system 命名空间
  • calico-node (每个节点)
  • calico-typha (部署,2 - 10 个 pod)。
  • calico-kube-controllers (1 个节点)。
  • openshift-kube-proxy 命名空间。
  • openshift-kube-proxy (每个节点)。
  • tigera-operator 命名空间。
  • tigera-operator (部署,1 个 pod)。
  • calico CNI 二进制文件、 calico-ipam CNI 二进制文件和其他各种 CNI 二进制文件通过 install-cni initContainer 复制到每个节点上, calico-node
  • openshift-ovn-kubernetes 命名空间,ovnkube-node,每个节点上有 8 个容器,ovnkube-controller 监控资源,分配 pod IP,并将资源转化为 nbdb 中的 OVN 逻辑条目。 还可处理 CNI 添加和删除。
  • nbdb 存储逻辑条目。
  • northdnbdb 中的逻辑条目转换为 sbdb 中的逻辑流。
  • sbdb 存储逻辑流。
  • ovn-controller 转换 sbdb 中的逻辑流,并对 OVS 交换机进行编程。
  • ovn-acl-logging
  • kube-rbac-proxy-node 保护节点指标,只有经授权的用户才能读取这些指标。
  • kube-rbac-proxy-ovn-metrics 保护 OVN 指标,只有经授权的用户才能读取这些指标。
吊舱之间的连接
  • calico-node pod 最初通过代理 pod 中的本地 haproxy 连接到 kube apiserver,监听 TCP 172.20.0.1:2040 ,以获取 calico-typha pod 列表。
  • calico-node pod 通过 TCP 5473 端口连接到其中一个 calico-typha pod,以监听群集资源更新。
  • calico-node pod 运行 bird BGP 守护进程,该守护进程以完全网状结构连接 TCP 端口 179 上的所有其他 calico-node bird BGP 守护进程。
  • 同一子网内节点上的 pod 可直接进行 pod 之间的通信。
  • 不同子网节点上 pod 之间的 pod 对 pod 流量使用 IPinIP 封装(或 Satellite 集群的 VxLAN )。
  • 每个节点上的 ovnkube-controller 容器通过代理 pod 中的本地 haproxy 连接到 kube apiserver,并在 TCP 172.20.0.1:2040 上监听资源手表。
  • 所有 pod 之间的流量都使用 Geneve 进行封装,并通过 UDP 端口 6081 发送。
  • 有关详细信息,请参阅配置防火墙