kubectl create secret docker-registry regsecret --docker-server=registry-internal.cn-hangzhou.aliyuncs.com --docker-username=abc@aliyun.com --docker-password=xxxxxx --docker-email=abc@aliyun.com

其中:

  • regsecret: 指定密鑰的鍵名稱,可自行定義。
  • —docker-server:指定 Docker 倉庫地址。
  • —docker-username: 指定 Docker 倉庫使用者名。
  • —docker-password:指定 Docker 倉庫登入密碼。
  • —docker-email:指定郵件地址(選填)。

yml 檔案加入密鑰參數。

containers:
    - name: foo
      image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0
imagePullSecrets:
    - name: regsecret

其中:

  • imagePullSecrets 是聲明拉取鏡像時需要指定密鑰。
  • regsecret 必須和上面產生密鑰的鍵名一致。
  • image 中的 Docker 倉庫名稱必須和 --docker-server 中的 Docker 倉庫名一致。

詳情資訊參見官方文檔 使用私人倉庫

實現無密鑰編排

為了避免每次使用私人鏡像部署時,都需要引用密鑰,您可將secret添加到namespace的default service account中,參見Add ImagePullSecrets to a service account

首先找到前面建立的拉取私人鏡像的secret。
# kubectl get secret regsecret
NAME        TYPE                             DATA      AGE
regsecret   kubernetes.io/dockerconfigjson   1         13m
本例中採用手動設定的方式,修改命名空間的預設服務帳戶default,從而將此secret作為imagePullSecret。

首先建立一個sa.yaml設定檔,將服務帳號default的配置匯入到該檔案中。

kubectl get serviceaccounts default -o yaml > ./sa.yaml

cat  sa.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: 2015-08-07T22:02:39Z
  name: default
  namespace: default
  resourceVersion: "243024"             ##注意該項
  selfLink: /api/v1/namespaces/default/serviceaccounts/default
  uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
secrets:
- name: default-token-uudgeoken-uudge

執行vim sa.yaml命令,刪除resourceVersion,並增加拉取鏡像的密鑰配置項imagePullSecrets。修改後的配置如下。

 
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: 2015-08-07T22:02:39Z
  name: default
  namespace: default
  selfLink: /api/v1/namespaces/default/serviceaccounts/default
  uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
secrets:
- name: default-token-uudge
imagePullSecrets:                 ##增加該項
- name: regsecret

隨後用 sa.yaml設定檔替換default的服務帳號配置。
kubectl replace serviceaccount default -f ./sa.yaml
serviceaccount "default" replaced

以一個tomcat編排為例,執行kubectl create -f 命令建立。

apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: tomcat-deployment
  labels:
    app: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0              #替換為您自己的私人鏡像地址
        ports:
        - containerPort: 8080containerPort: 8080
若配置正常,Pod會啟動成功。然後執行 kubectl get pod tomcat-xxx -o yaml命令,你可看到以下配置項。
spec:
  imagePullSecrets:
  - nameregsecretey