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: 8080
若配置正常,Pod会启动成功。然后执行 kubectl get pod tomcat-xxx -o yaml命令,你可看到以下配置项。
spec:
  imagePullSecrets:
  - nameregsecretey