如何使用Artifactory拉取中转能力实现外部镜像仓库身份认证
Kubernetes集群通过Artifactory代理拉取外部私有镜像的认证方案
首先可以确定Artifactory原生支持存储、管理外部私有镜像仓库的认证密钥,不需要K8s侧单独维护多套外部仓库的拉取凭证,你可以根据实际场景选择以下方案:
方案1:Artifactory端配置远程仓库认证(最推荐)
该方案把所有外部私有仓库的认证逻辑收拢到Artifactory侧处理,K8s侧无额外适配成本:
- 操作步骤:在Artifactory后台为每个需要代理的外部私有镜像仓库创建独立的远程Docker仓库,在仓库配置页的认证字段填写对应外部私有仓库的合法用户名、密码/访问令牌即可。
- 拉取规则:配置完成后,集群内拉取镜像的格式统一为
artifactory.your-domain.com/远程仓库名/镜像名:标签,Artifactory会自动使用预先存储的凭证去外部私有仓库拉取镜像、缓存到本地后返回给K8s节点。 - 额外优化:如果需要统一拉取入口,可以创建Artifactory虚拟Docker仓库,把所有本地、远程Docker仓库聚合到同一个虚拟仓库下,拉取镜像时不需要区分具体来源仓库,使用更便捷。
方案2:K8s侧配置统一对接Artifactory的ImagePullSecret
如果不想在Artifactory侧存储外部私有仓库的凭证,也可以直接在K8s侧配置对接Artifactory的统一拉取密钥:
- 操作步骤:先在Artifactory中创建一个拥有所有代理镜像仓库拉取权限的服务账号,再通过kubectl生成对应的镜像拉取密钥,命令如下:
kubectl create secret docker-registry artifactory-pull-secret \ --docker-server=artifactory.your-domain.com \ --docker-username=<Artifactory服务账号名> \ --docker-password=<Artifactory服务账号密钥>
- 使用方式:可以在Pod的spec字段中添加
imagePullSecrets: [{name: artifactory-pull-secret}]指定密钥,也可以将该密钥绑定到Namespace的默认ServiceAccount,实现该Namespace下所有Pod默认自动使用该密钥拉取镜像,无需逐个Pod配置。
方案3:细粒度权限隔离方案
如果不同业务需要拉取的外部私有镜像权限不同,需要做权限隔离,可以采用混合配置:
- 操作步骤:Artifactory侧为不同权限等级的外部私有仓库创建对应的远程仓库,同时生成对应权限的服务账号;K8s侧为不同的Namespace或业务ServiceAccount配置对应权限的ImagePullSecret即可。
- 优势:可以避免低权限业务拉取到高权限的外部私有镜像,满足安全合规要求。
内容的提问来源于stack exchange,提问作者Babas
相关产品推荐
相关产品推荐

