美文网首页
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