在AKS中从Azure Key Vault创建imagePullSecrets及AKS-ACR免手动集成咨询
解决方案:AKS与ACR集成及基于AKV创建imagePullSecret的方法
一、无需手动创建secret:AKS与ACR直接集成(推荐方案)
这是最省心的方式,完全绕开imagePullSecret的配置,直接让AKS集群获得ACR的镜像拉取权限:
- 托管身份集成:
- 给AKS的系统托管身份(或用户分配的托管身份)添加ACR的
AcrPull角色权限 - 配置完成后,集群内所有Pod默认就能拉取该ACR中的镜像,无需额外配置任何secret
- 给AKS的系统托管身份(或用户分配的托管身份)添加ACR的
- 服务主体集成:
如果使用服务主体管理权限,给服务主体分配ACR的AcrPull角色,然后在AKS集群创建时指定该服务主体,或者后续通过集群更新操作完成关联
二、用AKV自动生成Kubernetes imagePullSecret(不依赖Pod)
借助Secrets Store CSI Driver + Secret Sync功能,可将AKV中存储的ACR凭据同步为Kubernetes原生Secret,直接作为imagePullSecret使用:
- 确保AKS集群已安装Secrets Store CSI Driver和Azure Key Vault Provider组件
- 创建
SecretProviderClass清单,指定AKV中的凭据(如ACR用户名、密码),并配置同步到Kubernetes Secret:
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: akv-acr-secret-sync spec: provider: azure parameters: usePodIdentity: "false" useVMManagedIdentity: "true" userAssignedIdentityID: "<你的托管身份ID>" keyvaultName: "<你的AKV实例名称>" objects: | array: - | objectName: acr-username objectType: secret - | objectName: acr-password objectType: secret tenantId: "<你的Azure租户ID>" secretObjects: - data: - key: username objectName: acr-username - key: password objectName: acr-password secretName: acr-imagepullsecret type: kubernetes.io/dockerconfigjson
- 应用该清单后,CSI Driver会自动在集群中生成名为
acr-imagepullsecret的imagePullSecret,可直接在Pod或ServiceAccount的配置中引用 - 注意:用于访问AKV的身份需具备AKV的
Get权限,以及同步生成Kubernetes Secret的权限
三、纯清单方式创建imagePullSecret(不推荐)
如果要直接用Kubernetes清单定义,本质是把AKV中的凭据提前取出后硬编码到清单里,但这种方式存在安全风险(凭据明文暴露),不建议使用。更安全的方式还是依赖上述Secret Sync功能,自动从AKV同步生成Secret。
总结:
- 优先选择AKS与ACR的身份直接集成,完全无需处理secret配置
- 若必须用AKV存储凭据,使用Secrets Store CSI Driver的Secret Sync功能自动生成imagePullSecret,无需依赖Pod挂载
内容的提问来源于stack exchange,提问作者5w3rv0
相关产品推荐
相关产品推荐

