zoukankan      html  css  js  c++  java
  • k8s的imagePullSecrets如何生成及使用

    一、概述

    公司的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-store
    
    Login 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

  • 相关阅读:
    6-rocketmq-springboot整合
    5-rocketmq-事务消息
    3-rocketmq-支持的消息种类
    2-rocketmq-消息发送和接收
    1-rocketmq简介-部署
    详解unix5种IO模型
    大纲
    马哥博客作业第二十一周
    马哥博客作业第二十周
    马哥博客作业第十九周
  • 原文地址:https://www.cnblogs.com/xiao987334176/p/11434326.html
Copyright © 2011-2022 走看看