第 5 章 多网络


5.1. 关于使用多个网络

除了默认的 OVN-Kubernetes Container Network Interface (CNI)插件外,MicroShift Multus CNI 还可用于串联其他 CNI 插件。安装和使用 MicroShift Multus 是可选的。

5.1.1. MicroShift 中的额外网络

在集群安装过程中,默认 pod 网络配置有默认值,除非您自定义配置。默认网络处理集群中的所有一般网络流量。使用 MicroShift Multus CNI 插件,您可以从其他网络向 pod 添加其他接口。这可让您灵活地配置提供交换或路由等网络功能的 pod。

5.1.1.1. 支持用于网络隔离的额外网络

MicroShift 4.17 支持以下额外网络:

  • bridge :允许同一主机上的 pod 相互通信,并与主机通信。
  • IPVLAN :允许主机上的 pod 与其他主机通信。

    • 这与基于 MACVLAN 的额外网络类似。
    • 每个 pod 共享与父物理网络接口相同的 MAC 地址,这与基于 MACVLAN 的额外网络不同。
  • MACVLAN:允许主机上的 pod 通过使用物理网络接口与其他主机和那些其他主机上的 pod 通信。附加到基于 MACVLAN 的额外网络的每个 pod 都会有一个唯一的 MAC 地址。
注意

不支持为额外网络设置网络策略。

5.1.1.2. 使用案例:用于网络隔离的额外网络

您可以在需要网络隔离的情况下使用额外网络,包括 control plane 和数据平面分离。例如,如果您希望 pod 访问主机上的网络,并且与部署到边缘的设备通信,您可以配置额外的接口。这些边缘设备可能位于隔离的 Operator 网络中,或者定期断开连接。

隔离网络流量对以下性能和安全性原因很有用:

性能
您可以在两个不同的平面上发送流量,以管理每个平面上的流量数量。
安全性
您可以将敏感的流量发送到专为安全考虑而管理的网络平面,也可隔离不能在租户或客户间共享的私密数据。
重要

当 MicroShift 服务启动时,Multus CNI 插件会被部署。因此,如果在 MicroShift 启动后添加了 microshift-multus RPM 软件包,则需要主机重启。重启可确保使用 Multus 注解重新创建所有容器。

5.1.1.3. 如何实现额外网络

集群中的所有 pod 仍然使用集群范围的默认网络,以维持整个集群中的连通性。每个 pod 都有一个 eth0 接口,附加到集群范围的 pod 网络。

  • 您可以使用 oc get pod <pod_name> -o=jsonpath='{ .metadata.annotations.k8s\.v1\.cni\.cncf\.io/network-status }' 命令来查看 pod 的接口。
  • 如果您添加了使用 MicroShift Multus CNI 的额外网络接口,它们名为 net1,net2, …​, netN
  • CNI 配置是在 MicroShift Multus DaemonSet 启动时创建的。此配置是自动生成的,包括默认委托的主 CNI。对于 MicroShift,默认 CNI 是 OVN-Kubernetes。

5.1.1.4. 如何将额外网络附加到 pod

要将额外网络接口附加到 pod,您必须创建并应用配置来定义接口的附加方式。

  • 您必须配置任何要使用的额外网络。由于网络的不同,不会提供默认配置。
  • 您必须应用 YAML 清单,以使用 NetworkAttachmentDefinition 自定义资源(CR)指定每个接口。每个 CR 中的配置定义如何创建该接口。
  • CRI-O 必须配置为使用 Multus。microshift-multus RPM 包含了默认配置。

    • 如果在现有的 MicroShift 实例上安装了 Multus CNI,则必须重启主机。
    • 如果 Multus CNI 与 MicroShift 一起安装,您可以添加 CR 和 pod,然后启动 MicroShift 服务。在这种情况下不需要重启主机。

5.1.1.5. 额外网络类型的配置

以下部分介绍了额外网络的具体配置字段。

5.1.2. 在正在运行的集群中安装 Multus CNI 插件

如果要将额外网络附加到用于高性能网络配置的 pod,您可以安装 MicroShift Multus RPM 软件包。安装后,需要主机重启才能使用 Multus 注解重新创建所有 pod。

重要

不支持卸载 Multus CNI 插件。

先决条件

  1. 有到主机的 root 访问权限。

流程

  1. 运行以下命令来安装 Multus RPM 软件包:

    $ sudo dnf install microshift-multus
    提示

    如果现在为额外网络创建自定义资源(CR),您可以使用一个重启完成安装并应用配置。

  2. 要将软件包清单应用到活跃集群,请运行以下命令重启主机:

    $ sudo systemctl restart

验证

  1. 重启后,运行以下命令来确保创建 Multus CNI 插件组件:

    $ oc get pod -A | grep multus

    输出示例

    openshift-multus      dhcp-daemon-ktzqf     1/1   Running   0     45h
    openshift-multus      multus-4frf4          1/1   Running   0     45h

后续步骤

  1. 如果您还没有这样做,请配置并应用您要使用的额外网络。
  2. 部署使用创建的 CR 的应用程序。

5.1.3. 配置桥接额外网络

以下对象描述了 Bridge CNI 插件的配置参数:

表 5.1. bridge CNI 插件 JSON 配置对象
字段类型描述

cniVersion

string

CNI 规格版本。需要 0.4.0 值。

type

string

用于配置的 CNI 插件的名称:bridge

ipam

object

IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。

bridge

string

可选:指定要使用的虚拟网桥名称。如果主机上不存在网桥接口,则进行创建。默认值为 cni0

ipMasq

布尔值

