如何让KEDA使用应用程序的ServiceAccount而非默认账户?
解决KEDA使用自定义托管ID的问题
1. 卸载默认KEDA实例
用az aks update --enable-keda安装的KEDA会绑定默认的kube-system/keda-operator服务账号,先卸载该实例:
az aks update --resource-group myResourceGroup --name myAKSCluster --disable-keda
2. 确认应用的ServiceAccount
确保你的应用已存在对应的ServiceAccount(比如app-namespace/app-sa),如果没有,创建一个:
apiVersion: v1 kind: ServiceAccount metadata: name: app-sa namespace: app-namespace
执行应用命令:
kubectl apply -f app-sa.yaml
3. 关联ServiceAccount与自定义托管ID
假设你的托管ID名称为app-managed-identity,按以下步骤配置联邦身份凭证:
- 获取托管ID资源ID:
MI_RESOURCE_ID=$(az identity show --resource-group myResourceGroup --name app-managed-identity --query id -o tsv)
- 获取AKS集群的OIDC发行者URL:
OIDC_ISSUER=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query oidcIssuerProfile.issuerUrl -o tsv)
- 创建联邦身份凭证,绑定ServiceAccount与托管ID:
az identity federated-credential create \ --name keda-app-federated-cred \ --identity-name app-managed-identity \ --resource-group myResourceGroup \ --issuer ${OIDC_ISSUER} \ --subject system:serviceaccount:app-namespace:app-sa \ --audience api://AzureADTokenExchange
4. 用Helm安装KEDA并指定自定义ServiceAccount
先添加并更新KEDA Helm仓库:
helm repo add kedacore https://kedacore.github.io/charts helm repo update
安装KEDA时,禁用默认ServiceAccount创建,指定你的应用ServiceAccount:
helm install keda kedacore/keda \ --namespace kube-system \ --set operator.serviceAccount.create=false \ --set operator.serviceAccount.name=app-sa \ --set operator.serviceAccount.namespace=app-namespace
5. 验证配置
- 检查KEDA Operator Pod状态:
kubectl get pods -n kube-system | grep keda-operator
- 查看Operator日志,确认无AADSTS700213错误:
kubectl logs -n kube-system <keda-operator-pod-name>
- 测试ScaledObject触发逻辑,验证自动扩缩容正常工作。
内容的提问来源于stack exchange,提问作者Ricardo de Vries
相关产品推荐
相关产品推荐

