节点网络连接

本主题介绍如何为工作负载集群自定义节点网络连接,包括自定义节点 IP 地址以及配置 vSphere 上的 DHCP 预留、节点 IPAM 和 IPv6。

配置节点 DHCP 预留和端点 DNS 记录(仅限 vSphere)

对于 vSphere 上的新集群,需要为其节点创建 DHCP 预留,并且可能还需要为其控制平面端点创建 DNS 记录:

  • 集群节点的 DHCP 预留

    在多个控制平面节点可能会长时间关闭电源或脱机的环境中,作为安全预防措施,请调整新创建的集群控制平面节点和工作节点的 IP 地址的 DHCP 预留,以便这些地址保持静态且租约永不过期。

    有关如何配置 DHCP 预留的说明,请参见 DHCP 服务器文档。

  • 控制平面端点的 DNS 记录

    如果对控制平面端点使用 NSX Advanced Load Balancer 而不是 Kube-Vip,并将 VSPHERE_CONTROL_PLANE_ENDPOINT 设置为 FQDN 而不是数字 IP 地址,请按以下方式保留这些地址:

    1. 检索分配给集群 NSX ALB 的控制平面 IP 地址:

      kubectl get cluster CLUSTER-NAME -o=jsonpath='{.spec.controlPlaneEndpoint} {"\n"}'
      
    2. 记录在输出中列为 "host" 的 IP 地址,例如 192.168.104.107

    3. 创建 DNS A 记录,该记录将您的 FQDN 与您记录的 IP 地址相关联。

    4. 要测试 FQDN,请创建一个新的 kubeconfig,该配置使用 FQDN,而不是来自 NSX ALB 的 IP 地址:

      1. 生成 kubeconfig:

        tanzu cluster kubeconfig get CLUSTER-NAME --admin --export-file ./KUBECONFIG-TEST
        
      2. 编辑 kubeconfig 文件 KUBECONFIG-TEST 以将 IP 地址替换为 FQDN。例如,将以下地址:

        server: https://192.168.104.107:443
        

        替换为:

        server: https://CONTROLPLANE-FQDN:443
        
      3. 使用修改后的 kubeconfig 检索集群的 Pod:

        kubectl get pods -A --kubeconfig=./KUBECONFIG-TEST
        

        如果输出列出 pod,则 DNS 适用于 FQDN。

自定义集群节点 IP 地址(独立 MC)

您可以为独立管理集群中的节点及其部署的工作负载集群配置集群特定的 IP 地址块。如何执行此操作取决于运行集群的云基础架构:

vSphere

在 vSphere 上,集群配置文件的 VSPHERE_NETWORK 设置 Tanzu Kubernetes Grid 用于集群节点和其他 Kubernetes 对象的虚拟机网络。IP 地址由在此虚拟机网络中运行的 DHCP 服务器分配给节点,该服务器与 Tanzu Kubernetes Grid 分开部署。

如果使用 NSX 网络连接,可以按照 VMware NSX-T Data Center 文档中的在分段上配置 DHCP 静态绑定为集群节点配置 DHCP 绑定。

注意

对于 v4.0+,VMware NSX-T Data Center 被重命名为“VMware NSX”。

AWS

要在 Amazon Web Services (AWS) 上配置集群特定的 IP 地址块,请在集群配置文件中设置以下变量,如《配置文件变量参考》中的 AWS 表中所述。

  • 设置 AWS_PUBLIC_NODE_CIDR,为公用节点设置 IP 地址范围。
    • 通过设置 AWS_PRIVATE_NODE_CIDR_1AWS_PRIVATE_NODE_CIDR_2 使其他范围可用
  • 设置 AWS_PRIVATE_NODE_CIDR,为专用节点设置 IP 地址范围。
    • 通过设置 AWS_PRIVATE_NODE_CIDR_1AWS_PRIVATE_NODE_CIDR_2 使其他范围可用
  • 所有节点 CIDR 范围必须位于集群的 VPC 范围内,默认为 10.0.0.0/16

Microsoft Azure

