Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

部署自定义默认 Pod 网络

总结 从版本 22.4 开始,瞻博网络云原生 Contrail 网络支持自定义默认容器网络。自定义默认 Pod 网络使 Kubernetes 能够基于每个命名空间或每个 Pod 创建具有单个 Pod 网络的 Pod。

自定义容器网络概述

在传统 Kubernetes 中,默认 Pod 网络是集群中所有 Pod 使用的单个无类别域间路由 (CIDR),无论命名空间如何。这种方法不允许在 Pod 之间进行网络层分段,因为 Kubernetes 会从共享的 CIDR 分配 IP。CN2 通过隔离命名空间解决了这一缺点。隔离命名空间使 Kubernetes 能够基于每个命名空间创建新的默认 Pod 和服务网络。这意味着,当 Kubernetes 创建新的 Pod 或服务时,该 Pod 或服务会附加到单个隔离命名空间中的默认网络。隔离的命名空间可确保 Pod 和服务之间的网络隔离。

CN2 版本 22.4 改进了此功能,使 Kubernetes 能够基于每个 Pod 创建具有单个 Pod 网络的 Pod。自定义默认容器网络提供自己的 VirtualNetworks (VN) 和子网。CN2 根据给定自定义默认 Pod 网络的子网参数分配 Pod IP。作为自定义默认 Pod 网络的结果,您可以在给定命名空间中创建具有自己的网络的 Pod。换句话说,CN2 支持命名空间级别和 Pod 级别的网络隔离。

部署自定义默认 Pod 网络

您可以使用以下方法部署自定义默认容器网络:

  • 将 定义为 VirtualNetwork 自定义默认 Pod 网络:如果手动创建 VirtualNetwork 对象,则必须在虚拟网络规范中设置字段 “podNetwork: true”。此字段将新 VN 指定为自定义默认容器网络。

    以下是指定为自定义默认 Pod 网络的示例 VirtualNetwork

  • 安装注释中juniper.net/networks设置了“podNetwork: true”的网络附件定义 (NAD) 以创建自定义默认 Pod 网络:如果创建此 NAD,NAD 控制器会自动创建 VN,并在创建过程中VirtualNetwork设置podNetwork: true“”字段。

    以下是指定为自定义默认 Pod 网络的 NAD 示例。

  • 为每个命名空间指定自定义默认 Pod 网络:如果命名空间中的所有 Pod 都使用该网络作为 Pod 网络,则可以基于每个命名空间指定自定义 Pod 网络。注 Namespacenet.juniper.contrail.podnetwork: network-namespace/network-name 会将所需网络指定为自定义容器网络。

    以下 YAML 部分显示了为命名空间定义的自定义 Pod 网络的注释示例。

    注意:

    如果命名空间使用与主接口 (eth0) 相同的网络,则无需为命名空间中的 Pod 指定 NAD 注释。换句话说,由于命名空间使用注释指定网络,因此该命名空间中的 Pod 不需要指定同一个网络。

    注意:

    创建命名空间时,命名空间的注释必须存在。您无法更新命名空间上的注释以更改其网络。必须重新创建命名空间才能更改其网络。如果检测到命名空间内自定义容器网络注释的更新,kubemanager则会kubemanager标记该命名空间以及在更新未启动后在该命名空间中创建的任何容器。还原更新会移除该标志,Pod 将正常启动。

  • 为每个容器指定自定义默认容器网络:要基于每个容器指定自定义容器网络,必须在 的 NetworkSelectionElementcni-args指定以下键值对: "net.juniper.contrail.podnetwork": true

    注意:

    此键值对只能指定一次。如果在多个 cn-args 条目中指定此对,则会发生错误。

  • 为服务指定自定义默认容器网络:您可以启用服务以选择使用自定义默认容器网络的容器。您必须在 YAML 的 Service 注释中指定所需的容器网络。批注格式为: network-namespace/network-name。以下 YAML 部分是具有指定自定义 Pod 网络的 YAML 的示例 Service

以下示例 YAML 显示了定义了自定义默认 Pod 网络的命名空间 VirtualNetwork、 和 Pod。

请注意,此 YAML 显示了在容器和命名空间的注释中定义的自定义容器网络。如果同时在 Pod 和命名空间级别指定注释,则 Pod 级别的注释优先。

自定义默认 Pod 网络交互

有关常见自定义容器网络交互的信息,请参阅以下部分。

Pod 内的多个接口

具有自定义默认容器网络的容器可能仍包含多个接口。以下 YAML 是具有自定义网络和多个接口的 Pod 的示例 NetworkSelectionElement

具有上面定义的注释的 Pod 将使用来自 custom-podnet-vn的 eth0 、来自 vn1的 eth1 和来自 的 eth2 vn2您还可以创建具有自定义默认 Pod 网络和多个接口的命名空间。以下 YAML 显示了在命名空间级别复制的上述配置。