在Argo CD中配置外部集群时如何使用Workload Identity?
Argo CD 结合 Workload Identity 接入外部 AKS 集群的配置思路
以下是落地这个方案的分步思路,结合官方文档的kubelogin部分补充完整配置逻辑:
1. 配置Workload Identity基础关联
- 为Argo CD使用的ServiceAccount绑定Azure AD身份:给目标ServiceAccount添加注解
azure.workload.identity/client-id: <你的Workload Identity客户端ID>,确保Argo CD所在集群已启用Workload Identity功能。 - 给绑定的Azure AD身份分配AKS访问权限:在Azure门户或通过CLI,将
Azure Kubernetes Service Cluster User Role(或自定义的最小权限角色)分配给该身份,使其能访问目标AKS集群的API。
2. 给Argo CD组件集成kubelogin
- 自定义Argo CD镜像:基于官方Argo CD镜像,添加kubelogin二进制文件(可通过
COPY --from=ghcr.io/azure/kubelogin:v0.0.25 /usr/local/bin/kubelogin /usr/local/bin/这类步骤构建)。 - 更新Argo CD部署:将controller和repo-server的镜像替换为自定义镜像,确保组件能调用kubelogin命令。
3. 配置Argo CD的集群认证信息
构建用于接入AKS的kubeconfig片段,核心是通过exec插件调用kubelogin获取Workload Identity凭证:
apiVersion: v1 kind: Config clusters: - cluster: server: <你的AKS集群API地址> certificate-authority-data: <AKS集群CA证书base64内容> name: external-aks-cluster contexts: - context: cluster: external-aks-cluster user: argo-cd-wi-user name: external-aks-context current-context: external-aks-context users: - name: argo-cd-wi-user user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: kubelogin args: - get-token - --environment - AzurePublicCloud - --client-id - <Workload Identity客户端ID> - --tenant-id - <Azure租户ID> - --server-id - <AKS的Server应用ID> - --workload-identity
- 通过Argo CD CLI添加集群:执行
argocd cluster add --kubeconfig ./aks-wi-kubeconfig external-aks-context,或者直接将配置写入Argo CD的cluster secret中。
4. 验证与排障
- 测试凭证获取:在Argo CD的controller pod中执行
kubelogin get-token --client-id <ID> --tenant-id <ID> --server-id <ID> --workload-identity,确认能成功获取JWT token。 - 检查权限:用获取到的token调用AKS API(
curl -H "Authorization: Bearer <token>" <AKS API地址>/api/v1/namespaces),确认有权限访问。 - 查看Argo CD日志:如果集群接入失败,检查controller的日志,排查是否存在网络阻断(比如无法访问Azure AD端点)、Workload Identity绑定错误或权限不足等问题。
内容的提问来源于stack exchange,提问作者ASH
相关产品推荐
相关产品推荐

