本主題說明如何為工作負載叢集自訂節點網路,包括自訂節點 IP 位址,以及在 vSphere 上設定 DHCP 保留、節點 IPAM 和 IPv6。
對於 vSphere 上的新叢集,您需要為其節點建立 DHCP 保留,並且可能還需要為其控制平面端點建立 DNS 記錄:
叢集節點的 DHCP 保留:
在多個控制平面節點可能長時間關閉電源或離線的環境中,為了提供安全預防措施,請為新建立之叢集的控制平面和 worker 節點的 IP 位址調整 DHCP 保留,以便這些位址保持不變,且租用永不到期。
如需如何設定 DHCP 保留的相關指示,請參閱 DHCP 伺服器說明文件。
控制平面端點的 DNS 記錄:
如果您對控制平面端點使用 NSX Advanced Load Balancer (而非 Kube-Vip),並將 VSPHERE_CONTROL_PLANE_ENDPOINT
設定為 FQDN 而不是一個數字 IP 位址,請依下列方式來保留這些位址:
擷取 NSX ALB 指派給叢集的控制平面 IP 位址:
kubectl get cluster CLUSTER-NAME -o=jsonpath='{.spec.controlPlaneEndpoint} {"\n"}'
記錄在輸出中列為 "host"
的 IP 位址,例如 192.168.104.107
。
建立 DNS A
記錄,該記錄會將您的 FQDN 關聯至您所記錄的 IP 位址。
若要測試 FQDN,請建立新的 kubeconfig,並使其使用 FQDN,而非使用來自 NSX ALB 的 IP 位址:
產生 kubeconfig:
tanzu cluster kubeconfig get CLUSTER-NAME --admin --export-file ./KUBECONFIG-TEST
編輯 kubeconfig 檔案 KUBECONFIG-TEST
,以將 IP 位址取代為 FQDN。例如,將以下:
server: https://192.168.104.107:443
取代為:
server: https://CONTROLPLANE-FQDN:443
使用修改後的 kubeconfig 來擷取叢集的網繭:
kubectl get pods -A --kubeconfig=./KUBECONFIG-TEST
如果輸出列出了網繭,則 DNS 適用於 FQDN。
您可以為獨立管理叢集中的節點及其部署的工作負載叢集設定叢集特定的 IP 位址區塊。該如何做取決於叢集執行所在的雲端基礎結構:
在 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」。
若要在 Amazon Web Services (AWS) 上設定叢集特定的 IP 位址區塊,請在叢集組態檔中設定以下變數,如〈組態檔變數參考〉的 AWS 資料表中所述。
AWS_PUBLIC_NODE_CIDR
,為公用節點設定 IP 位址範圍。
AWS_PRIVATE_NODE_CIDR_1
或 AWS_PRIVATE_NODE_CIDR_2
,使其他範圍變成可用AWS_PRIVATE_NODE_CIDR
,為私人節點設定 IP 位址範圍。
AWS_PRIVATE_NODE_CIDR_1
和 AWS_PRIVATE_NODE_CIDR_2
,使其他範圍變成可用10.0.0.0/16
。若要在 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 提供者會在叢集建立和調整期間,配置和管理叢集節點的 IP 位址,而無需設定外部 DHCP。
對於 vSphere 上的獨立管理叢集及其管理的基於類別的工作負載叢集,您可以設定節點 IPAM。以下程序為基於類別的工作負載叢集設定節點 IPAM;如要為管理叢集設定節點 IPAM,請參閱《vSphere 的管理叢集組態》中的設定節點 IPAM。
附註此程序不適用於具有 vSphere with Tanzu 主管的 TKG,或 AWS 或 Azure 上具有獨立管理叢集的 TKG。
當您為新的或現有的工作負載叢集設定節點 IPAM 時,使用者將指定內部 IP 集區 (以供 IPAM 提供者從中配置靜態 IP 位址) 和閘道位址。
將位址分配給叢集節點時,節點 IPAM 始終選擇集區中可用的最低位址。
kubectl
和安裝在本機的 Tanzu CLITKG v2.3 中的節點 IPAM 具有以下限制:
工作負載叢集的節點 IPAM 集區可以由兩個不同的物件類型定義,取決於其位址如何與其他叢集共用:
InClusterIPPool
設定僅可用於同一管理叢集命名空間中的工作負載叢集的 IP 集區,例如 default
。
GlobalInClusterIPPool
為 IP 集區設定位址,這些位址可分配給跨多個命名空間的工作負載叢集。若要使用節點 IPAM 來設定新的或現有的叢集,請執行以下動作:
建立 IP 集區物件定義 my-ip-pool.yaml
檔案,以從子網路中設定 IP 位址範圍,以供 TKG 用來為工作負載叢集配置靜態 IP 位址。根據您想要的 IP 集區範圍,將物件定義為 InClusterIPPool
或 GlobalInClusterIPPool
,例如:
InClusterIPPool
:要為命名空間 inclusterippool
中的工作負載叢集建立 IP 集區 default
,其中包含範圍 10.10.10.2-10.10.10.100
加上 10.10.10.102
和 10.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
物件,該物件僅支援start
和end
指定的連續 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
建立 IP 集區物件:
kubectl apply -f my-ip-pool.yaml
將工作負載叢集設定為在平面叢集組態檔或 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 位址給叢集節點,請執行 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
您可以使用以 Ubuntu 為基礎的節點,在具有 Kube-Vip 的 vSphere 上,於純 IPv6 單一堆疊網路環境中,執行管理叢集和工作負載叢集。
注意無法使用 vSphere with Tanzu 主管叢集建立 IPv6 叢集。您無法向 Tanzu Mission Control 登錄 IPv6 叢集。目前不支援 NSX Advanced Load Balancer 服務和雙堆疊 IPv4/IPv6 網路。
必要條件:
在啟動機器上執行下列動作,以將管理叢集部署至 IPv6 網路環境:
將 Linux 設定成接受路由器通告,以確保當 Docker 服務啟動時,不會從路由表中移除預設 IPv6 路由。如需詳細資訊,請參閱 Docker CE 刪除 IPv6 預設路由。sudo sysctl net.ipv6.conf.eth0.accept_ra=2
為啟動叢集建立偽裝規則,以從啟動叢集傳送傳出流量:sudo ip6tables -t nat -A POSTROUTING -s fc00:f853:ccd:e793::/64 ! -o docker0 -j MASQUERADE
如需偽裝規則的詳細資訊,請參閱 MASQUERADE。
針對管理叢集,設定組態檔中的變數,如下所示。
TKG_IP_FAMILY
設定為 ipv6
。VSPHERE_CONTROL_PLANE_ENDPOINT
設定為靜態 IPv6 位址。CLUSTER_CIDR and SERVICE_CIDR
。預設值分別為 fd00:100:64::/48
和 fd00:100:96::/108
。執行 tanzu mc create
以部署管理叢集,如從組態檔來部署管理叢集中所述。
如果您已部署 IPv6 管理叢集,請按如下所示來部署 IPv6 工作負載叢集:
針對工作負載叢集,設定組態檔中的變數,如下所示。
TKG_IP_FAMILY
設定為 ipv6
。VSPHERE_CONTROL_PLANE_ENDPOINT
設定為靜態 IPv6 位址。CLUSTER_CIDR and SERVICE_CIDR
。預設值分別為 fd00:100:64::/48
和 fd00:100:96::/108
。依照建立工作負載叢集中所述,部署工作負載叢集。
附註此功能處於不受支援的技術預覽狀態;請參閱 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 等核心附加元件,驗證過其雙堆疊支援。
若要在叢集上設定雙堆疊,請執行以下動作:
設定雙堆疊功能旗標:
a. 若要在管理叢集上啟用該功能,請執行以下命令:
tanzu config set features.management-cluster.dual-stack-ipv4-primary true
b. 若要在工作負載叢集上啟用該功能,請執行以下命令:
tanzu config set features.cluster.dual-stack-ipv4-primary true
在叢集組態檔中:
TKG_IP_FAMILY: ipv4,ipv6
。附註每個變數都有兩個 CIDR。這些 CIDR 的 IP 系列遵循所設定的
TKG_IP_FAMILY
的順序。允許用於 IPv4 位址的最大 CIDR 範圍是 /12,最大的 IPv6 SERVICE_CIDR 範圍是 /108。如果您未設定 CIDR,則會使用預設值。
如果您使用 Antrea 作為叢集的 CNI,請設定以下組態檔參數:
ANTREA_ENDPOINTSLICES: true
若有服務在其 PreferDualStack
或 RequireDualStack
規格中指定了 ipFamilyPolicy
,現在就可透過 IPv4 或 IPv6 來存取該服務。
附註如果對上游 Kubernetes 中的雙堆疊功能進行端到端測試,則可能會失敗,因為叢集節點只會通告其主要 IP 位址 (本例中為 IPv4 位址) 作為其 IP 位址。