首页 > 解决方案 > 带有 AAD 绑定 AKS 集群的 azure devops 中的 Kubernetes 服务连接

问题描述

azure devops 中的 kubernetes 服务连接是否可以与通过 openidconnect 绑定到 AAD 的 AKS 集群一起使用?登录到此类集群需要通过涉及设备登录 + 浏览器的 openidconnect 流程。这怎么可能 w/ azure devops k8s 服务连接?

标签: azure-devopsazure-aks

解决方案


azure devops 中的 kubernetes 服务连接是否可以与通过 openidconnect 绑定到 AAD 的 AKS 集群一起使用?

不幸的是,不,这直到现在才支持。

根据您的描述,您想在 Azure Devops Kubernetes 服务连接中连接的是 Azure Kubernetes 服务。这意味着您将选择Azure Subscriptionin Choose authentication。但是,此连接方法使用服务主体身份验证 (SPA)进行身份验证,与 AAD auth 绑定的 AKS尚不支持该方法。

如果在 Azure Devops 中将 AKS 群集作为 CI/CD 部署的一部分进行连接,并尝试获取群集凭据。您将收到警告响应,通知您登录,因为服务主体无法处理它

WARNING: To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code *** to authenticate.

您应该熟悉此消息,它需要您打开浏览器登录以手动完成设备代码认证。但这在 Azure Devops 中无法实现。

在我们的论坛上提出了这样的功能请求,要求我们扩展此功能以支持 AAD 集成集群的非交互式登录。您可以在那里投票和评论以提高此建议票的优先级。然后我们的产品经理可以尽快将其考虑到开发计划中。


虽然不能直接实现。但是现在有两个解决方法可以供您参考。

  • 第一个解决方法是将 Azure DevOps 身份验证从 AAD 客户端更改为服务器客户端。

使用az aks get-credentials 命令并用它指定参数--admin。这有助于绕过 Azure AD 身份验证,因为它可以让您连接和检索无需 Azure AD 即可工作的管理员凭据。

但是,我不推荐这种方法,因为主观上,这种方法为了安全而忽略了 AAD 中设置的身份验证规则。如果您想要一种快速的方法来实现您想要的并且不太担心安全性,您可以尝试一下。

  • 第二种是使用 Kubernetes 服务帐户

您可以按照此文档创建服务帐户。然后在 Azure Devops 中,我们可以使用此服务帐户与 AKS API 进行通信。在这里,您还需要考虑 AKS 中的授权 IP 地址范围

服务账号创建成功后,在Azure Devops的服务连接中选择服务账号:

在此处输入图像描述

服务器 URL:从 Azure 门户中的 AKS 实例(API 服务器地址https://)获取,然后在将其输入此服务连接时不要忘记在其前面附加。

秘密:使用命令生成它:

kubectl get secret -n <name of secret> -o yaml -n service-accounts

请参阅此文档:在 Azure Kubernetes 服务 (AKS) 上部署 Vault

然后,您可以在 Azure Devops 任务中使用此服务连接。


推荐阅读