通过将 antrea-nsx-routed
指定为 Tanzu Kubernetes 集群的 CNI,可以将集群配置为使用可路由 Pod 网络。
可路由 Pod 网络简介
Kubernetes 网络模型要求集群节点网络中的 Pod 能够与同一集群中所有节点上的所有 Pod 进行通信,而无需进行网络地址转换 (NAT)。为了满足此要求,将为每个 Kubernetes Pod 提供一个从专用 Pod 网络分配的 IP 地址。
使用 antrea
或 calico
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) 由 主管集群 处理。
- 允许同一 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 将从为此命名空间网络指定的 IP 段创建一个或多个 IP 池。
- 如果没有为工作负载网络指定命名空间网络,NCP 将从 主管集群 Pod CIDR 创建一个或多个 IP 池。
可路由 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: