azure-devops - 带有 AAD 绑定 AKS 集群的 azure devops 中的 Kubernetes 服务连接
问题描述
azure devops 中的 kubernetes 服务连接是否可以与通过 openidconnect 绑定到 AAD 的 AKS 集群一起使用?登录到此类集群需要通过涉及设备登录 + 浏览器的 openidconnect 流程。这怎么可能 w/ azure devops k8s 服务连接?
解决方案
azure devops 中的 kubernetes 服务连接是否可以与通过 openidconnect 绑定到 AAD 的 AKS 集群一起使用?
不幸的是,不,这直到现在才支持。
根据您的描述,您想在 Azure Devops Kubernetes 服务连接中连接的是 Azure Kubernetes 服务。这意味着您将选择Azure Subscription
in 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 任务中使用此服务连接。
推荐阅读
- c# - PostSharp 5.1.9 连接到管道服务器时出错
- c# - EditorGUILayout.TextField 不返回更新的 inputText
- django-rest-framework - 我已经嵌套了序列化程序,并希望通过覆盖 create 方法为其创建一个实例。
- python - 为什么 numpy.where 给我这个输出?
- python - Python仅保留列表中的字母数字单词
- javascript - 如何在反应路由器 3 中设置主应用程序外部的路由?
- java - JPA Left Join 正在生成返回太多行的 SQL
- regex - QRegExp 多行带引号
- java - 带有彗星处理器的此 URL 不支持 HTTP 方法 GET
- azure - Azure 搜索 - SearchMode:ANY - 未按预期工作