You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps流水线部署Helm到AKS时遇设备登录提示失败

解决Azure DevOps流水线部署Helm到AKS时的设备登录提示问题

核心原因

尽管已配置服务主体权限,但helm命令默认尝试使用kubeconfig中的用户凭证,而非AzureCLI任务已认证的服务主体身份,从而触发交互式登录请求。

解决方案

1. 用服务主体令牌更新kubeconfig凭证

在AzureCLI任务的脚本中添加获取服务主体访问令牌并更新kubeconfig的步骤,让helm直接使用服务主体身份完成认证:

修改后的AzureCLI任务脚本:

# 获取AKS凭证并覆盖现有配置
az aks get-credentials --resource-group $(AKS_RESOURCE_GROUP) --name $(AKS_CLUSTER_NAME) --file $(KUBECONFIG) --overwrite-existing

# 设置KUBECONFIG环境变量
export KUBECONFIG=$(KUBECONFIG)

# 获取服务主体的AKS访问令牌
TOKEN=$(az account get-access-token --resource=https://management.azure.com/ --query accessToken -o tsv)

# 更新kubeconfig中的集群用户凭证为服务主体令牌
kubectl config set-credentials clusterUser_$(AKS_RESOURCE_GROUP)_$(AKS_CLUSTER_NAME) --token=$TOKEN

# 执行Helm部署
helm upgrade --install $(HELM_RELEASE_NAME) $(HELM_CHART_PATH) --namespace $(HELM_NAMESPACE) --kubeconfig $(KUBECONFIG) --values $(HELM_CHART_PATH)/values.yaml

# 验证部署状态
helm status $(HELM_RELEASE_NAME) --namespace $(HELM_NAMESPACE) --kubeconfig $(KUBECONFIG)

2. 确认服务主体的AKS RBAC权限

确保服务主体拥有AKS集群对应权限:

  • 若需集群级管理员权限,执行:
    az aks show --resource-group $(AKS_RESOURCE_GROUP) --name $(AKS_CLUSTER_NAME) --query id -o tsv | xargs az role assignment create --assignee <服务主体ID> --role "Azure Kubernetes Service Cluster Admin Role" --scope {}
    
  • 若仅需目标命名空间的编辑权限,执行:
    kubectl create rolebinding helm-deploy-binding --clusterrole=edit --serviceaccount=$(HELM_NAMESPACE):default --namespace=$(HELM_NAMESPACE)
    

3. 检查Azure服务连接类型

确保Azure DevOps中的azureSubscription服务连接为服务主体认证类型,而非用户交互式OAuth连接,避免流水线依赖用户登录状态。

修改后的完整流水线YAML片段

pool:
  name: '*'  

variables:
  AKS_RESOURCE_GROUP: '*' 
  AKS_CLUSTER_NAME: '*' 
  KUBECONFIG: $(Build.SourcesDirectory)/kubeconfig
  HELM_RELEASE_NAME: '*'  
  HELM_CHART_PATH: '*'  
  HELM_NAMESPACE: '*' 

stages:
- stage: Deploy
  jobs:
  - job: DeployToAKS
    steps:
    - task: AzureCLI@2
      inputs:
        azureSubscription: '*'
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          # 获取AKS凭证并覆盖现有配置
          az aks get-credentials --resource-group $(AKS_RESOURCE_GROUP) --name $(AKS_CLUSTER_NAME) --file $(KUBECONFIG) --overwrite-existing

          # 设置KUBECONFIG环境变量
          export KUBECONFIG=$(KUBECONFIG)

          # 获取服务主体的AKS访问令牌
          TOKEN=$(az account get-access-token --resource=https://management.azure.com/ --query accessToken -o tsv)

          # 更新kubeconfig中的集群用户凭证为服务主体令牌
          kubectl config set-credentials clusterUser_$(AKS_RESOURCE_GROUP)_$(AKS_CLUSTER_NAME) --token=$TOKEN

          # 执行Helm部署
          helm upgrade --install $(HELM_RELEASE_NAME) $(HELM_CHART_PATH) --namespace $(HELM_NAMESPACE) --kubeconfig $(KUBECONFIG) --values $(HELM_CHART_PATH)/values.yaml

          # 验证部署状态
          helm status $(HELM_RELEASE_NAME) --namespace $(HELM_NAMESPACE) --kubeconfig $(KUBECONFIG)
      displayName: 'Deploy Helm Application to AKS'

内容的提问来源于stack exchange,提问作者My ADO Obsession

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:57:27