在 Azure 運算子連接點 Kubernetes 服務中設定服務負載平衡器
在本文中,您將了解如何在 Nexus Kubernetes 叢集中設定服務負載平衡器。 負載平衡器可讓外部服務存取在叢集內執行的服務。 本指南的重點在於設定層面,隨附的範例將協助您了解程序。 遵循本指南的指示,即可在您的 Nexus Kubernetes 叢集中有效地設定服務負載平衡器。
必要條件
在繼續進行本操作指南之前,建議您:
- 參閱連接點 Kubernetes 叢集的快速入門指南,以取得完整的概觀和相關步驟。
- 確定您符合列出的必要條件,以確保能夠順暢實作指南。
- 了解 Kubernetes 概念,包括部署和服務。
- 連絡網路管理員,以取得可用於負載平衡器 IP 集區的 IP 位址範圍。
限制
- IP 集區設定是不可變的:一經設定,即無法在 Nexus Kubernetes 叢集中修改。
- IP 集區名稱開頭必須是小寫字母或數字,結尾且必須是小寫字母或數字。
- IP 集區名稱不可超過 63 個字元,以免發生潛在問題或違反限制。
- IP 位址集區不可與現有的 POD CIDR、服務 CIDR 或 CNI 首碼重疊,以免叢集內發生衝突和網路問題。
重要
以上是建立新的 Nexus Kubernetes 叢集時適用的指示。 請勿將 Bicep 範本套用至現有的叢集,因為 IP 集區設定是不可變的。 使用 IP 集區設定建立叢集後,即無法修改。
設定選項
設定服務負載平衡器的 IP 位址集區之前,請務必先了解各種可用的設定選項。 這些選項可讓您根據個人需求定義 IP 位址集區的行為和參數。
接著,我們將探索 IP 位址集區的設定選項。
必要參數
IP 位址集區設定必須有兩個欄位:addresses
和 name
。 這些欄位對於定義 IP 位址範圍和識別集區而言至關重要。
addresses
欄位會指定可在集區內的配置使用的 IP 位址範圍清單。 您可以將每個範圍定義為 CIDR 格式的子網路。 請避免使用單一 IP 位址,例如 IPv4 的 /32 和 IPv6 的 /128。name
欄位是 IP 位址集區的唯一識別碼。 這有助於將集區與 BGP (邊界閘道協定) 公告產生關聯,以利在叢集內進行有效的通訊。
注意
若要讓 Kubernetes LoadBalancer
服務有雙堆疊位址,請確定 IP 集區設定同時包含 IPv4 和 IPv6 CIDR。
選擇性參數
除了必要的欄位外,還有選擇性欄位可供進一步自訂 IP 位址集區設定。
autoAssign
欄位會決定是否從集區自動指派 IP 位址。 此欄位是預設值為True
的string
類型。 您可以根據喜好設定將其設定為True
或False
。onlyUseHostIps
欄位會控制是否使用集區內結尾為.0
和.255
的 IP 位址。 啟用此選項時,會限用.1
與.254
(含此二者) 之間的 IP 位址,但排除保留的網路和廣播位址。
IP 位址集區設定的 Bicep 範本參數
下列 JSON 程式碼片段顯示在 Bicep 範本中設定 IP 位址集區所需的參數。
"ipAddressPools": {
"value": [
{
"addresses": ["<IP>/<CIDR>"],
"name": "<pool-name>",
"autoAssign": "True", /* "True"/"False" */
"onlyUseHostIps": "True" /* "True"/"False" */
}
]
}
若要將 IP 集區設定新增至叢集,必須更新您在快速入門期間建立的 kubernetes-deploy-parameters.json
檔案。 請根據您所需的設定,將此檔案中包含 IP 集區設定。
將 IP 集區設定新增至參數檔案之後,即可繼續部署 Bicep 範本。 此動作會使用指定的 IP 位址集區設定來設定新的叢集,讓您如預期地使用 IP 集區。
依照這些指示,您可以使用所需的 IP 集區設定建立新的 Nexus Kubernetes 叢集,並將 IP 位址集區用於叢集服務。
範例參數
此參數檔案旨在與快速入門指南 Bicep 範本搭配用來建立已啟用 BGP 負載平衡器的叢集。 其中包含使用 BGP 負載平衡器功能來設定叢集所需的組態設定。 搭配使用此參數檔案與 Bicep 範本,可以建立具有所需 BGP 負載平衡器功能的叢集。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"kubernetesClusterName":{
"value": "lb-test-cluster"
},
"adminGroupObjectIds": {
"value": [
"00000000-0000-0000-0000-000000000000"
]
},
"cniNetworkId": {
"value": "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/l3Networks/<l3Network-name>"
},
"cloudServicesNetworkId": {
"value": "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/cloudServicesNetworks/<csn-name>"
},
"extendedLocation": {
"value": "/subscriptions/<subscription_id>/resourceGroups/<managed_resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-location-name>"
},
"location": {
"value": "eastus"
},
"sshPublicKeys": {
"value": [
{
"keyData": "ssh-rsa AAAAB..."
},
{
"keyData": "ssh-rsa AAAAC..."
}
]
},
"ipAddressPools": {
"value": [
{
"addresses": ["<IP>/<CIDR>"],
"name": "<pool-name>",
"autoAssign": "True",
"onlyUseHostIps": "True"
}
]
}
}
}
注意
如果您想要建立 DualStack 服務,請確定位址集區同時包含 IPv4 CIDR 和 IPv6 CIDR。 這可讓您在負載平衡器設定中同時支援 IPv4 和 IPv6 位址。
範例:服務的靜態 IP 位址配置
若要為服務配置靜態 IP 位址,您可以使用下列命令。
建立部署
kubectl create deployment nginx --image=nginx --port 80
靜態 IP 配置 (LoadBalancerIP)
kubectl expose deployment nginx \
--name nginx-loadbalancer-pool1-static \
--type LoadBalancer \
--load-balancer-ip <IP from pool-1>
將 <IP from pool-1>
取代為 IP 集區中所需的 IP 位址。
靜態 IP 配置 (ExternalIP)
kubectl expose deployment nginx \
--name nginx-clusterip-pool1-static \
--type ClusterIP \
--external-ip <IP from pool-1>
將 <IP from pool-1>
取代為 IP 集區中所需的 IP 位址。
範例:特定 IP 集區中用於服務的 IP 位址配置
若要從特定 IP 集區為服務配置 IP 位址,您可以使用下列命令。
kubectl expose deployment nginx \
--name nginx-loadbalancer-pool2-auto \
--type LoadBalancer \
--overrides '{"metadata":{"annotations":{"metallb.universe.tf/address-pool":"pool-2"}}}'
此命令會從 IP 集區 pool-2
將 IP 位址指派給服務。 請視需要調整集區名稱。 在嘗試這些範例之前,請確定您已建立具有兩個不同 IP 位址集區的 Nexus Kubernetes 叢集。 如果您尚未這麼做,請依照必要的步驟建立叢集並據以設定 IP 集區。
注意
IP 位址集區名稱需區分大小寫。 指定集區名稱時,請務必使用正確的大小寫。
下一步
您可以嘗試使用新設定的負載平衡器在 Nexus Kubernetes 叢集中部署網路功能 (NF)。 此設定可讓您測試負載平衡功能,並觀察流量在 NF 執行個體間的分布情形。