通过将 antrea-nsx-routed 指定为 Tanzu Kubernetes 集群的 CNI,可以将集群配置为使用可路由 Pod 网络。

可路由 Pod 网络简介

Kubernetes 网络模型要求集群节点网络中的 Pod 能够与同一集群中所有节点上的所有 Pod 进行通信,而无需进行网络地址转换 (NAT)。为了满足此要求,将为每个 Kubernetes Pod 提供一个从专用 Pod 网络分配的 IP 地址。

使用 antreacalico CNI 插件置备 Tanzu Kubernetes 集群时,系统会创建默认 Pod 网络 192.168.0.0/16。此子网是专用地址空间,仅独属于集群,不能在 Internet 上路由。尽管可以自定义 network.pods.cidrBlocks,但无法使用这些 CNI 插件路由 Pod 网络。有关详细信息,请参见用于置备 Tanzu Kubernetes 集群的 TKGS v1alpha2 API

Tanzu Kubernetes Grid 服务 v1alpha2 API 通过 antrea-nsx-routed CNI 插件支持可路由 Pod 网络。此网络接口是一个自定义 Antrea 插件,配置为对 Tanzu Kubernetes 集群支持可路由 Pod 网络。在集群规范中,Pod CIDR 块字段必须明确为空,以便 IP 地址管理 (IPAM) 由 主管集群 处理。

通过启用可路由 Pod 网络,可以直接从集群外部的客户端寻址 Pod。此外,将保留 Pod IP 地址,以便外部网络服务和服务器可以识别源 Pod 并根据 IP 地址应用策略。支持的流量模式包括:
  • 允许同一 vSphere 命名空间 中的 Tanzu Kubernetes 集群 Pod 与 vSphere Pod 之间的流量。
  • 丢弃不同 vSphere 命名空间 中的 Tanzu Kubernetes 集群 Pod 和 vSphere Pod 之间的流量。
  • 主管集群 控制平面节点可以访问 Tanzu Kubernetes 集群 Pod。
  • Tanzu Kubernetes 集群 Pod 可以访问外部网络。
  • 外部网络无法访问 Tanzu Kubernetes 集群 Pod。Tanzu Kubernetes 集群节点上的分布式防火墙 (DFW) 隔离规则将丢弃流量。

可路由 Pod 的系统要求

可路由 Pod 网络要求为 主管集群 配置 NSX-T Data Center。无法将可路由 Pod 与本机 vSphere vDS 网络连接结合使用。

可路由 Pod 需要 Tanzu Kubernetes Grid 服务 v1alpha2 API。请参见使用 TKGS v1alpha2 API 的要求

可路由 Pod 的 NSX-T 配置要求

除了基本要求之外,要对 Tanzu Kubernetes 集群使用可路由 Pod 网络,不需要特殊 NSX-T 配置。运行 vSphere U3 和 NSX-T 的 vSphere with Tanzu 环境包含 NCP 版本以支持可路由 Pod 网络。不需要额外的 NSX-T 配置。

NCP 从以下两个源之一为可路由 Pod 网络创建 IP 池:
  • 如果为工作负载网络配置了命名空间网络,NCP 将从为此命名空间网络指定的 IP 段创建一个或多个 IP 池。
  • 如果没有为工作负载网络指定命名空间网络,NCP 将从 主管集群 Pod CIDR 创建一个或多个 IP 池。
有关详细信息,请参见 将工作负载网络添加到配置了 VDS 网络的 主管集群更改配置了 NSX-T Data Center 的 主管集群 上的工作负载网络设置

可路由 Pod 的 主管集群 配置要求

除了基本要求之外,要对 Tanzu Kubernetes 集群使用可路由 Pod 网络,不需要特殊的 主管集群 配置。

如果按照下文所述启用了可路由 Pod 网络,则会从通过命名空间网络创建的 IP 池(如果没有命名空间网络,则从通过 主管集群 Pod CIDR 创建的 IP 池)分配 Tanzu Kubernetes 集群 Pod CIDR。

您必须确保为集群节点分配 IP 地址的 主管集群 服务 CIDR 没有与命名空间网络 CIDR 或 主管集群 Pod CIDR 重叠。

可路由 Pod 的集群配置示例

以下示例 YAML 说明了如何为集群配置可路由 Pod 网络。这是一种用于调用 Tanzu Kubernetes Grid 服务 的自定义配置,并使用 v1alpha2 API 置备 Tanzu Kubernetes 集群。

集群规范将 antrea-nsx-routed 声明为 CNI 以启用可路由 Pod 网络。指定 CNI 为 antrea-nsx-routed 时,pods.cidrBlock 字段必须为空。如果指定了 antrea-nsx-routed,在不使用 NSX-T 网络的情况下,集群置备将失败。

apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TanzuKubernetesCluster
metadata:
  name: tkgs-v2-cluster-routable-pods
  namespace: tkgs-cluster-ns
spec:
  topology:
    controlPlane:
      replicas: 3
      vmClass: guaranteed-medium
      storageClass: vwt-storage-policy
      tkr:  
        reference:
          name: v1.21.2---vmware.1-tkg.1.ee25d55
    nodePools:
    - name: worker-nodepool-a1
      replicas: 3
      vmClass: guaranteed-large
      storageClass: vwt-storage-policy
      tkr:  
        reference:
          name: v1.21.2---vmware.1-tkg.1.ee25d55
  settings:
    storage:
      defaultClass: vwt-storage-policy
    network:
      #`antrea-nsx-routed` is the required CNI
      #for routable pods 
      cni:
        name: antrea-nsx-routed
      services:
        cidrBlocks: ["10.97.0.0/24"]
      serviceDomain: tanzukubernetescluster.local
      #`pods.cidrBlocks` value must be empty
      #when `antrea-nsx-routed` is the CNI 
      pods:
        cidrBlocks: