配置镜像免密下载
在容器化应用部署过程中,通常需要配置imagePullSecrets来确保容器镜像能够从私有仓库中被正确拉取。然而,这一过程不仅操作繁琐,还存在安全风险,因为长期有效的凭据容易泄露,而临时凭据则需要定期更新。为了解决这一问题,CCE引入了免密下载容器镜像的功能。配置镜像免密后,您在创建CCE工作负载时,无需显式指定imagePullSecrets,即可自动下载镜像,简化了操作流程,同时提高了安全性。
约束与限制
- 使用节点委托实现镜像免密下载功能仅支持v1.28.15-r70、v1.29.15-r30、v1.30.14-r30、v1.31.10-r30、v1.32.6-r30、v1.33.5-r20、v1.34.1-r0及以上版本的集群。
- 使用Service Account委托实现镜像免密下载功能仅支持v1.34.3-r10、v1.35.1-r0及以上版本的集群。
- 镜像免密下载功能仅支持在节点池上使用,且启用该功能需要为节点池/Service Account配置委托并授予相应权限。
- 节点池如果已开启镜像免密下载,其中的节点迁移到DefaultPool后不支持镜像免密下载。
- 使用过程中请勿删除委托,以及确保委托未过期,否则镜像免密下载将不可用。
创建委托并授权
- 登录统一身份认证服务控制台,选择左侧导航栏中的“委托”。
- 单击右上角“创建委托”,委托类型选择“云服务”,将其授权给“弹性云服务器 ECS 裸金属服务器 BMS”,详情请参见创建委托并授权。
建议您创建永久的委托,否则委托过期之后会影响CCE的业务部署。

- 单击“完成”创建委托,然后继续为创建的委托授予SWR相关权限。
- 如果您只需要使用基础版SWR镜像免密下载,需授予以下权限:
- swr:repo:download:授予容器镜像服务下载镜像的权限
- swr:system:createLoginSecret:授予容器镜像服务生成临时登录指令的权限
JSON示例如下:
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "swr:repo:download", "swr:system:createLoginSecret" ] } ] } - 如果您需要使用容器镜像服务企业版镜像免密下载,需授予以下权限:
- swr:repository:downloadArtifact:授予容器镜像服务企业版下载镜像的权限
- swr:instance:createTempCredential:授予容器镜像服务企业版创建临时访问凭证的权限
- swr:instance:list:授予查询容器镜像服务企业版实例列表信息的权限
- sts::createServiceBearerToken:(该权限仅使用IAM 5.0时需要)授予获取Bearer Token的权限
JSON示例如下:
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "swr:repository:downloadArtifact", "swr:instance:createTempCredential", "swr:instance:list" ] } ] }
如果使用新版IAM(IAM 5.0)则需要增加"sts::createServiceBearerToken"的Action,授予获取Bearer Token的权限。
{ "Version": "5.0", "Statement": [ { "Effect": "Allow", "Action": [ "swr:repository:downloadArtifact", "swr:instance:createTempCredential", "swr:instance:list", "sts::createServiceBearerToken" ] } ] }
- 如果您只需要使用基础版SWR镜像免密下载,需授予以下权限:
配置启用镜像免密下载
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“节点池”。
- 创建一个节点池,并在“高级配置 > 委托”配置中选择刚才创建的委托,然后继续完成节点池创建。
如果之前已经在集群里创建了节点池,则可以更新节点池,在“高级配置 > 委托”配置中选择刚才创建的委托。
- 如果节点池下已存在节点,由于更新节点池委托对已有节点不生效,需要跳转到节点对应的ECS界面手动为节点关联委托。
- 如果节点池之前已经配置了委托,只需在原有委托里授权SWR相关权限,无需新建委托。
- 单击节点池名称后的“更多 > 配置管理”,在“kubelet组件配置”中开启镜像免密下载(enable-swr-credential-provider),单击“确定”。
此操作将触发kubelet进程的重启。为确保平稳过渡,建议在业务低峰期执行此操作,此时节点池内的所有节点配置将逐步生效。
验证免密拉取
在已配置免密拉取的节点池中创建工作负载时,无需配置imagePullSecrets即可成功拉取SWR私有镜像。
工作负载配置示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
appgroup: ''
version: v1
name: deployment1
namespace: default
spec:
selector:
matchLabels:
app: deployment1
version: v1
template:
metadata:
labels:
app: deployment1
version: v1
spec:
containers:
- name: container-1
image: "{image_name}" # SWR私有镜像地址
imagePullPolicy: Always
terminationGracePeriodSeconds: 30
affinity: # 将工作负载亲和调度至已配置镜像免密拉取的节点池
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cce.cloud.com/cce-nodepool
operator: In
values:
- "{nodepool_name}" # 已配置镜像免密拉取的节点池名称
replicas: 1
revisionHistoryLimit: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
progressDeadlineSeconds: 600 以上示例中未配置镜像访问凭证imagePullSecrets,创建该工作负载,工作负载被调度到指定的节点池中,且SWR的私有镜像可以正常拉取,说明该节点池的镜像免密配置成功。
使用Service Account委托实现镜像免密下载
您可以为Service Account配置SWR相关的委托权限,然后开启节点池的镜像免密下载功能,后续在该节点池中创建工作负载即可实现镜像免密下载。
创建委托并授权
- 登录统一身份认证服务控制台,选择左侧导航栏中的“委托”。
- 单击右上角“创建委托”,委托类型选择“云服务”,将其授权给“云容器引擎服务 CCE”,详情请参见创建委托并授权。
建议您创建永久的委托,否则委托过期之后会影响CCE的业务部署。

