共用方式為


在 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 位址集區設定必須有兩個欄位:addressesname。 這些欄位對於定義 IP 位址範圍和識別集區而言至關重要。

  • addresses 欄位會指定可在集區內的配置使用的 IP 位址範圍清單。 您可以將每個範圍定義為 CIDR 格式的子網路。 請避免使用單一 IP 位址,例如 IPv4 的 /32 和 IPv6 的 /128。
  • name 欄位是 IP 位址集區的唯一識別碼。 這有助於將集區與 BGP (邊界閘道協定) 公告產生關聯,以利在叢集內進行有效的通訊。

注意

若要讓 Kubernetes LoadBalancer 服務有雙堆疊位址,請確定 IP 集區設定同時包含 IPv4 和 IPv6 CIDR。

選擇性參數

除了必要的欄位外,還有選擇性欄位可供進一步自訂 IP 位址集區設定。

  • autoAssign 欄位會決定是否從集區自動指派 IP 位址。 此欄位是預設值為 Truestring 類型。 您可以根據喜好設定將其設定為 TrueFalse
  • 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 執行個體間的分布情形。