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 网络本身支持一个容器的多个网络接口。您还可以使用 Multus 在云原生 Contrail 网络中启用多个网络接口。Multus 是由 Kubernetes Network Plumbing Working Group 开发的用于 Kubernetes 的容器网络接口 (CNI) 插件。云原生 Contrail 可以与 Multus 互操作,为容器中多个 CNI 提供的多个接口提供支持。

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

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

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

  • Pod 通常需要一个数据接口来传输数据流量,以及一个单独的接口来传输管理流量。

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

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

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

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

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

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

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

出于以下原因,您应该使用本机云原生 Contrail 网络支持为多个网络接口启用多个网络接口;

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

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

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

    必须创建 NAD 对象才能使用 Multus 启用多个网络接口。如果不使用 Multus,则不必配置 NAD 对象来启用多个网络接口。

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

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

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

  • 您需要Multus提供的“元插件”功能。您在这样一个环境中使用云原生 Contrail:容器使用多个接口,并且多个接口由云原生 Contrail 和其他 CNI 管理。

  • 您正在使用云原生 Contrail 与瞻博网络 Apstra 集成的环境中。您必须启用 Multus 才能启用云原生 Contrail 与 Apstra 集成。

    与 Apstra 的云原生 Contrail 集成在 22.4 版中引入。有关云原生 Contrail 与 Apstra 集成的更多信息,请参阅 将虚拟网络扩展到 Apstra

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

云原生 Contrail 与 Multus 集成概述

Contrail vRouter 原生可感知 Multus。无需云原生 Contrail 网络特定配置即可启用 Multus 与云原生 Contrail 的互操作性。

以下列表总结了云原生 Contrail 支持与 Multus 的互操作性选项:

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

  • 云原生 Contrail 必须配置为具有 Multus 的主/默认 CNI。

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

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

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

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

创建网络附件定义对象

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

本节说明如何使用 YAML 文件创建 NAD 对象。您可以使用 juniper.net/networks 注释将云原生 Contrail 配置为 NAD 对象。我们将在本节后面提供创建 NAD 对象的 YAML 文件的代表性示例和字段说明表。

请确保在创建 NetworkAttachmentDefinition 对象时包括 juniper.net/networks 批注。如果定义 YAML 文件以创建 NetworkAttachmentDefinition 对象而不使用 juniper.net/networks 批注,则 NetworkAttachmentDefinition 对象将被视为第三方对象。不会在网络中创建与 Contrail 相关的对象,包括虚拟网络对象和子网对象。

使用 NAD 控制器在 Kubernetes 环境中创建 NetworkAttachmentDefinition 对象。NAD 控制器在 kube-manager 中运行,当成功创建 NetworkAttachmentDefinition 时,可以创建一个虚拟网络对象或更新一个现有的虚拟网络对象。NAD 控制器默认处于启用状态,但您可以禁用它;请参阅禁用网络附件定义控制器

下面是用于创建 NetworkAttachmentDefinition 对象的 YAML 文件的示例:

NetworkAttachmentDefinition 对象字段表提供了 NetworkAttachmentDefinition 对象文件中变量的用法详细信息。

表 1:网络附件定义对象字段
可变 用法
ipamV4子网

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

ipamV6子网 (可选)指定虚拟网络的 IPv6 子网地址。
路由目标列表 (可选)提供用作导入和导出路由的路由目标列表。
importRouteTargetList (可选)提供用作导入路由的路由目标的列表。
exportRouteTargetList (可选)提供用作导出路由的路由目标的列表。
fabricSNAT

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

将此参数设置为 truefalse。默认情况下,它设置为 false 。如果要允许连接到底层网络,请将参数设置为 true

您应该注意以下与 NetworkAttachmentDefinition 对象相关的网络活动:

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

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

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

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

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

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

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

此虚拟网络将与网络附件定义对象具有相同的名称。NAD 对象使用元数据:层次结构中的名称:字段命名。

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

虚拟网络命名空间是 cluster-name-ns

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

虚拟网络命名空间是群集名称默认值

删除网络附件定义资源

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

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

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

将 Pod 配置为使用多个接口

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

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

apiVersion: v1
kind: Pod
metadata:
        name: juniper-pod-1
        namespace: juniper-ns
        annotations:
                k8s.v1.cni.cncf.io/networks: |-
                        [
                                {
                                         "name":"juniper-network1",
                                         "namespace":"juniper-ns",
                                         "cni-args":null,
                                         "ips":["172.16.20.42"],
                                         "mac":"de:ad:00:00:be:ef",
                                         "interface":"tap1"
                                },
                                {
                                         "name":"juniper-network2",
                                         "namespace":"juniper-ns",
                                         "cni-args":null,
                                         "ips":["172.16.21.42"],
                                         "mac":"de:ad:00:00:be:ee",
                                         "interface":"tap2"
                                }
                        ]

禁用网络连接定义控制器

NAD 控制器是 kube-manager 对象的一部分。您可以使用定义 kubemanager 对象的 YAML 文件中的 enableNad: 变量启用和禁用此控制器。默认情况下,网络连接定义控制器处于启用状态。

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

在以下示例中,禁用了网络连接定义控制器: