快速入門:為容器 ALB 控制器部署應用程式閘道
ALB 控制器負責將 Kubernetes 內的閘道 API 和輸入 API 組態轉譯為容器應用程式閘道內的負載平衡規則。 下列指南會逐步解說將 ALB 控制器佈建到新的或現有 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。 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-controller 時,它會部署到 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.3.7 \ --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 命名空間和kubectl get pod -A -l app=alb-controller
ALB 控制器執行helm list
命令。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.3.7 \ --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
您應該看到下列內容:
NAME 就緒 狀態 重新啟動 年齡 alb-controller-bootstrap-6648c5d5c-hrmpc 1/1 執行中 0 4d6h alb-controller-6648c5d5c-sdd9t 1/1 執行中 0 4d6h alb-controller-6648c5d5c-au234 1/1 執行中 0 4d6h 確認您的叢集上已安裝 GatewayClass
azure-application-lb
: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