美文网首页
Kubernetes 访问 docker 仓库失败 no bas

Kubernetes 访问 docker 仓库失败 no bas

作者: 0neBean | 来源:发表于2019-09-26 15:17 被阅读0次

一般我们push 镜像 获取pull镜像,需要docker login ,用账号密码登录仓库,同理Kubernetes 部署pod,拉取镜像也需要登录。

首先需要创建一个带有docker 仓库账号密码信息的secret,在部署的yml或json文件中,带上这个secret即可。


在pod上指定ImagePullSecrets

注意: Google Kubernetes Engine,GCE及其他自动创建node的云平台上,推荐使用本方法。

Kubernetes支持在pod中指定仓库密钥。

使用Docker Config创建Secret

运行以下命令,将大写字母代替为合适的值

$ kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
secret "myregistrykey" created.

如果需要接入多个仓库,可以为每个仓库创建一个secret。 当为pod拉取镜像时,kubelet会将imagePullSecrets合入一个独立虚拟的.docker/config.json

Pod只能引用和它相同namespace的ImagePullSecrets, 所以需要为每一个namespace做配置


通过kubectl创建secret

由于某种原因在一个.docker/config.json中需要多个项或者需要非上述命令给出的secret,可以create a secret using json or yaml

请保证:

  • 设置data项的名称为.dockerconfigjson
  • 使用base64对docker文件编码,并将字符准确黏贴到data[".dockerconfigjson"]
    cat .docker/config.json| base64
  • 设置typekubernetes.io/dockerconfigjson

示例:

apiVersion: v1
kind: Secret
metadata:
  name: myregistrykey
  namespace: awesomeapps
data:
  .dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson

如果收到错误消息error: no objects passed to create,可能是 base64 编码后的字符串非法。 如果收到错误消息类似Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ..., 说明数据已经解码成功,但是不满足.docker/config.json文件的语法。

在pod中引用imagePullSecrets


现在,在创建pod时,可以在pod定义中增加imagePullSecrets小节来引用secret

apiVersion: v1
kind: Pod
metadata:
  name: foo
  namespace: awesomeapps
spec:
  containers:
    - name: foo
      image: janedoe/awesomeapp:v1
  imagePullSecrets:
    - name: myregistrykey

对每一个使用私有仓库的pod,都需要做以上操作。

也可以在serviceAccount 资源中设置imagePullSecrets自动设置imagePullSecrets

imagePullSecrets可以和每个node上的.docker/config.json一起使用,他们将共同生效。本方法在Google Kubernetes Engine 也能正常工作。

相关文章

网友评论

      本文标题:Kubernetes 访问 docker 仓库失败 no bas

      本文链接:https://www.haomeiwen.com/subject/quzyuctx.html