Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

支持具有多个网络接口的 Pod

云原生 Contrail® 网络™ (CN2) 在 Kubernetes 中为 Pod 支持多个网络接口。Kubernetes 中对 Pod 的多个网络接口支持提供了各种特定于环境的功能,包括通过多个接口对流量进行分段的能力。

云原生 Contrail 网络本机支持 Pod 的多个网络接口。您还可以使用 Multus 在云原生 Contrail 网络中启用多个网络接口。Multus 是由 Kubernetes 网络管道工作组开发的用于 Kubernetes 的容器网络接口 (CNI) 插件。云原生 Contrail 可与 Multus 互操作,从而支持 Pod 中的多个 CCI 提供的多个接口。

本文提供了在使用 CN2 的环境中为 Pod 启用多个接口的步骤。其中包括有关何时以及如何启用多个网络接口的信息。Pod 的多接口支持最初在 Contrail 网络 22.1 版中发布。

云原生 Contrail 中的多个网络接口的优势

在许多云网络环境中,支持多个网络接口是有用或必须的。此列表提供了几个常见示例:

  • Pod 通常需要一个数据接口来传输数据流量,另一个接口用于管理流量。

  • 虚拟网络功能 (VNF) 通常需要三个接口(左接口、右侧接口和管理接口)来提供网络功能。VNF 通常无法通过单个网络接口提供其功能。

  • 云网络拓扑通常需要支持两个或多个网络接口,以将管理网络与租户网络隔离。

  • 在自定义的或大规模云网络环境中,您通常必须使用支持多个网络接口的云网络产品,才能满足各种特定于环境的要求。

使用默认 CNI 的 Kubernetes 群集中的 Pod 具有用于发送和接收网络流量的单一网络接口。您可以使用云原生 Contrail 网络提供多个网络接口。云原生 Contrail 网络还支持 Multus 集成,允许使用云原生 Contrail 联网的环境使用 Multus 支持多个网络接口。

云原生 Contrail 中的多个网络接口概述

您可以使用 Multus(不使用 Multus)在云原生 Contrail 中启用多个网络接口。Multus 是用于 Kubernetes 的容器网络接口 (CNI) 插件,支持 Pod 上的多个网络接口以及 Pod 之间的多宿主。Multus 可以同时支持来自多个委托 CNI 的接口。这种多委托 CNI 支持允许创建使用不同供应商(包括 CN2)的 CNI 互连的云网络环境。Multus 通常被称为“元插件”,因为这种多供应商支持。

以下两个段落提供了有关何时使用启用多个网络接口的两种方法的信息。

您应该使用对多个网络接口的原生云原生 Contrail 网络支持启用多个网络接口,原因如下:

  • 您不希望在您的环境中启用和维护 Multus 而增加开销。

  • 您正在使用云原生 Contrail 网络作为唯一的容器网络接口 (CNI)。

  • 您不希望创建和维护网络附件定义 (NAD) 对象来支持环境中的多个网络接口。

    您必须创建一个 NAD 对象,以启用具有 Multus 的多个网络接口。如果不使用 Multus,则不必配置 NAD 对象来启用多个网络接口。

    值得注意的是,每个 NAD 对象都会创建一个虚拟网络和一个子网,您必须监控和维护该子网。

您应该使用 Multus 启用多个网络接口,原因如下:

  • 您在已经在使用 Multus 的环境中使用云原生 Contrail。在采用 Openshift 编排的环境中,Multus 尤其常见。

  • 您需要 Multus 提供的“元插件”功能。您正在使用云原生 Contrail 的环境,其中 Pod 使用多个接口,而多个接口由云原生 Contrail 和其他 CNI 进行管理。

  • 您在与 Juniper Networks Apstra 集成的环境中使用云原生 Contrail。您必须启用 Multus 才能启用云原生 Contrail 与 Apstra 集成。

    22.4 版中引入了云原生 Contrail 与 Apstra 的集成。有关云原生 Contrail 与 Apstra 集成的更多信息,请参阅 CN2 Apstra 集成,用于基于 SR-IOV 的工作负载

  • 您需要在您的环境中使用一些其他 Multus 功能。

具有 Multus 的云原生 Contrail 集成概述

Contrail vRouter 本质上是多图斯感知的。无需云原生 Contrail 网络特定的配置,即可实现 Multus 与云原生 Contrail 的互操作性。

此列表总结了具有 Multus 的云原生 Contrail 支持互操作性选项:

  • 云原生 Contrail 与 Multus CNI 版本 0.3.1 兼容。

  • 云原生 Contrail 必须使用 Multus 配置为主要/默认 CNI。

  • 只有当云原生 Contrail 也配置为主要/默认 CNI 时,才能将云原生 Contrail 配置为具有 Multus 的委托 CNI。当其他 CNI 配置为主要 CNI 时,不支持将云原生 Contrail 配置为委托 CNI。

  • 在 vRouter 内核模式或数据平面开发套件 (DPDK) 模式下,云原生 Contrail 支持与 Multus 的互操作性。

