名字解釋:
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相關權限
- 打開叢集節點頁面:
阿裡雲Kubernetes容器服務支援免密拉取私有鏡像倉庫 - 點選進入節點ECS資訊頁面,檢視worker節點的自定義RAM角色
阿裡雲Kubernetes容器服務支援免密拉取私有鏡像倉庫 - 在RAM控制台找到相對應的worker的自定義ram授權政策
阿裡雲Kubernetes容器服務支援免密拉取私有鏡像倉庫 - 在其授權政策中添加ACR相關權限,授權容器服務可以通路ACR得到臨時的token密碼
阿裡雲Kubernetes容器服務支援免密拉取私有鏡像倉庫 - 需添加的權限如下:
{ "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指令或者登入控制台(
)快速試用吧。
阿裡雲容器服務将持續優化容器的雲上使用體驗,請保持關注。