名字解释:
ACS: 阿里云容器服务,https://cs.console.aliyun.com
ACR: 阿里云容器镜像服务,https://cr.console.aliyun.com/
相信不少用户因为在使用容器服务时需要配置私有镜像的ImagePullSecrets而感到倍感繁琐,今天和大家分享的是阿里云容器服务已经支持免密拉取ACR私有镜像,用户无需在kubernetes集群中为自己的ACR私有镜像配置ImagePullSecrets,拉取ACR私有镜像从未如此简单和轻松。
如下图所示,docker pull命令失败是因为没有给私有镜像配置用户名密码,相对比的是,通过免密拉取功能,kubectl无需配置ImagePullSecrets则可直接拉取私有镜像。
适用要求说明
- 仅支持免密拉取当前用户的ACR私有镜像,无法拉取其他用户的私有镜像
- 支持跨Region拉取ACR私有镜像
-
目前适用的集群包括:
- 所有Serverless Kubernetes集群
- 新创建的托管Kubernetes集群,并且版本需高于1.11.2
- 新创建的Kubernetes集群,并且版本需高于1.11.2。对于已创建的集群,请参看下面的步骤进行手动配置。
- 只可在default namespace下使用,暂不支持多namespace场景
手动配置已有Kuberentes集群的免密拉取功能
对于新建集群,用户无需任何配置即可使用免密拉取功能,但是对于已有Kubernetes集群,因为需要新增ram权限的授权,所以需要用户手动修改自定义授权和部署相关服务。具体过程如下。
1. 给worker节点的RAM角色添加ACR相关权限
- 打开集群节点页面:
- 点击进入节点ECS信息页面,查看worker节点的自定义RAM角色
- 在RAM控制台找到相对应的worker的自定义ram授权策略
- 在其授权策略中添加ACR相关权限,授权容器服务可以访问ACR得到临时的token密码
-
需添加的权限如下:
{ "Action": [ "cr:Get*", "cr:List*", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" }
2. 部署aliyun-acr-credential-helper服务: 用于定时刷新ACR临时token密码
apiVersion: v1
kind: ServiceAccount
metadata:
name: aliyun-acr-credential-helper
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: aliyun-acr-credential-helper-rolebinding
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: aliyun-acr-credential-helper
namespace: kube-system
---
#kubectl create secret docker-registry acr-image-pull-secret-public --docker-server=cr-tmp-xxx --docker-username=cr-temp-xxx --docker-password=cr-temp-xxx --docker-email=cr-temp-xxx
apiVersion: v1
data:
.dockerconfigjson: eyJhdXRocyI6eyJjci10bXAteHh4Ijp7InVzZXJuYW1lIjoiY3ItdGVtcC14eHgiLCJwYXNzd29yZCI6ImNyLXRlbXAteHh4IiwiZW1haWwiOiJjci10ZW1wLXh4eCIsImF1dGgiOiJZM0l0ZEdWdGNDMTRlSGc2WTNJdGRHVnRjQzE0ZUhnPSJ9fX0=
kind: Secret
metadata:
name: aliyun-acr-credential-a
namespace: default
type: kubernetes.io/dockerconfigjson
---
#kubectl create secret docker-registry acr-image-pull-secret-vpc --docker-server=cr-tmp-xxx --docker-username=cr-temp-xxx --docker-password=cr-temp-xxx --docker-email=cr-temp-xxx
apiVersion: v1
data:
.dockerconfigjson: eyJhdXRocyI6eyJjci10bXAteHh4Ijp7InVzZXJuYW1lIjoiY3ItdGVtcC14eHgiLCJwYXNzd29yZCI6ImNyLXRlbXAteHh4IiwiZW1haWwiOiJjci10ZW1wLXh4eCIsImF1dGgiOiJZM0l0ZEdWdGNDMTRlSGc2WTNJdGRHVnRjQzE0ZUhnPSJ9fX0=
kind: Secret
metadata:
name: aliyun-acr-credential-b
namespace: default
type: kubernetes.io/dockerconfigjson
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: aliyun-acr-credential-helper
namespace: kube-system
labels:
app: aliyun-acr-credential-helper
spec:
replicas: 1
selector:
matchLabels:
app: aliyun-acr-credential-helper
template:
metadata:
labels:
app: aliyun-acr-credential-helper
spec:
serviceAccount: aliyun-acr-credential-helper
containers:
- name: aliyun-acr-credential-helper
image: registry.cn-shanghai.aliyuncs.com/acs/aliyun-acr-credential-helper:1.0-793003d
imagePullPolicy: Always
terminationGracePeriodSeconds: 0
开始体验
至此,自主集群的自动拉取私有镜像功能已经配置完成,那就使用kubectl命令或者登录控制台(https://cs.console.aliyun.com )快速试用吧。
阿里云容器服务将持续优化容器的云上使用体验,请保持关注。