k8s的imagePullSecrets如何生成及使用

发布时间:2020-03-02 11:06:43编辑:admin阅读(2473)

    一、概述

    公司的docker仓库(harbor),是私有的,需要用户认证之后,才能拉取镜像。

     

    二、生成secret

    登录docker

    登录到k8s master节点,先登录docker

    root@k8s-master:~# docker login 192.168.10.122 -u admin -p Harbor12345
    WARNING! Using --password via the CLI is insecure. Use --password-stdin.
    Error response from daemon: Get https://192.168.10.122/v2/: dial tcp 192.168.10.122:443: connect: connection refused

     

    注意:出现这个报错,是由于harbor为了安全性考虑,默认是需要https证书支持的

    但是我们可以通过一个简单的办法解决

    修改 /etc/docker/daemon.json 文件

    vim /etc/docker/daemon.json

    内容如下:

    {"insecure-registries": ["192.168.10.122"]}

     

    重新加载docker配置

    /etc/init.d/docker reload

     

    再次登录

    复制代码

    root@k8s-master:~# docker login 192.168.10.122 -u admin -p Harbor12345
    WARNING! Using --password via the CLI is insecure. Use --password-stdin.
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded

    复制代码

    提示登录成功。

     

    登录过程创建或更新一个包含授权令牌的config.json文件。
    查看config.json文件:

    cat ~/.docker/config.json

     

    输出包含类似以下内容的部分:

    {
        "auths": {
            "192.168.10.122": {
                "auth": "YWRtaW46SGFyYm9yMTIzNDU="
            }
        },
        "HttpHeaders": {
            "User-Agent": "Docker-Client/19.03.1 (linux)"
        }
    }

    注意:如果您使用Docker凭据存储,您将看不到该auth条目,而是看到一个以存储名称为值的credsstore条目。

     

    基于现有Docker凭据创建secret

    kubernetes集群使用docker注册表类型的秘密对容器注册表进行身份验证,以获取私有映像。

    如果您已经运行了Docker登录,则可以将该凭证复制到Kubernetes中:

    kubectl create secret generic harborsecret \
        --from-file=.dockerconfigjson=/root/.docker/config.json \
        --type=kubernetes.io/dockerconfigjson
    注意:主要修改红色部分。

    harborsecret 表示key名

    /root/.docker/config.json 表示docker认证文件,注意要写绝对路径。

     

    查看内容

    kubectl get secrets harborsecret --output="jsonpath={.data.\.dockerconfigjson}" | base64 -d

    输出:

    {
        "auths": {
            "192.168.10.122": {
                "auth": "YWRtaW46SGFyYm9yMTIzNDU="
            }
        },
        "HttpHeaders": {
            "User-Agent": "Docker-Client/19.03.1 (linux)"
        }
    }

     

    要了解刚刚创建的regcred秘密的内容,请从以yaml格式查看秘密开始:

    kubectl get secret harborsecret --output=yaml

    输出:

    apiVersion: v1
    data:
      .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjEwLjEyMiI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy4xIChsaW51eCkiCgl9Cn0=
    kind: Secret
    metadata:
      creationTimestamp: "2019-08-30T06:14:10Z"
      name: harborsecret
      namespace: default
      resourceVersion: "6128"
      selfLink: /api/v1/namespaces/default/secrets/harborsecret
      uid: 76e16e61-a6b9-4a47-a842-e884cf6f468d
    type: kubernetes.io/dockerconfigjson

     

    三、在demployment yaml文件中的使用示例

    ... 
    spec:
          imagePullSecrets:
          - name:harborsecret
          containers:
          - name: eureka
            image: 192.168.10.122/library/alpine:latest
    ...

     

    如果需要删除secret,使用命令

    kubectl delete secrets harborsecret

     

    本文参考链接:

    https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

    https://www.cnblogs.com/aguncn/p/9789320.html


关键字