天天看點

阿裡雲Kubernetes容器服務支援免密拉取私有鏡像倉庫

名字解釋:

ACS: 阿裡雲容器服務,

https://cs.console.aliyun.com ACR: 阿裡雲容器鏡像服務, https://cr.console.aliyun.com/

相信不少使用者因為在使用容器服務時需要配置私有鏡像的ImagePullSecrets而感到倍感繁瑣,今天和大家分享的是阿裡雲容器服務已經支援免密拉取ACR私有鏡像,使用者無需在kubernetes叢集中為自己的ACR私有鏡像配置ImagePullSecrets,拉取ACR私有鏡像從未如此簡單和輕松。

如下圖所示,docker pull指令失敗是因為沒有給私有鏡像配置使用者名密碼,相對比的是,通過免密拉取功能,kubectl無需配置ImagePullSecrets則可直接拉取私有鏡像。

阿裡雲Kubernetes容器服務支援免密拉取私有鏡像倉庫

适用要求說明

  • 僅支援免密拉取目前使用者的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指令或者登入控制台(

)快速試用吧。

阿裡雲容器服務将持續優化容器的雲上使用體驗,請保持關注。

繼續閱讀