搭配 Azure Kubernetes Service (AKS) 使用內部負載平衡器 (部分機器翻譯)
您可以建立和使用內部負載平衡器,藉以限制存取您在 Azure Kubernetes Service (AKS) 中的應用程式。 內部負載平衡器沒有公用 IP,而且只能讓可連線到私人 IP 的應用程式存取 Kube 服務。 這些應用程式可以位於相同的 VNet 內,也可以透過 VNet 對等互連位於另一個 VNet 中。 本文說明如何建立內部負載平衡器並搭配 AKS 使用。
重要
Basic Load Balancer 將於 2025 年 9 月 30 日淘汰。 如需詳細資訊,請參閱官方公告。 如果您目前使用基本Load Balancer,請務必在淘汰日期之前升級至 Standard Load Balancer。 如需升級的指引,請流覽 從基本Load Balancer升級 - 指引。
開始之前
- 此文章假設您目前具有 AKS 叢集。 如果您需要 AKS 叢集,則可以使用 Azure CLI、Azure PowerShell 或 Azure 入口網站予以建立。
- 您需要 Azure CLI 版本 2.0.59 或更新版本。 執行
az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。 - 如果您要使用現有的子網路或資源群組,AKS 叢集主體需要網路資源的管理權限。 如需詳細資訊,請參閱在 AKS 中以自己的 IP 位址範圍使用 kubenet 網路,或是在 AKS 中設定 Azure CNI 網路。 若要設定負載平衡器使用不同子網路中的 IP 位址,請確定 AKS 叢集身分識別也有該子網路的讀取存取。
- 如需權限的詳細資訊,請參閱將 AKS 存取權委派給其他 Azure 資源。
建立內部負載平衡器
使用服務類型
LoadBalancer
和azure-load-balancer-internal
註釋建立名為internal-lb.yaml
的服務資訊清單。apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
使用
kubectl apply
命令部署內部負載平衡器。 此命令會在節點資源群組中建立Azure 負載平衡器會,而且節點資源群組連線到與 AKS 叢集相同的虛擬網路。kubectl apply -f internal-lb.yaml
使用
kubectl get service
命令檢視服務詳細資料。kubectl get service internal-app
內部負載平衡器的 IP 位址會顯示在
EXTERNAL-IP
資料行中,如下列範例輸出所示。 在此內容中,外部是指負載平衡器的外部介面。 這並不表示這會接收公用的外部 IP 位址。 此 IP 位址會從與 AKS 叢集相同的子網路動態指派。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.248.59 10.240.0.7 80:30555/TCP 2m
指定 IP 位址
當您指定負載平衡器的 IP 位址時,指定的 IP 位址必須位於與 AKS 叢集相同的虛擬網路,但不可已指派給虛擬網路中的另一個資源。 例如,不應使用為 AKS 叢集內 Kube 子網路所指定範圍內的 IP 位址。 使用已指派給相同虛擬網路中另一個資源的 IP 位址,可能導致負載平衡器發生問題。
您可以使用 az network vnet subnet list
Azure CLI 命令或 Get-AzVirtualNetworkSubnetConfig
PowerShell Cmdlet 取得虛擬網路中的子網路。
如需子網路的詳細資訊,請參閱新增具有唯一子網路的節點集區。
如果您想要搭配負載平衡器使用特定的 IP 位址,您有兩個選項:設定服務註釋,或將 LoadBalancerIP 屬性新增至負載平衡器 YAML 資訊清單。
重要
將 LoadBalancerIP 屬性新增至負載平衡器 YAML 資訊清單即將淘汰下列上游 Kube。 雖然目前的使用量將維持不變,且現有服務繼續運作,不需修改,但我們仍強烈建議設定服務註釋。 如需服務批注的詳細資訊,請參閱 Azure LoadBalancer 支援的批注。
設定服務註釋,讓 IPv4 位址使用
service.beta.kubernetes.io/azure-load-balancer-ipv4
,讓 IPv6 位址使用service.beta.kubernetes.io/azure-load-balancer-ipv6
。apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-ipv4: 10.240.0.25 service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
使用
kubectl get service
命令檢視服務詳細資料。kubectl get service internal-app
EXTERNAL-IP
資料列中的 IP 位址應該反映您指定的 IP 位址,如下列範例輸出所示:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.0.184.168 10.240.0.25 80:30225/TCP 4m
如需在不同子網中設定負載平衡器的詳細資訊,請參閱 指定不同的子網。
將 Azure Private Link 服務連線至內部負載平衡器
開始之前
- 您需要 Kube 1.22.x 版或更新版本。
- 您需要具有 VNet 和子網路的現有資源群組。 此資源群組是您建立私人端點的位置。 如果您沒有這些資源,請參閱建立虛擬網路和子網路。
建立 Private Link 服務連線
使用服務類型
LoadBalancer
以及azure-load-balancer-internal
和azure-pls-create
註釋,建立名為internal-lb-pls.yaml
的服務資訊清單。 如需其他選項,請參閱 Azure Private Link 服務整合設計文件。apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-pls-create: "true" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
使用
kubectl apply
命令部署內部負載平衡器。 此命令會在節點資源群組中建立Azure 負載平衡器會,而且節點資源群組連線到與 AKS 叢集相同的虛擬網路。 系統也會建立 Private Link 服務物件,連線到與 Kube 服務相關聯的 Load Balancer 前端 IP 設定。kubectl apply -f internal-lb-pls.yaml
使用
kubectl get service
命令檢視服務詳細資料。kubectl get service internal-app
內部負載平衡器的 IP 位址會顯示在
EXTERNAL-IP
資料行中,如下列範例輸出所示。 在此內容中,外部是指負載平衡器的外部介面。 這並不表示這會接收公用的外部 IP 位址。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE internal-app LoadBalancer 10.125.17.53 10.125.0.66 80:30430/TCP 64m
使用
az network private-link-service list
命令檢視 Private Link Service 物件的詳細資料。# Create a variable for the node resource group AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv) # View the details of the Private Link Service object az network private-link-service list -g $AKS_MC_RG --query "[].{Name:name,Alias:alias}" -o table
您的輸出看起來應類似下列的範例輸出:
Name Alias -------- ------------------------------------------------------------------------- pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
建立 Private Link 服務的私人端點
私人端點可讓您透過您建立的 Private Link 服務,以私人方式連線到 Kube 服務物件。
使用
az network private-endpoint create
命令建立私人端點。# Create a variable for the private link service AKS_PLS_ID=$(az network private-link-service list -g $AKS_MC_RG --query "[].id" -o tsv) # Create the private endpoint $ az network private-endpoint create \ -g myOtherResourceGroup \ --name myAKSServicePE \ --vnet-name myOtherVNET \ --subnet pe-subnet \ --private-connection-resource-id $AKS_PLS_ID \ --connection-name connectToMyK8sService
透過註釋進行 PLS 自訂
您可以使用下列註解來自定義 PLS 資源:
註釋 | 值 | Description | 是必要欄位 | 預設 |
---|---|---|---|---|
service.beta.kubernetes.io/azure-pls-create |
"true" |
布林值,指出是否需要建立 PLS。 | 必要 | |
service.beta.kubernetes.io/azure-pls-name |
<PLS name> |
字串,指定要建立的 PLS 資源的名稱。 | 選擇性 | "pls-<LB frontend config name>" |
service.beta.kubernetes.io/azure-pls-resource-group |
Resource Group name |
字串,指定將建立 PLS 資源的資源群組名稱 | 選擇性 | MC_ resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
字串,指出要部署 PLS 的子網路。 此子網路必須存在於與後端集區相同的 VNet 中。 PLS NAT IP 會配置在此子網路內。 | 選擇性 | 如果是 service.beta.kubernetes.io/azure-load-balancer-internal-subnet ,則會使用這個 ILB 子網路。 否則,會使用設定檔的預設子網路。 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count |
[1-8] |
要配置的私人 NAT IP 總數。 | 選擇性 | 1 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address |
"10.0.0.7 ... 10.0.0.10" |
將要配置的靜態 IPv4 IP 列出的空格分隔清單。 (目前不支援 IPv6。)IP 總數不應大於 service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count 中指定的 IP 計數。 如果指定的 IP 較少,則會動態配置其餘的 IP。 清單中的第一個 IP 會設定為 Primary 。 |
選擇性 | 全部 IP 都會動態配置。 |
service.beta.kubernetes.io/azure-pls-fqdns |
"fqdn1 fqdn2" |
將與 fqdns 相關聯的 PLS 列出的空格分隔清單。 | 選擇性 | [] |
service.beta.kubernetes.io/azure-pls-proxy-protocol |
"true" 或 "false" |
布林值,指出是否應該在 PLS 上啟用 TCP PROXY 通訊協定,以傳遞連線資訊,包括連結識別碼和來源 IP 位址。 請注意,後端服務「必須」支援 PROXY 通訊協定,否則連線將會失敗。 | 選擇性 | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" 或 "*" |
顯示將私人連結服務的 Azure 訂用帳戶識別碼列出的空格分隔清單。 使用 "*" 向全部子項目公開 PLS (限制最少)。 |
選擇性 | 空清單 [] 僅指出角色型存取控制:只有您目錄中具備角色型存取控制權限的人,才能使用此私人連結服務。 (限制最多) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Azure 訂用帳戶識別碼的空格分隔清單。 因此從列出的訂用帳戶到 PLS 的 PE 連線要求能夠自動核准。 只有在可見性設定為「*」時,才能運作。 | 選擇性 | [] |
使用私人網路
當您建立 AKS 叢集時,您可以指定進階網路設定。 這些設定可讓您將叢集部署到現有的 Azure 虛擬網路和子網路。 例如,您可以將 AKS 叢集部署到已連線到內部部署環境的私人網路,並執行只能在內部存取的服務。
如需詳細資訊,請參閱使用 Kubenet 或 Azure CNI 設定您自己的虛擬網路子網路。
不需要對於先前步驟進行任何變更,即可部署在 AKS 叢集中使用私人網路的內部負載平衡器。 負載平衡器已建立於與您的 AKS 叢集相同的資源群組中,但會連線到您的私人虛擬網路和子網路,如下列範例所示:
$ kubectl get service internal-app
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
internal-app LoadBalancer 10.1.15.188 10.0.0.35 80:31669/TCP 1m
注意
AKS 叢集使用的叢集身分識別在您虛擬網路內的子網路上至少必須包含虛擬網路資源上的網路參與者角色。 您可以使用 az aks show
命令來檢視叢集身分識別,例如 az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity"
。 您可以使用 az role assignment create
命令來指定網路參與者角色,例如 az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor"
。
如果您想要改為定義自訂角色,您需要下列權限:
Microsoft.Network/virtualNetworks/subnets/join/action
Microsoft.Network/virtualNetworks/subnets/read
如需詳細資訊,請參閱新增、變更或刪除虛擬網路子網路。
指定不同的子網路
將
azure-load-balancer-internal-subnet
註釋新增至您的服務,以指定負載平衡器的子網路。 指定的子網路必須位於與您的 AKS 叢集相同的虛擬網路中。 部署後,負載平衡器EXTERNAL-IP
位址會是所指定子網路的一部分。apiVersion: v1 kind: Service metadata: name: internal-app annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "apps-subnet" spec: type: LoadBalancer ports: - port: 80 selector: app: internal-app
刪除負載平衡器
刪除全部服務時,會刪除負載平衡器。
您也可以如同刪除任何 Kubernetes 資源 (例如 kubectl delete service internal-app
) 一樣,直接刪除該服務,這也會刪除基礎的 Azure 負載平衡器。
下一步
如需深入了解 Kubernetes 服務,請參閱 Kubernetes 服務文件。