Multus 是一个第三方插件。您可以在 Kubernetes 中(但完全不在云原生 Contrail)中启用和配置 Multus。要启用 Multus,您可以应用 Kubernetes 网络管道工作组提供的 multus-daemonset.yml 文件。

有关 Multus 的详细信息,请参阅 Kubernetes 网络管道工作组的 Multus CNI 使用指南

创建网络附件定义对象

使用云原生 Contrail 网络中支持的原生多个接口,无需创建 网络连接定义 (NAD) 对象即可启用多个接口。如果未使用 Multus 在环境中启用多个网络接口,则可以跳过此部分。如果您未使用 NAD 对象,但需要创建虚拟网络,请参阅 在云原生 Contrail 网络中部署虚拟网络路由器

本节说明如何使用 YAML 文件创建 NAD 对象。您可以使用 juniper.net/networks 注释将云原生 Contrail 配置到 NAD 对象中。本节稍后提供创建 NAD 对象的 YAML 文件的有代表性示例,以及字段说明表。

创建 NetworkAttmentDefinition 对象时,请务必包含 juniper.net/networks 注释。如果定义 YAML 文件以创建网络连接定义对象而不使用 juniper.net/networks 注释,则网络连接定义对象将被视为第三方对象。不会在网络中创建任何 Contrail 相关对象,包括虚拟网络对象和子网对象。

您可以使用 NAD 控制器在 Kubernetes 环境中创建网络连接定义对象。NAD 控制器在 kube 管理器中运行,并在成功创建网络连接定义时创建虚拟网络对象或更新现有虚拟网络对象。NAD 控制器默认启用,但您可以禁用它;请参阅禁用网络附件定义控制器

下面是用于创建 网络连接定义 对象的 YAML 文件的示例:

网络连接定义对象字段表提供了网络连接定义对象文件中变量的使用详细信息。

表 1:网络连接定义对象字段
可变 用法
ipamV4Subnet

(可选)指定虚拟网络的 IPv4 子网地址。

ipamV6Subnet (可选)指定虚拟网络的 IPv6 子网地址。
路由目标列表 (可选)提供同时用作导入和导出路由的路由目标列表。
导入RouteTargetList (可选)提供用作导入路由的路由目标列表。
导出RouteTargetList (可选)提供用作导出路由的路由目标列表。
交换矩阵SNAT

(可选)指定是否要使用交换矩阵源 NAT 提供的端口映射功能来切换与底层网络的连接。

将参数设置为 。默认设置为 false 。如果希望允许连接到底层网络,请将参数设置为 true

您应该注意以下与 网络连接定义 对象相关的网络活动:

  • 网络附件定义控制器在 kube 管理器中工作,处理所有网络附件定义对象。

  • 您可以监控 juniper.net/network-status 中的网络附件定义控制器更新。

  • 网络附件定义对象不允许有 IPAM 更新。

网络附件定义对象将创建虚拟网络。网络 附件定义对虚拟网络的影响表 概述了与网络附件定义对象相关的事件如何影响虚拟网络。

表 2:网络附件定义对象对虚拟网络的影响
如果

您可以在单个群集拓扑中为网络附件定义对象定义命名空间

虚拟网络是在与网络附件定义相同的命名空间中创建的。

此虚拟网络与网络附件定义对象同名。NAD 对象使用 name: 字段在 元数据: 层次结构中命名。

您可以为多群集拓扑中的网络附件定义对象定义命名空间

虚拟网络名称空间是群集名称-ns.

命名空间未为多群集拓扑中的网络附件定义对象定义

虚拟网络名称空间为群集名称默认

删除网络附件定义资源

关联的 虚拟网络 对象也将被删除。

您删除由网络附件定义资源创建的虚拟网络

网络附件定义控制器可以调和问题并重新创建虚拟网络。

将 Pod 配置为使用多个接口

您可以在 Pod 对象中配置多个接口。如果使用 Multus,还必须按照 创建网络附件定义对象中的说明配置 NAD 对象。

在以下示例中,您将为 juniper-pod-1 Pod 中的网络流量创建两个接口: tap1tap2

禁用网络附件定义控制器

NAD 控制器是 kube 管理器对象的一部分。您可以在定义 kubemanager 对象的 YAML 文件中使用 enableNad: 变量来启用和禁用此控制器。网络附件定义控制器默认启用。

如果您希望阻止应用 网络附件定义 对象,则可以禁用网络附件定义控制器。

在以下示例中,网络附件定义控制器已禁用: