Docker 配置 Secret

你可以使用下面两种 type 值之一来创建 Secret,用以存放访问 Docker 仓库 来下载镜像的凭据。

  1. kubernetes.io/dockercfg
  2. kubernetes.io/dockerconfigjson

kubernetes.io/dockercfg 是一种保留类型,用来存放 ~/.dockercfg 文件的 序列化形式。该文件是配置 Docker 命令行的一种老旧形式。 使用此 Secret 类型时,你需要确保 Secret 的 data 字段中包含名为 .dockercfg 的主键,其对应键值是用 base64 编码的某 ~/.dockercfg 文件的内容。

类型 kubernetes.io/dockerconfigjson 被设计用来保存 JSON 数据的序列化形式, 该 JSON 也遵从 ~/.docker/config.json 文件的格式规则,而后者是 ~/.dockercfg 的新版本格式。 使用此 Secret 类型时,Secret 对象的 data 字段必须包含 .dockerconfigjson 键,其键值为 base64 编码的字符串包含 ~/.docker/config.json 文件的内容。

下面是一个 kubernetes.io/dockercfg 类型 Secret 的示例:

  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. name: secret-dockercfg
  5. type: kubernetes.io/dockercfg
  6. data:
  7. .dockercfg: |
  8. "<base64 encoded ~/.dockercfg file>"

说明:
如果你不希望执行 base64 编码转换,可以使用 stringData 字段代替。

当你使用清单文件来创建这两类 Secret 时,API 服务器会检查 data 字段中是否 存在所期望的主键,并且验证其中所提供的键值是否是合法的 JSON 数据。 不过,API 服务器不会检查 JSON 数据本身是否是一个合法的 Docker 配置文件内容。

  1. kubectl create secret docker-registry secret-tiger-docker \
  2. --docker-username=tiger \
  3. --docker-password=pass113 \
  4. --docker-email=tiger@acme.com

上面的命令创建一个类型为 kubernetes.io/dockerconfigjson 的 Secret。 如果你对 data 字段中的 .dockerconfigjson 内容进行转储,你会得到下面的 JSON 内容,而这一内容是一个合法的 Docker 配置文件。

  1. {
  2. "auths": {
  3. "https://index.docker.io/v1/": {
  4. "username": "tiger",
  5. "password": "pass113",
  6. "email": "tiger@acme.com",
  7. "auth": "dGlnZXI6cGFzczExMw=="
  8. }
  9. }
  10. }

ref: https://www.yuque.com/qinxi-cvygi/kubernetes/lnv756