已配置Azure AD RBAC的AKS的Azure DevOp管道身份验证?

时间:2019-01-02 09:35:51

标签: azure azure-devops azure-active-directory azure-pipelines azure-kubernetes

我们已将Azure Kubernetes群集配置为使用Azure Active Directory RBAC。这意味着在使用kubectl时,我们需要首先以AD用户身份进行身份验证(通常通过通过Web浏览器手动完成设备代码身份验证来完成)。我们几乎完全按照MSDN文章Integrate Azure Active Directory with Azure Kubernetes Service进行了配置。

问题在于,Azure DevOp管道中的Kubernetes构建/发布任务现在也需要此身份验证,例如,当我们运行kubectl apply时:

2019-01-02T08:48:21.2070286Z ##[section]Starting: kubectl apply
2019-01-02T08:48:21.2074936Z ==============================================================================
2019-01-02T08:48:21.2075160Z Task         : Deploy to Kubernetes
2019-01-02T08:48:21.2075398Z Description  : Deploy, configure, update your Kubernetes cluster in Azure Container Service by running kubectl commands.
2019-01-02T08:48:21.2075625Z Version      : 1.1.17
2019-01-02T08:48:21.2075792Z Author       : Microsoft Corporation
2019-01-02T08:48:21.2076009Z Help         : [More Information](https://go.microsoft.com/fwlink/?linkid=851275)
2019-01-02T08:48:21.2076245Z ==============================================================================
2019-01-02T08:48:25.7971481Z Found tool in cache: kubectl 1.7.0 x64
2019-01-02T08:48:25.7980222Z Prepending PATH environment variable with directory: C:\agents\HephaestusForge\_work\_tool\kubectl\1.7.0\x64
2019-01-02T08:48:25.8666111Z [command]C:\agents\HephaestusForge\_work\_tool\kubectl\1.7.0\x64\kubectl.exe apply -f C:\agents\HephaestusForge\_work\r8\a\_MyProject\kubernetes\deploy.yaml -o json
2019-01-02T08:48:26.3518703Z To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code CUYYYYYVV to authenticate.

对此有什么解决方法?是否可以让Azure DevOps将自身身份验证为服务器客户端而不是AD客户端?

2 个答案:

答案 0 :(得分:2)

您可以使用不需要交互式登录的管理员配置文件,但不幸的是,它绕过了您可能已设置的任何RBAC控件。

在这里投票:https://feedback.azure.com/forums/914020-azure-kubernetes-service-aks/suggestions/35146387-support-non-interactive-login-for-aad-integrated-c

答案 1 :(得分:2)

您可以从 https://github.com/Azure/kubelogin

为您的管道使用 kubelogin

这是从登录步骤开始的完整示例,直到在 Kubernetes 中获取命名空间资源。

az login --service-principal -u $APP_ID -p $PASSWORD -t $TENANT

此语句更重要,如果您的 ~/.kube/config 文件中没有现有的集群上下文

az aks get-credentials --resource-group $RG_AKS --name $CLUSTER_NAME --overwrite-existing --file .kubeconfig-${CLUSTER_NAME}
Merged "my-aks-cluster-name" as current context in .kubeconfig-my-aks-cluster-name

使用 kubelogin 而不是 az aks get-credential ....

export KUBECONFIG=$(pwd)/.kubeconfig-${CLUSTER_NAME}
kubelogin convert-kubeconfig -l spn
export AAD_SERVICE_PRINCIPAL_CLIENT_ID=$APP_ID
export AAD_SERVICE_PRINCIPAL_CLIENT_SECRET=$PASSWORD

现在无需设备认证即可运行 kubectl

kubectl get pods -n $NAMESPACE
NAME                       READY   STATUS    RESTARTS   AGE
myapp-be-7c8cf7d8b9-gnj2t   1/1     Running   0          103m
myapp-cms-65fd6df9c-z7752   1/1     Running   0          14m
myapp-fe-5dbcdd8d9c-fzxgh   1/1     Running   0          52m