要在 Azure 上配置集群特定的 IP 地址块,请在集群配置文件中设置以下变量,如《配置文件变量参考》中的 Microsoft Azure 表中所述

  • 设置 AZURE_NODE_SUBNET_CIDR,为工作节点 IP 地址创建具有 CIDR 块的新 VNet。
  • 设置 AZURE_CONTROL_PLANE_SUBNET_CIDR,为控制平面节点 IP 地址创建具有 CIDR 块的新 VNet。
  • 设置 AZURE_NODE_SUBNET_NAME,从现有 VNet 的范围分配工作节点 IP 地址。
  • 设置 AZURE_CONTROL_PLANE_SUBNET_NAME,从现有 VNet 的范围分配控制平面节点 IP 地址。

节点 IPAM (vSphere)

通过节点 IPAM,集群内 IPAM 提供程序在集群创建和扩展期间分配和管理集群节点的 IP 地址,而无需配置外部 DHCP。

您可以为 vSphere 上的独立管理集群及其管理的基于类的工作负载集群配置节点 IPAM。以下过程为基于类的工作负载集群配置节点 IPAM;要为管理集群配置节点 IPAM,请参见vSphere 的管理集群配置中的配置节点 IPAM

注意

此过程不适用于具有 vSphere with Tanzu 主管或 AWS 或 Azure 上的独立管理集群的 TKG。

为新工作负载集群或现有工作负载集群配置节点 IPAM 时,用户指定 IPAM 提供程序从中分配静态 IP 地址的内部 IP 池以及网关地址。

将地址分配给集群节点时,节点 IPAM 始终选择池中可用的最低地址。

必备条件

  • TKG 独立管理集群
  • 工作负载集群的控制平面和工作节点的名称服务器
    • 必需,因为集群节点不再通过 DHCP 接收命名服务器以解析 vCenter 中的名称。
  • kubectl 和在本地安装的 Tanzu CLI

限制条件

节点 IPAM 在 TKG v2.3 中具有以下限制:

  • 仅适用于由 vSphere 上的管理集群部署的基于类的新工作负载集群。
    • 无法将现有的基于 DHCP 的集群转换为节点 IPAM。
  • 不支持 Windows 节点。
  • 仅适用于 IPv4 或 IPv6 环境,而不是双堆栈。
  • 仅分配节点地址,而不是集群控制平面端点。
  • 节点 IPAM 不会检查其 IP 池是否与其他集群已在使用的 DHCP 池冲突。

为工作负载集群配置节点 IPAM

工作负载集群的节点 IPAM 池可以由两个不同的对象类型定义,具体取决于其地址如何与其他集群共享:

  • InClusterIPPool 配置仅可用于同一管理集群命名空间中的工作负载集群的 IP 池,例如 default
    • 这是 TKG v2.1 和 v2.2 中唯一可用的类型。
  • GlobalInClusterIPPool 为 IP 池配置地址,这些地址可分配给跨多个命名空间的工作负载集群。