- 单击“完成”创建委托,然后继续为创建的委托授予SWR相关权限。
- 如果您只需要使用基础版SWR镜像免密下载,需授予以下权限:
- swr:repo:download:授予容器镜像服务下载镜像的权限
- swr:system:createLoginSecret:授予容器镜像服务生成临时登录指令的权限
JSON示例如下:
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "swr:repo:download", "swr:system:createLoginSecret" ] } ] } - 如果您需要使用容器镜像服务企业版镜像免密下载,需授予以下权限:
- swr:repository:downloadArtifact:授予容器镜像服务企业版下载镜像的权限
- swr:instance:createTempCredential:授予容器镜像服务企业版创建临时访问凭证的权限
- swr:instance:list:授予查询容器镜像服务企业版实例列表信息的权限
- sts::createServiceBearerToken:(该权限仅使用IAM 5.0时需要)授予获取Bearer Token的权限
JSON示例如下:
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "swr:repository:downloadArtifact", "swr:instance:createTempCredential", "swr:instance:list" ] } ] }
如果使用新版IAM(IAM 5.0)则需要增加"sts::createServiceBearerToken"的Action,授予获取Bearer Token的权限。
{ "Version": "5.0", "Statement": [ { "Effect": "Allow", "Action": [ "swr:repository:downloadArtifact", "swr:instance:createTempCredential", "swr:instance:list", "sts::createServiceBearerToken" ] } ] }
- 如果您只需要使用基础版SWR镜像免密下载,需授予以下权限:
创建Service Account并绑定委托
- 登录CCE控制台,在左侧导航栏中选择“权限管理”,切换至“容器组身份关联”页签。
- 在左边下拉列表中选择需要创建容器组身份关联的集群,单击“创建”。
- 选择创建好的委托,并选择工作负载的命名空间。
- 单击“创建服务账户”,配置以下参数。
- 命名空间:选择Service Account的命名空间,需要与工作负载命名空间保持一致。
- 服务账户(Service Account)名称:自定义Service Account名称。
- 注解:需要为添加credential.swr.io/enable-workload-cred: "true"的注解。

- 选择上一步创建的服务账户,单击“确定”完成容器组身份关联。
配置启用镜像免密下载
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“节点池”。
- 创建一个节点池,或者使用已有节点池。
- 单击节点池名称后的“更多 > 配置管理”,在“kubelet组件配置”中开启Service Account 委托镜像免密下载 (enable-swr-credential-serviceaccount-provider),单击“确定”。
此操作将触发kubelet进程的重启。为确保平稳过渡,建议在业务低峰期执行此操作,此时节点池内的所有节点配置将逐步生效。
验证免密拉取
在已配置免密拉取的节点池中创建工作负载时,无需配置imagePullSecrets即可成功拉取SWR私有镜像。
工作负载配置示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
appgroup: ''
version: v1
name: deployment1
namespace: default # 选择配置Service Account的命名空间
spec:
selector:
matchLabels:
app: deployment1
version: v1
template:
metadata:
labels:
app: deployment1
version: v1
credential.swr.io/enable-workload-cred: on # 关键配置:通过label标识该工作负载使用免密下载
spec:
serviceAccountName: swr-secretless-sa # 关键配置:指定已绑定委托的ServiceAccount,不配置则默认使用default
containers:
- name: container-1
image: "{image_name}" # SWR私有镜像地址
imagePullPolicy: Always
terminationGracePeriodSeconds: 30
affinity: # 将工作负载亲和调度至已配置镜像免密拉取的节点池
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cce.cloud.com/cce-nodepool
operator: In
values:
- "{nodepool_name}" # 已配置镜像免密拉取的节点池名称
replicas: 1
revisionHistoryLimit: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
progressDeadlineSeconds: 600 以上示例中未配置镜像访问凭证imagePullSecrets,创建该工作负载,工作负载被调度到指定的节点池中,且SWR的私有镜像可以正常拉取,说明该节点池的Service Account委托免密拉取镜像成功。