配置了 Azure AD RBAC 的 AKS Azure DevOp Pipelines 身份验证?

Azure DevOp Pipelines authentication to AKS with Azure AD RBAC configured?

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

配置了它

问题是,Azure DevOp Pipelines 中的 Kubernetes build/release 任务现在也需要此身份验证,例如当我们 运行 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.7.0\x64
2019-01-02T08:48:25.8666111Z [command]C:\agents\HephaestusForge\_work\_tool\kubectl.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 客户端?

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

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

您可以在 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