要使用节点 IPAM 配置新集群或现有集群,请执行以下操作:

  1. 创建一个 IP 池对象定义文件 my-ip-pool.yaml,以从 TKG 可用于为工作负载集群分配静态 IP 地址的子网中设置 IP 地址范围。根据您想要的 IP 池范围,将对象定义为 InClusterIPPoolGlobalInClusterIPPool 例如:

    • InClusterIPPool:要为命名空间 default 中的工作负载集群创建 IP 池 inclusterippool,其中包含范围 10.10.10.2-10.10.10.100加上 10.10.10.10210.10.10.104

      apiVersion: ipam.cluster.x-k8s.io/v1alpha2
      kind: InClusterIPPool
      metadata:
        name: inclusterippool
        namespace: default
      spec:
        gateway: 10.10.10.1
        addresses:
        - 10.10.10.2-10.10.10.100
        - 10.10.10.102
        - 10.10.10.104
        prefix: 24
      
      注意

      以前的 TKG 版本使用 valpha1 版本的 InClusterIPPool 对象,该对象仅支持 startend 指定的连续 IP 池范围,如 TKG v2.1 文档中所述。将集群升级到 v2.3 会将其 IP 池转换为新结构。

    • GlobalInClusterIPPool:创建 IP 池 inclusterippool 以便在包含与上述 InClusterIPPool 相同的地址的命名空间之间共享:

      apiVersion: ipam.cluster.x-k8s.io/v1alpha2
      kind: GlobalInClusterIPPool
      metadata:
        name: inclusterippool
      spec:
        gateway: 10.10.10.1
        addresses:
        - 10.10.10.2-10.10.10.100
        - 10.10.10.102
        - 10.10.10.104
        prefix: 24
      
  2. 创建 IP 池对象:

    kubectl apply -f my-ip-pool.yaml
    
  3. 将工作负载集群配置为在平面集群配置文件或 Kubernetes 样式对象规范中使用 IP 池,如配置文件中所述。

    例如:

    • 平面配置文件(创建新集群):

      # The name of the InClusterIPPool object specified above
      NODE_IPAM_IP_POOL_NAME: inclusterippool
      CONTROL_PLANE_NODE_NAMESERVERS: 10.10.10.10,10.10.10.11
      WORKER_NODE_NAMESERVERS: 10.10.10.10,10.10.10.11
      
    • 对象规范(创建新集群或修改现有集群):

      ---
      apiVersion: cluster.x-k8s.io/v1beta1
      kind: Cluster
      spec:
      topology:
        variables:
        - name: network
          value:
            addressesFromPools:
            - apiGroup: ipam.cluster.x-k8s.io
              kind: InClusterIPPool
              name: inclusterippool
        - name: controlplane
          value:
            network:
              nameservers: [10.10.10.10,10.10.10.11]
        - name: worker
          value:
            network:
              nameservers: [10.10.10.10,10.10.10.11]
      

现在,您可以部署工作负载集群。

池规则

  • IP 池范围不得重叠
    • 重叠的池可能会导致故障,并且 TKG 不会验证池范围或检测重叠。
  • 请勿从 IP 池中移除当前分配的 IP 地址。

节点 IPAM 故障排除

  • 要查看集群节点是否已分配 IP 地址,请运行 kubectl get 以列出特定于 IaaS 的计算机对象(vspherevms),并检查其 IPAddressClaimed 状态。True 表示节点的地址声明成功,如果状态为 False,则命令输出会报告 Reason,说明状况未就绪的原因:

    kubectl -n CLUSTER-NAMESPACE get vspherevms
    
  • 要查看 IP 地址声明,请列出 ipaddressclaims。对于每台计算机,addressesFromPools 条目会导致创建一个 IPAddressClaim

    kubectl -n CLUSTER-NAMESPACE get ipaddressclaims
    
  • 要查看 IP 地址,请列出 ipaddress。集群内 IPAM 提供程序应检测每个 IPAddressClaim 并创建相应的 IPAddress 对象:

    kubectl -n CLUSTER-NAMESPACE get ipaddress
    
  • 当给定虚拟机的所有声明都与 IP 地址匹配时,CAPV 会将分配的 IP 地址写入虚拟机的 cloud-init 元数据并创建虚拟机。要查看 IP 地址协调步骤,请参见 CAPV 和集群 API IPAM 提供程序 (CAIP) 日志:

    kubectl logs -n capv-system capv-controller-manager
    kubectl logs -n caip-in-cluster-system capi-in-cluster-controller-manager
    

IPv6 网络连接 (vSphere)

您可以使用基于 Ubuntu 的节点,在具有 Kube-Vip 的 vSphere 上的仅 IPv6 但堆栈网络环境中运行管理集群和工作负载集群。

注意无法使用 vSphere with Tanzu 主管集群创建 IPv6 集群。无法向 Tanzu Mission Control 注册 IPv6 集群。当前不支持 NSX Advanced Load Balancer 服务和双堆栈 IPv4/IPv6 网络。

必备条件:

部署 IPv6 管理集群

