暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes 中配置ImagePullSecret票据以拉取企业内部私有仓库镜像到集群

WeiyiGeek 2022-07-17
2227

关注「WeiyiGeek公众号

设为「特别关注」每天带你玩转网络安全运维、应用开发、物联网IOT学习!


本章目录:

Kubernetes 中拉取内部私有仓库镜像的 ImagePullSecret 创建使用


原文地址: https://blog.weiyigeek.top/2022/2-27-620.html


0x04 Kubernetes 中拉取内部私有仓库镜像的 ImagePullSecret 创建使用

描述: 本小节记录了使用 Secret 从私有的镜像仓库或代码仓库拉取镜像来创建 Pod, 实际上是通过 imagePullSecret 资源将 Secret 提供的密码传递给 kubelet 从而在拉取镜像前完成必要的认证过程, 或者通过映射到ServiceAccount对象中然后在使用该SA对象创建出的Pod也同样拥有拉取镜像的权限。


方式1.docker-registry 方式来创建 secret


# 使用kubectl命令创建密钥kubectl create secret docker-registry myregistrykey \
--docker-server=harbor.weiyigeek.top \
--docker-username=weiyigeek \
--docker-password=Harbor12345 \
--docker-email=master@weiyigeek.top \
--namespace app

方式2.通过 docker 凭证文件来创建 secret

    # 通过docker login登录,本地生成凭证配置文件 ~/.docker/config.json
    docker login -uweiyigeek -pHarbor12345 harbor.weiyigeek.top


    # 基于该凭证文件创建secret
    kubectl create secret generic myregistrykey \
    --from-file=.dockerconfigjson=/root/.docker/config.json \
    --type=kubernetes.io/dockerconfigjson \
    --namespace app

    温馨提示: 此种方式的好处是如果有多个镜像仓库,都会先存在一个config.json文件中然后通过命令打入Secret, 如果有多个私有仓库都可以进行拉取。


    扩展知识.将上述镜像拉取 Secret 添加到 ServicesAcount 利用 sa 进行私有镜像拉取

      # 此处修改default命名空间的服务帐户,以将该 Secret 用作 imagePullSecret。
      kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "myregistrykey"}]}'


      # 你也可以使用 kubectl edit,或者如下所示手动编辑 YAML 清单,打开 sa.yaml 文件,删除带有键名 resourceVersion 的行,添加带有 imagePullSecrets: 的行,最后保存文件。
      $ kubectl get serviceaccounts default -o yaml > ./sa.yaml
      $ vim sa.yaml
      apiVersion: v1
      kind: ServiceAccount
      metadata:
      creationTimestamp: 2015-08-07T22:02:39Z
      name: default
      namespace: default
      uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
      secrets:
      - name: default-token-uudge
      imagePullSecrets:
      - name: myregistrykey


      # 最后,用新的更新的 sa.yaml 文件替换服务账号。
      kubectl replace serviceaccount default -f ./sa.yaml

      dockerconfigjson 示例:

        # (1) 查看类型为 kubernetes.io/dockerconfigjson 的 myregistrykey secret
        $ kubectl get secret myregistrykey -o yaml
        apiVersion: v1
        kind: Secret
        metadata:
        name: myregistrykey
        namespace: app
        data:
        .dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
        type: kubernetes.io/dockerconfigjson




        # (2) .dockerconfigjson 字段的值是 Docker 凭证的 base64 表示, 我们可以将 Secret 数据转换为可读格式。
        kubectl get secret myregistrykey --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
        # {"auths":{"yourprivateregistry.com":{"username":"weiyigeek","password":"xxxxxxxxxxx","email":"master@weiyigeek.top","auth":"c3R...zE2"}}}

        温馨提示: 我们也可手动对秘钥文件进行 base64 加密 , 例如 cat ~/.docker/config.json |base64 -w 0
         其值还是与UmVhbG...ZXlzCg==
        一致。


        使用示例

        描述: 使用 imagePullSecrets 字段指定名称空间下私有仓库凭据(myregistrykey
        )进行内部镜像(harbor.weiyigeek.top/private/app:latest
        )拉取

          tee private-reg.yaml <<'EOF'
          apiVersion: v1
          kind: Pod
          metadata:
          name: foo
          namespace: app
          spec:
          containers:
          - name: foo
          image: harbor.weiyigeek.top/private/app:latest
          command:
          - sh
          - -c
          - "sleep 160"
          imagePullSecrets:
          - name: myregistrykey
          EOF


          # 拉取部署私有镜像容器
          kubectl apply -f private-reg.yaml


          kubectl get pod -n app foo
          # NAME READY STATUS RESTARTS AGE
          # foo 1/1 Running 0 14s


          本文至此完毕,更多技术文章,尽情期待下一章节!


          原文地址: https://blog.weiyigeek.top/2022/2-27-620.html



           往期相关文章

          还不会部署高可用的kubernetes集群?企业DevOps实践之使用kubeadm方式安装高可用k8s集群v1.23.7

          2.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(下)


          如何使用Aliyun容器镜像服务对海外gcr、quay仓库镜像进行镜像拉取构建?

          如何在Kubernetes中安装metrics-server以获取Node节点、Pod容器资源监控指标?

          如何在Kubernetes集群中使用kubectl工具来进行管理多个外部K8S集群接入与资源操作?

          如何在 Kubernetes 中进行 ingress-nginx 配置优化以及HTTP请求速率限制

          Jenkins Pipeline 流水线如何根据代仓库的 webhook 自动触发拉取提交的分支代码并构建?

          实践使用Python编写对行程码图片内容批量识别的API接口

          在k8s集群中Kubernetes仪表板dashboard使用RABC机制限制指定用户针对指定名称空间中的资源进行管理实践

          如何配置Kubernetes仪表板dashboard支持http方式并使用ingress-nginx代理访问实践



          欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】
          或者个人公众号【WeiyiGeek】
          联系我。


          更多文章来源于【WeiyiGeek Blog 个人博客 - 为了能到远方,脚下的每一步都不能少 】

          个人主页: 【 https://weiyigeek.top

          博客地址: 【 https://blog.weiyigeek.top 




          专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注,转个发,留个言】(人间六大情),这将对我的肯定,谢谢!。

          • echo  "【点个赞】,动动你那粗壮的拇指或者芊芊玉手,亲!"

          • printf("%s", "【投个币】,万水千山总是情,投个硬币行不行,亲!")

          • fmt.Printf("【收个藏】,阅后即焚不吃灰,亲!")  

          • console.info("【转个发】,让更多的志同道合的朋友一起学习交流,亲!")

          • System.out.println("【关个注】,后续浏览查看不迷路哟,亲!")

          • cout << "【留个言】,文章写得好不好、有没有错误,一定要留言哟,亲! " << endl;



          更多网络安全、系统运维、应用开发、全栈文章,尽在【个人博客 - https://blog.weiyigeek.top】站点,谢谢支持!

              帅哥、美女、大佬们点个【赞+在看吧! 👇


          👇↓ 点击【"阅读原文"】,即可获取更多知识!

          文章转载自WeiyiGeek,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论