可选:设置为 true,为离开虚拟网络的流量启用 IP 伪装。所有流量的源 IP 地址都会改写为网桥 IP 地址。如果网桥没有 IP 地址,此设置无效。默认值为 false

isGateway

布尔值

可选:设置为 true,从而为网桥分配 IP 地址。默认值为 false

isDefaultGateway

布尔值

可选:设置为 true,将网桥配置为虚拟网络的默认网关。默认值为 false。如果 isDefaultGateway 设置为 true,则 isGateway 也会自动设置为 true

forceAddress

布尔值

可选:设置为 true,以允许将之前分配的 IP 地址分配给虚拟网桥。设置为 false 时,如果将来自于重叠子集的 IPv4 地址或者 IPv6 地址分配给虚拟网桥,则会发生错误。默认值为 false

hairpinMode

布尔值

可选:设置为 true,以允许虚拟网桥通过收到它的虚拟端口将其发回。这个模式也被称为反射中继。默认值为 false

promiscMode

布尔值

可选:设置为 true 以在网桥上启用混杂模式。默认值为 false

mtu

整数

可选:将最大传输单元 (MTU) 设置为指定的值。默认值由内核自动设置。

enabledad

布尔值

可选:为容器侧 veth 启用重复的地址检测。默认值为 false

macspoofchk

布尔值

可选:启用 mac spoof 检查,将来自容器的流量限制为接口的 mac 地址。默认值为 false

5.1.3.1. Bridge CNI 插件配置示例

以下示例配置了名为 bridge-conf 的额外网络,用于 MicroShift Multus CNI:

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: bridge-conf
spec:
  config: '{
      "cniVersion": "0.4.0",
      "type": "bridge",
      "bridge": "test-bridge",
      "mode": "bridge",
      "ipam": {
        "type": "host-local",
        "ranges": [
          [
            {
              "subnet": "10.10.0.0/16",
              "rangeStart": "10.10.1.20",
              "rangeEnd": "10.10.3.50",
              "gateway": "10.10.0.254"
            }
          ]
        ],
        "dataDir": "/var/lib/cni/test-bridge"
      }
    }'

5.1.4. 配置 ipvlan 额外网络

以下对象描述了 IPVLAN CNI 插件的配置参数:

表 5.2. IPVLAN CNI 插件 JSON 配置对象
字段类型描述

cniVersion

string

CNI 规格版本。需要 0.3.1 值。

name

string

您之前为 CNO 配置提供的 name 参数的值。

type

string

要配置的 CNI 插件的名称:ipvlan

ipam

object

IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。除非插件被串联,否则需要此项。

模式

string

可选:虚拟网络的操作模式。这个值必须是 l2l3l3s。默认值为 l2

master

string

可选:与网络附加关联的以太网接口。如果没有指定 master,则使用默认网络路由的接口。

mtu

整数

可选:将最大传输单元 (MTU) 设置为指定的值。默认值由内核自动设置。

linkInContainer

布尔值

可选:指定 master 接口是否在容器网络命名空间或主网络命名空间中。将值设为 true 以请求使用容器命名空间 master 接口。

重要
  • ipvlan 对象不允许虚拟接口与 master 接口通信。因此,容器无法使用 ipvlan 接口来访问主机。确保容器加入提供主机连接的网络,如支持 Precision Time Protocol (PTP) 的网络。
  • 单个 master 接口无法同时配置为使用 macvlanipvlan
  • 对于不能与接口无关的 IP 分配方案,可以使用处理此逻辑的较早插件来串联 ipvlan 插件。如果省略 master,则前面的结果必须包含一个接口名称,以便 ipvlan 插件进行 enslave。如果省略 ipam,则使用前面的结果来配置 ipvlan 接口。

5.1.4.1. IPVLAN CNI 插件配置示例

以下示例配置了名为 ipvlan -net 的额外网络:

{
  "cniVersion": "0.3.1",
  "name": "ipvlan-net",
  "type": "ipvlan",
  "master": "eth1",
  "linkInContainer": false,
  "mode": "l3",
  "ipam": {
    "type": "static",
    "addresses": [
       {
         "address": "192.168.10.10/24"
       }
    ]
  }
}

5.1.5. 配置 macvlan 额外网络

以下对象描述了 MACVLAN CNI 插件的配置参数:

表 5.3. MACVLAN CNI 插件 JSON 配置对象
字段类型描述

cniVersion

string

CNI 规格版本。需要 0.3.1 值。

name

string

您之前为 CNO 配置提供的 name 参数的值。

type

string

用于配置的 CNI 插件的名称:macvlan

ipam

object

IPAM CNI 插件的配置对象。该插件管理附加定义的 IP 地址分配。

模式

string

可选:配置虚拟网络上的流量可见性。必须是 bridgepassthruprivateVepa。如果没有提供值,则默认值为 bridge

master

string

可选:与新创建的 macvlan 接口关联的主机网络接口。如果没有指定值,则使用默认路由接口。

mtu

string

可选:将最大传输单元 (MTU) 到指定的值。默认值由内核自动设置。

linkInContainer

布尔值

可选:指定 master 接口是否在容器网络命名空间或主网络命名空间中。将值设为 true 以请求使用容器命名空间 master 接口。

注意

如果您为插件配置指定 master key,请使用与主网络插件关联的物理网络接口,以避免可能冲突。

5.1.5.1. MACVLAN CNI 插件配置示例

以下示例配置了名为 macvlan-net 的额外网络:

{
  "cniVersion": "0.3.1",
  "name": "macvlan-net",
  "type": "macvlan",
  "master": "eth1",
  "linkInContainer": false,
  "mode": "bridge",
  "ipam": {
    "type": "dhcp"
    }
}

5.1.6. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.