在引导计算机上执行以下操作以将管理集群部署到 IPv6 网络环境中:

  1. 将 Linux 配置为接受路由器通告,确保 Docker 服务启动时不会从路由表中移除默认 IPv6 路由。有关详细信息,请参见 Docker CE 删除 IPv6 默认路由sudo sysctl net.ipv6.conf.eth0.accept_ra=2

  2. 为引导集群创建伪装规则以从引导集群发送出站流量:sudo ip6tables -t nat -A POSTROUTING -s fc00:f853:ccd:e793::/64 ! -o docker0 -j MASQUERADE 有关伪装规则的详细信息,请参见伪装

  3. 在配置文件中为管理集群设置以下变量。

    • TKG_IP_FAMILY 设置为 ipv6
    • VSPHERE_CONTROL_PLANE_ENDPOINT 设置为静态 IPv6 地址。
    • (可选)设置 CLUSTER_CIDR and SERVICE_CIDR。默认值分别为 fd00:100:64::/48fd00:100:96::/108
  4. 通过运行 tanzu mc create 部署管理集群,如在配置文件中部署管理集群中所述。

    • 要支持 IPv6,您必须在配置文件(而不是安装程序界面)中部署管理集群。

部署 IPv6 工作负载集群

如果已部署 IPv6 管理集群,请按以下方式部署 IPv6 工作负载集群:

  1. 在配置文件中为工作负载集群设置以下变量。

    • TKG_IP_FAMILY 设置为 ipv6
    • VSPHERE_CONTROL_PLANE_ENDPOINT 设置为静态 IPv6 地址。
    • (可选)设置 CLUSTER_CIDR and SERVICE_CIDR。默认值分别为 fd00:100:64::/48fd00:100:96::/108
  2. 按照创建工作负载集群中所述部署工作负载集群。

双堆栈集群(技术预览版)

注意

此功能处于不受支持的技术预览版状态;请参见 TKG 功能状态

通过双堆栈功能,可以部署具有 IPv4 和 IPv6 IP 系列的集群。但是,主 IP 系列是 IPv4。在试用此功能之前,请将 vCenter Server 配置为同时支持 IPv4 和 IPv6 连接。

以下是此版本中双堆栈功能的限制:

  • 双堆栈功能支持将 vSphere 作为唯一的基础架构即服务 (IaaS) 产品。

  • 无法在具有 Photon OS 节点的集群上配置双堆栈。仅支持配置了 ubuntuOS_NAME 的集群。

  • 无法为 vSphere with Tanzu 主管集群或其创建的工作负载集群配置双堆栈网络连接。

  • 无法使用安装程序界面部署双堆栈管理集群。

  • 您无法在 NSX Advanced Load Balancer (ALB) 提供的负载均衡器服务上使用双堆栈或 IPv6 服务。您可以使用 kube-vip 作为双堆栈集群的控制平面端点提供程序。使用 NSX ALB 作为双堆栈集群的控制平面端点提供程序尚未得到验证。

  • 在此版本中,仅对 Antrea、Calico、CSI、CPI 和 Pinniped 等核心加载项组件进行了双堆栈支持验证。

要在集群上配置双堆栈,请执行以下操作:

  1. 设置双堆栈功能标记:

    a. 要在管理集群上启用该功能,请运行以下命令:

    tanzu config set features.management-cluster.dual-stack-ipv4-primary true
    

    b. 要在工作负载集群上启用该功能,请运行以下命令:

    tanzu config set features.cluster.dual-stack-ipv4-primary true
    
  2. 根据需要部署管理集群创建工作负载集群

    在集群配置文件中:

    • 将 IP 系列配置变量设置为 TKG_IP_FAMILY: ipv4,ipv6
    • (可选)设置服务 CIDR 和集群 CIDR。
    注意

    每个变量有两个 CIDR。这些 CIDR 的 IP 系列遵循配置的 TKG_IP_FAMILY 的顺序。允许用于 IPv4 地址的最大 CIDR 范围是 /12,最大的 IPv6 SERVICE_CIDR 范围为 /108。如果未设置 CIDR,则使用默认值。

    • 如果使用 Antrea 作为集群的 CNI,请设置以下配置文件参数:

      ANTREA_ENDPOINTSLICES: true
      

    这些服务在 PreferDualStackRequireDualStack 规范中指定了 ipFamilyPolicy,现在可以通过 IPv4 或 IPv6 访问。

注意

上游 Kubernetes 中的双堆栈功能的端到端测试可能会失败,因为集群节点仅通告其主 IP 地址(本例中为 IPv4 地址)作为其 IP 地址。

check-circle-line exclamation-circle-line close-line
Scroll to top icon