配置了 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://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
我们已将 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://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