ALB 控制器負責將 Kubernetes 內的閘道 API 和輸入 API 組態轉譯為容器應用程式閘道內的負載平衡規則。 下列指南會逐步解說將 ALB 控制器布建到新的或現有的 Azure Kubernetes Service (AKS) 叢集所需的步驟。
先決條件
您需要先完成下列工作,才能在 Azure 上部署適用於容器的應用程式閘道,並在叢集上安裝 ALB 控制器:
準備您的 Azure 訂用帳戶和
az-cli用戶端。# Sign in to your Azure subscription. SUBSCRIPTION_ID='<your subscription id>' az login az account set --subscription $SUBSCRIPTION_ID # Register required resource providers on Azure. az provider register --namespace Microsoft.ContainerService az provider register --namespace Microsoft.Network az provider register --namespace Microsoft.NetworkFunction az provider register --namespace Microsoft.ServiceNetworking # Install Azure CLI extensions. az extension add --name alb為您的工作負載設定 AKS 叢集。
附註
AKS 叢集必須位於 可使用容器應用程式閘道的區域 ,AKS 叢集應該使用 Azure CNI 或 Azure CNI 重疊。 AKS 叢集應該已啟用工作負載身分識別功能。 了解如何在現有的 AKS 叢集上啟用工作負載身分識別。
如果使用現有的叢集,請確定您在 AKS 叢集上啟用工作負載身分識別支援。 工作負載身分識別可透過下列命令啟用:
AKS_NAME='<your cluster name>' RESOURCE_GROUP='<your resource group name>' az aks update -g $RESOURCE_GROUP -n $AKS_NAME --enable-oidc-issuer --enable-workload-identity --no-wait如果您沒有現有的叢集,請使用下列命令來建立已啟用 Azure CNI 和工作負載身分識別的新 AKS 叢集。
AKS_NAME='<your cluster name>' RESOURCE_GROUP='<your resource group name>' LOCATION='northeurope' VM_SIZE='<the size of the vm in AKS>' # The size needs to be available in your location az group create --name $RESOURCE_GROUP --location $LOCATION az aks create \ --resource-group $RESOURCE_GROUP \ --name $AKS_NAME \ --location $LOCATION \ --node-vm-size $VM_SIZE \ --network-plugin azure \ --enable-oidc-issuer \ --enable-workload-identity \ --generate-ssh-key安裝 Helm
Helm 是用來安裝 ALB 控制器的開放原始碼封裝工具。
附註
Helm 已在 Azure Cloud Shell 中提供。 如果您使用 Azure Cloud Shell,則不需要額外的 Helm 安裝。
您也可以使用下列步驟,在執行 Windows 或 Linux 的本機裝置上安裝 Helm。 請確定您已安裝最新版的 helm。
如需各種安裝選項,請參閱安裝指示。 同樣地,如果您的 Windows 版本已安裝 Windows 套件管理員 winget ,您可以執行下列命令:
winget install helm.helm
安裝 ALB 控制器
建立 ALB 控制器的使用者受控識別,並將身分識別同盟為工作負載身分識別,以在 AKS 叢集中使用。
RESOURCE_GROUP='<your resource group name>' AKS_NAME='<your aks cluster name>' IDENTITY_RESOURCE_NAME='azure-alb-identity' mcResourceGroup=$(az aks show --resource-group $RESOURCE_GROUP --name $AKS_NAME --query "nodeResourceGroup" -o tsv) mcResourceGroupId=$(az group show --name $mcResourceGroup --query id -otsv) echo "Creating identity $IDENTITY_RESOURCE_NAME in resource group $RESOURCE_GROUP" az identity create --resource-group $RESOURCE_GROUP --name $IDENTITY_RESOURCE_NAME principalId="$(az identity show -g $RESOURCE_GROUP -n $IDENTITY_RESOURCE_NAME --query principalId -otsv)" echo "Waiting 60 seconds to allow for replication of the identity..." sleep 60 echo "Apply Reader role to the AKS managed cluster resource group for the newly provisioned identity" az role assignment create --assignee-object-id $principalId --assignee-principal-type ServicePrincipal --scope $mcResourceGroupId --role "acdd72a7-3385-48ef-bd42-f606fba81ae7" # Reader role echo "Set up federation with AKS OIDC issuer" AKS_OIDC_ISSUER="$(az aks show -n "$AKS_NAME" -g "$RESOURCE_GROUP" --query "oidcIssuerProfile.issuerUrl" -o tsv)" az identity federated-credential create --name "azure-alb-identity" \ --identity-name "$IDENTITY_RESOURCE_NAME" \ --resource-group $RESOURCE_GROUP \ --issuer "$AKS_OIDC_ISSUER" \ --subject "system:serviceaccount:azure-alb-system:alb-controller-sa"ALB 控制器需要一個名稱為
azure-alb-identity的同盟認證。 不支援任何其他同盟認證名稱。附註
建立後立即指派受控識別可能會導致 principalId 不存在的錯誤。 在委派身分識別之前,允許經過大約一分鐘的時間,讓身分識別在 Microsoft Entra ID 中複寫。
使用 Helm 安裝 ALB 控制器
針對新的部署
若要安裝 ALB 控制器,請使用
helm install命令。當
helm install命令執行時,它會將 helm 圖表部署到預設命名空間。 部署alb控制器時,它會部署到azure-alb-system命名空間。 您可以視需要個別覆寫這兩個命名空間。 若要覆寫 Helm 圖表部署至的命名空間,您可以指定 --namespace (或 -n) 參數。 若要覆寫 alb-controller 所使用的azure-alb-system命名空間,您可以在安裝 (--set albController.namespace) 期間設定 albController.namespace 屬性。 如果未定義--namespace或--set albController.namespace參數,系統則會將預設命名空間用於 helm 圖表,而azure-alb-system命名空間會用於 ALB 控制器元件。 最後,如果 helm 圖表資源的命名空間尚未定義,請確定--create-namespace參數也會與--namespace或-n參數一起指定。您可以執行下列命令來安裝 ALB 控制器:
HELM_NAMESPACE='<namespace for deployment>' CONTROLLER_NAMESPACE='azure-alb-system' az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME helm install alb-controller oci://mcr.microsoft.com/application-lb/charts/alb-controller \ --namespace $HELM_NAMESPACE \ --version 1.8.12 \ --set albController.namespace=$CONTROLLER_NAMESPACE \ --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)針對現有的部署
您可以執行下列命令來升級 ALB:
附註
在升級期間,請確定在先前安裝的安裝中覆寫命名空間時,請指定
--namespace或--set albController.namespace參數。 若要判斷先前使用的命名空間,您可以針對 helm 命名空間和helm listALB 控制器執行kubectl get pod -A -l app=alb-controller命令。HELM_NAMESPACE='<your cluster name>' CONTROLLER_NAMESPACE='azure-alb-system' az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME helm upgrade alb-controller oci://mcr.microsoft.com/application-lb/charts/alb-controller \ --namespace $HELM_NAMESPACE \ --version 1.8.12 \ --set albController.namespace=$CONTROLLER_NAMESPACE \ --set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
確認 ALB 控制器安裝
確認 ALB 控制器 Pod 已就緒:
kubectl get pods -n azure-alb-system您應該會看到下列輸出:
名字 就緒 狀態 重新啟動 AGE alb-controller-6648c5d5c-sdd9t 1/1 執行中 0 4天6小時 alb-controller-6648c5d5c-au234 1/1 執行中 0 4天6小時 確認您的叢集上已安裝 GatewayClass
azure-alb-external:kubectl get gatewayclass azure-alb-external -o yaml您應該會看到 GatewayClass 具有讀取有效 GatewayClass 的條件。 此條件表示已設定預設 GatewayClass,且參考此 GatewayClass 的任何閘道資源都會由 ALB 控制器自動管理。
apiVersion: gateway.networking.k8s.io/v1beta1 kind: GatewayClass metadata: creationTimestamp: "2023-07-31T13:07:00Z" generation: 1 name: azure-alb-external resourceVersion: "64270" uid: 6c1443af-63e6-4b79-952f-6c3af1f1c41e spec: controllerName: alb.networking.azure.io/alb-controller status: conditions: - lastTransitionTime: "2023-07-31T13:07:23Z" message: Valid GatewayClass observedGeneration: 1 reason: Accepted status: "True" type: Accepted
後續步驟
既然您已在叢集上成功安裝 ALB 控制器,您可以在 Azure 中佈建適用於容器的應用程式閘道資源。
下一個步驟是將您的 ALB 控制器連結至適用於容器的應用程式閘道。 建立此連結的方式取決於您的部署策略。
管理適用於容器的應用程式閘道有兩種部署策略:
-
自備 (BYO) 部署:在此部署策略中,容器資源、關聯資源和前端資源的應用程式閘道的部署和生命週期,是透過 Azure 入口網站、CLI、PowerShell、Terraform 等假定的,並在 Kubernetes 內的設定中參考。
- 若要使用 BYO 部署,請參閱 建立容器的應用程式閘道 - 自備部署。
-
由 ALB 控制器管理:在此部署策略中,部署在 Kubernetes 中的 ALB 控制器負責容器資源及其子資源的應用程式閘道生命週期。 ALB 控制器會在叢集上定義 ApplicationLoadBalancer 自訂資源時,建立適用於容器的應用程式閘道資源。 服務生命週期是以自訂資源的生命週期為基礎。
- 若要使用 ALB 受控部署,請參閱 建立 ALB 控制器所管理容器的應用程式閘道。
解除安裝適用於容器的應用程式閘道和 ALB 控制器
如果您想要卸載 ALB 控制器,請完成下列步驟。
刪除適用於容器的應用程式閘道,您可以刪除包含適用於容器的應用程式閘道資源的資源群組:
az group delete --resource-group $RESOURCE_GROUP從叢集解除安裝 ALB 控制器及其資源,請執行下列命令:
helm uninstall alb-controller kubectl delete ns azure-alb-system kubectl delete gatewayclass azure-alb-external
附註
如果使用不同的命名空間進行 alb-controller 安裝,請確定您在 helm uninstall 命令上指定 -n 參數,以定義要使用的適當命名空間。 例如: helm uninstall alb-controller -n unique-namespace