Azure DevOp管道认证到AKS配置Azure AD RBAC?

Dav*_*New 10 azure azure-active-directory azure-devops azure-pipelines azure-kubernetes

我们已将Azure Kubernetes Clusters配置为使用Azure Active Directory RBAC.这意味着当使用kubectl时,我们需要首先作为AD用户进行身份验证(通常通过Web浏览器手动完成设备代码身份验证).我们几乎完全按照MSDN文章" 将Azure Active Directory与Azure Kubernetes服务集成"进行了配置.

问题是,现在,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.
Run Code Online (Sandbox Code Playgroud)

这是一个什么解决方法?是否可以让Azure DevOps将自身认证为服务器客户端而不是AD客户端?

mee*_*pol 8

您可以从https://github.com/Azure/kubelogin将 kubelogin 用于管道

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

az login --service-principal -u $APP_ID -p $PASSWORD -t $TENANT
Run Code Online (Sandbox Code Playgroud)

~/.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
Run Code Online (Sandbox Code Playgroud)

使用 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
Run Code Online (Sandbox Code Playgroud)

现在您无需设备身份验证即可运行 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
Run Code Online (Sandbox Code Playgroud)


小智 4

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

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