IP 位址規劃需求
適用於:Azure 本機版本 23H2
Azure Arc 所啟用 AKS 的 IP 位址規劃牽涉到設計支援應用程式、節點集區、Pod 網路、服務通訊和外部存取的網路。 本文將逐步引導您完成有效IP位址規劃的一些重要考慮,以及部署生產環境中 AKS 所需的IP位址數目下限。 閱讀本文之前, 請參閱 AKS 網路概念和需求 。
Kubernetes 叢集和應用程式的簡單IP位址規劃
在下列案例逐步解說中,您會為 Kubernetes 叢集和服務保留單一網路的 IP 位址。 此範例是IP位址指派的最簡單簡單案例。
IP 位址需求 | IP 位址數目下限 | 如何和何處進行此保留 |
---|---|---|
AKS Arc VM IP | 為 Kubernetes 叢集中的每個背景工作節點保留一個 IP 位址。 例如,如果您想要在每個節點集區中建立具有 3 個節點的 3 個節點集區,則需要 IP 集區中的 9 個 IP 位址。 | 透過 Arc VM 邏輯網路中 IP 集區保留 IP 位址。 |
AKS Arc K8s 版本升級IP | 因為 AKS Arc 會執行滾動升級,因此請針對 Kubernetes 版本升級作業,為每個 AKS Arc 叢集保留一個 IP 位址。 | 透過 Arc VM 邏輯網路中 IP 集區保留 IP 位址。 |
控制平面IP | 為環境中每個 Kubernetes 叢集保留一個 IP 位址。 例如,如果您想要總共建立5個叢集,請保留5個IP位址,每個 Kubernetes 叢集各一個。 | 透過 Arc VM 邏輯網路中 IP 集區保留 IP 位址。 |
負載平衡器 IP | 保留的IP位址數目取決於您的應用程式部署模型。 作為起點,您可以為每個 Kubernetes 服務保留一個 IP 位址。 | 保留與 Arc VM 邏輯網路位於相同子網中的 IP 位址,但位於 IP 集區外部。 |
Kubernetes 叢集和應用程式的IP位址保留範例逐步解說
Jane 是 IT 系統管理員,剛從 Azure Arc 啟用的 AKS 開始。Jane 想要在 Azure 本機叢集上部署兩個 Kubernetes 叢集:Kubernetes 叢集 A 和 Kubernetes 叢集 B。 Jane 也想要在叢集 A 之上執行投票應用程式。此應用程式有三個在兩個叢集和一個後端資料庫實例上執行的前端 UI 實例。 所有 AKS 叢集和服務都以單一子網在單一網路中執行。
- Kubernetes 叢集 A 有 3 個控制平面節點和 5 個背景工作節點。
- Kubernetes 叢集 B 有 1 個控制平面節點和 3 個背景工作節點。
- 前端 UI 的 3 個實例(埠 443)。
- 後端資料庫的1個實例(埠80)。
根據上表,Jane 必須在 Jane 的子網中保留總計 19 個 IP 位址:
- 叢集 A 中 AKS Arc 節點 VM 的 8 個 IP 位址(每個 K8s 節點 VM 一個 IP)。
- 叢集 B 中 AKS Arc 節點 VM 的 4 個 IP 位址(每個 K8s 節點 VM 一個 IP)。
- 2 個用於執行 AKS Arc 升級作業的 IP 位址(每個 AKS Arc 叢集一個 IP 位址)。
- AKS Arc 控制平面的 2 個 IP 位址(每個 AKS Arc 叢集一個 IP 位址)
- Kubernetes 服務的 3 個 IP 位址(每個前端 UI 實例有一個 IP 位址,因為它們全都使用相同的埠。只要後端資料庫使用不同的埠,就可以使用三個IP位址中的任何一個。
繼續進行此範例,並將它新增至下表,您會得到:
參數 | IP 位址數目 | 如何和何處進行此保留 |
---|---|---|
AKS Arc VM、K8s 版本升級和控制平面IP | 保留16個IP位址 | 透過 Azure 本機邏輯網路中 IP 集區進行此保留。 |
負載平衡器 IP | 3 個 Kubernetes 服務的 IP 位址,適用於 Jane 的投票應用程式。 | 當您在叢集 A 上安裝負載平衡器時,會使用這些 IP 位址。您可以使用 MetalLB Arc 擴充功能,或自備第三方負載平衡器。 請確定此IP位於與Arc邏輯網路相同的子網中,但在Arc VM邏輯網路中定義的IP集區之外。 |
Kubernetes 叢集和應用程式的IP位址保留範例 CLI 命令
本節說明 Jane 針對她的案例執行的命令集。 首先,使用至少 16 個 IP 位址的 IP 集區建立邏輯網路。 我們已建立具有 20 個 IP 位址的 IP 集區,以提供在第 N 天調整的選項。如需邏輯網路中參數選項的詳細資訊,請參閱 az stack-hci-vm network lnet create
:
$ipPoolStart = "10.220.32.18"
$ipPoolEnd = "10.220.32.37"
az stack-hci-vm network lnet create --subscription $subscription --resource-group $resource_group --custom-location $customLocationID --name $lnetName --vm-switch-name $vmSwitchName --ip-allocation-method "Static" --address-prefixes $addressPrefixes --gateway $gateway --dns-servers $dnsServers --ip-pool-start $ipPoolStart --ip-pool-end $ipPoolEnd
接下來,使用先前的邏輯網路建立 AKS Arc 叢集:
az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $lnetName --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys
現在,您可以在與 Arc VM 邏輯網路相同的子網中,使用 3 個 IP 位址的 IP 集區來啟用 MetalLB 負載平衡器。 如果您的應用程式需要增加,您可以稍後新增更多IP集區。 如需詳細需求,請參閱 MetalLB Arc 延伸模組概觀。
az k8s-runtime load-balancer create --load-balancer-name $lbName --resource-uri subscriptions/$subscription/resourceGroups/$resource_group/providers/Microsoft.Kubernetes/connectedClusters/metallb-demo --addresses 10.220.32.47-10.220.32.49 --advertise-mode ARP
AKS 叢集和 Arc VM 的 LNET 考慮
Azure 本機上的邏輯網路由 AKS 叢集和 Arc VM 使用。 您可以使用下列 2 種方式之一來設定邏輯網路:
- 在 AKS 與 Arc VM 之間共用邏輯網路。
- 定義 AKS 叢集和 Arc VM 的個別邏輯網路。
在 Azure 本機上的 AKS 與 Arc VM 之間共用邏輯網路,可提供簡化通訊、節省成本以及簡化網路管理的優點。 不過,此方法也會帶來潛在的挑戰,例如資源爭用、安全性風險,以及疑難解答的複雜性。
準則 | 共用邏輯網路 | 定義個別的邏輯網路 |
---|---|---|
設定複雜度 | 使用單一網路進行更簡單的設定,減少設定複雜度。 | 更複雜的設定,因為您需要為 VM 和 AKS 叢集設定多個邏輯網路。 |
延展性 | Arc VM 和 AKS 叢集共用網路資源時的潛在延展性限制。 | 因為網路資源會分開,而且可以獨立調整,因此更具可調整性。 |
網路原則管理 | 使用一組網路原則更容易管理,但更難隔離工作負載。 | 更容易隔離工作負載,因為每個邏輯網路可以套用個別的原則。 |
安全性考量 | 如果未適當分割,則增加跨通訊弱點的風險。 | 更好的安全性,因為每個網路都可以更嚴格地分割和隔離。 |
網路失敗的影響 | 共用網路中失敗可同時影響 AKS 和 Arc VM。 | 一個網路中失敗只會影響該網路內的工作負載,進而降低整體風險。 |
Pod CIDR 和服務 CIDR 的 IP 位址範圍配置
本節描述 Kubernetes 用於叢集內 Pod 和服務通訊的 IP 位址範圍。 這些IP位址範圍會在AKS叢集建立程式期間定義,並用來將唯一IP位址指派給叢集內的Pod和服務。
Pod 網路 CIDR
Pod 網路 CIDR 是 Kubernetes 用來將唯一 IP 位址指派給 Kubernetes 叢集中執行的個別 Pod 的 IP 位址範圍。 每個 Pod 都會在此範圍內取得自己的 IP 位址,讓 Pod 彼此通訊,並與叢集內的服務通訊。 在 AKS 中,Pod IP 位址會透過 VXLAN 模式的 Calico CNI 指派。 Calico VXLAN 有助於建立 重疊網路,其中 Pod 的 IP 位址(來自 Pod 網路 CIDR)會虛擬化並透過實體網路進行通道。 在此模式中,每個 Pod 都會從 Pod 網路 CIDR 指派 IP 位址,但實體網路上無法直接路由傳送此 IP 位址。 相反地,它會封裝在網路封包內,並透過基礎實體網路傳送至另一個節點上的目的地 Pod。
AKS 為 Pod 網路 CIDR 提供 10.244.0.0/16 的預設值。 AKS 支援 Pod 網路 CIDR 的自訂。 您可以在建立 AKS 叢集時使用 --pod-cidr
參數來設定自己的值。 請確定 CIDR IP 範圍夠大,足以容納每個節點和跨 Kubernetes 叢集的 Pod 數目上限。
服務網路 CIDR
服務網路 CIDR 是保留給 Kubernetes 服務的 IP 位址範圍,例如叢集中的 LoadBalancers、ClusterIP 和 NodePort。 Kubernetes 支援下列服務類型:
- ClusterIP:預設服務類型,這會公開叢集內的服務。 從服務網路 CIDR 指派的 IP 只能在 Kubernetes 叢集中存取。
- NodePort:在每個節點 IP 位址的特定埠上公開服務。 ClusterIP 仍會在內部使用,但外部存取是透過節點IP和特定埠。
- LoadBalancer:此類型會建立雲端提供者管理的負載平衡器,並在外部公開服務。 雲端提供者通常會管理外部IP指派,而內部ClusterIP會保留在服務網路 CIDR 內。
AKS 為服務網路 CIDR 提供 10.96.0.0/12 的預設值。 AKS 目前不支援服務網路 CIDR 的自定義。