節點網路

本主題說明如何為工作負載叢集自訂節點網路,包括自訂節點 IP 位址,以及在 vSphere 上設定 DHCP 保留、節點 IPAM 和 IPv6。

設定節點 DHCP 保留和端點 DNS 記錄 (僅限 vSphere)

對於 vSphere 上的新叢集,您需要為其節點建立 DHCP 保留,並且可能還需要為其控制平面端點建立 DNS 記錄:

  • 叢集節點的 DHCP 保留

    在多個控制平面節點可能長時間關閉電源或離線的環境中,為了提供安全預防措施,請為新建立之叢集的控制平面和 worker 節點的 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 來擷取叢集的網繭:

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

        如果輸出列出了網繭,則 DNS 適用於 FQDN。

自訂叢集節點 IP 位址 (獨立管理叢集)

您可以為獨立管理叢集中的節點及其部署的工作負載叢集設定叢集特定的 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

透過節點 IPAM,叢集內 IPAM 提供者會在叢集建立和調整期間,管理工作負載叢集節點的 IP 位址,而無需設定外部 DHCP。

附註

此程序不適用於具有 vSphere with Tanzu 主管的 TKG,或 AWS 或 Azure 上具有獨立管理叢集的 TKG。

當您為新的或現有的工作負載叢集設定節點 IPAM 時,使用者將指定內部 IP 集區 (以供 IPAM 提供者從中配置靜態 IP 位址) 和閘道位址。

IP 集區會設定為 subnet,具有選用的 startend 位址,以限制子網路 CIDR 內的位址範圍。

此圖顯示節點 IPAM 如何啟用 CAPV,以從其 IP 集區來設定靜態節點位址。特定於節點 IPAM 的元件 (實線外框) 和資源定義 (虛線外框) 會以綠色顯示。

節點 IPAM 方塊和線條

必要條件

  • TKG 獨立管理叢集
  • 工作負載叢集的控制平面和工作節點的名稱伺服器
    • 這是必要的;因為叢集節點不再透過 vCenter 中的 DHCP 來解析名稱
  • kubectl 和安裝在本機的 Tanzu CLI

限制

節點 IPAM 在 TKG v2.1 中具有以下限制:

  • 僅適用於由 vSphere 上的管理叢集所部署的以類別為基礎的工作負載叢集。
  • 不支援 Windows 節點。
  • 僅適用於 IPv4 環境,不適用於 IPv6 或雙堆疊。
  • 只會配置節點位址,不會配置叢集控制平面端點。
  • 如果您是為現有叢集設定節點 IPAM,則不會檢查其 IP 集區是否與叢集已使用的 DHCP 集區發生衝突。
  • 按照設計,IP 集區特定於命名空間,不能在多個命名空間之間共用。
    • 跨多個命名空間執行的叢集會要求每個命名空間中都要有一個 IP 集區,且所有命名空間的位址範圍均不重疊。
    • 有關 IP 集區的其他限制,請參閱下面的集區規則

為工作負載叢集設定節點 IPAM

若要使用節點 IPAM 來設定新的或現有的叢集,請執行以下動作:

  1. 建立 InClusterIPPool 物件定義,以從子網路中設定 IP 位址範圍,以供 TKG 用來為工作負載叢集配置靜態 IP 位址。例如,建立一個物件 inclusterippool,且該物件將為 10.10.10.20010.10.10.250 保留給 default 命名空間中的叢集:

    ---
    apiVersion: ipam.cluster.x-k8s.io/v1alpha1
    kind: InClusterIPPool
    metadata:
      name: inclusterippool
      # the namespace where the workload cluster is deployed
      namespace: default
    spec:
      # replace the IPs below with what works for your environment
      subnet: 10.10.10.0/24
      gateway: 10.10.10.1
      # start and end are optional fields that restrict the allocatable address range
      # within the subnet
      start: 10.10.10.200
      end: 10.10.10.250
    
  2. 建立 InClusterIPPool 物件:

    kubectl apply -f my-ip-pool.yaml
    
  3. 在 Tanzu CLI 組態中啟用自訂名稱伺服器功能:

    tanzu config set features.cluster.custom-nameservers true
    
  4. 將工作負載叢集設定為在平面叢集組態檔或 Kubernetes 樣式的物件規格內使用 IP 集區,如組態檔中所述。

    例如:

    • 平面組態檔 (以建立新叢集):

      # The name of the InClusterIPPool object specified above
      NODE_IPAM_IP_POOL_NAME: inclusterippool
      CONTROL_PLANE_NODE_NAMESERVERS: 10.10.10.10
      WORKER_NODE_NAMESERVERS: 10.10.10.10
      
    • 物件規格 (以建立新叢集或修改現有叢集):

      ---
      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]
        - name: worker
          value:
            network:
              nameservers: [10.10.10.10]
      

現在,您可以部署工作負載叢集。

集區規則

  • IP 集區的範圍不得重疊
    • 重疊的集區可能導致失敗,且 TKG 不會驗證集區範圍或偵測重疊情況。
  • 請勿使用新集區來更新作用中 InClusterIPPool 物件
    • 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 8 上,建立具有 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 如需偽裝規則的詳細資訊,請參閱 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 節點的叢集上設定雙堆疊。僅支援其 OS_NAME 設為 ubuntu 的叢集。

  • 無法為 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