• kubernetes向每个命名空间的默认账户添加ImagePullSecrets


    私有仓库认证ImagePullSecrets

    从私有仓库读取镜像时可能需要密钥,通用的做法是在每个命名空间创建ImagePullSecrets,在 Pod 上指定 ImagePullSecrets完成私有镜像的拉取。

    创建ImagePullSecrets的命令

    1. kubectl create secret docker-registry myregistrykey --docker-server=DUMMY_SERVER \
    2. --docker-username=DUMMY_USERNAME --docker-password=DUMMY_DOCKER_PASSWORD \
    3. --docker-email=DUMMY_DOCKER_EMAIL

    基于已有的docker login凭据创建secret

    Kubernetes 集群使用 kubernetes.io/dockerconfigjson 类型的 Secret 来通过镜像仓库的身份验证,进而提取私有镜像。如果你已经运行了 docker login 命令,你可以复制该镜像仓库的凭证到 Kubernetes.

    1. kubectl create secret generic my-docker-register \
    2. --from-file=.dockerconfigjson= \
    3. --type=kubernetes.io/dockerconfigjson

    在所有命名空间创建secret的脚本

    1. #!/bin/bash
    2. ns_list=`kubectl get ns | awk '{print $1}' | grep -v NAME`
    3. for ns in $ns_list;
    4. do
    5. kubectl create secret docker-registry imagePullSecret-registry \
    6. --docker-server=服务器地址 \
    7. --docker-username=admin \
    8. --docker-password=****** \
    9. --docker-email=****** \
    10. -n $ns
    11. done;

    为服务账户添加 ImagePullSecrets

    每个命名空间都有一个名为 default 的服务账户资源,当你创建 Pod 时,如果没有指定服务账户,Pod 会被指定给命名空间中的 default 服务账户,通过把 ImagePullSecrets添加到默认账户default中,具体命令如下

    kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "myregistrykey"}]}'

    在所有命名空间,批量添加的脚本如下

    1. #!/bin/bash
    2. ns_list=`kubectl get ns | awk '{print $1}' | grep -v NAME`
    3. for ns in $ns_list;
    4. do
    5. kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "myregistrykey"}]}' -n $ns
    6. done;

    也可以手动编辑

    你也可以使用 kubectl edit,或者如下所示手动编辑 YAML 清单:

    kubectl get serviceaccounts default -o yaml > ./sa.yaml

    sa.yaml 文件的输出类似这样:

    1. apiVersion: v1
    2. kind: ServiceAccount
    3. metadata:
    4. creationTimestamp: 2015-08-07T22:02:39Z
    5. name: default
    6. namespace: default
    7. resourceVersion: "243024"
    8. uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
    9. secrets:
    10. - name: default-token-uudge

    使用你常用的编辑器(例如 vi),打开 sa.yaml 文件,删除带有键名 resourceVersion 的行,添加带有 imagePullSecrets: 的行,最后保存文件。

    所得到的 sa.yaml 文件类似于:

    1. apiVersion: v1
    2. kind: ServiceAccount
    3. metadata:
    4. creationTimestamp: 2015-08-07T22:02:39Z
    5. name: default
    6. namespace: default
    7. uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
    8. secrets:
    9. - name: default-token-uudge
    10. imagePullSecrets:
    11. - name: myregistrykey

    最后,使用新更新的 sa.yaml 文件替换服务账户。

    kubectl replace serviceaccount default -f ./sa.yaml

     验证镜像拉取 Secret 已经被添加到 Pod 

    现在,在当前命名空间中创建使用默认服务账户的新 Pod 时,新 Pod 会自动设置其 .spec.imagePullSecrets 字段

    1. kubectl run nginx --image=nginx --restart=Never
    2. kubectl get pod nginx -o=jsonpath='{.spec.imagePullSecrets[0].name}{"\n"}'

    输出结果为

    myregistrykey

  • 相关阅读:
    关于聚合函数的课后作业
    公司刚来的阿里p8,看完我构建的分布式框架,甩给我一份文档
    【树莓派不吃灰】简要了解Linux文件系统 以及 树莓派debian文件系统
    vue2 provide/inject watch 监控inject中值变化
    代理IP和Socks5代理:跨界电商与爬虫的智能引擎
    Vmware安装Kali
    python调用gurobi时,通过.x获取变量值
    Delphi 开发so库,Delphi 调用SO库
    yolov6训练自己的数据记录+yolov5对比测试
    甲骨文真的要开放Java EE?
  • 原文地址:https://blog.csdn.net/rendongxingzhe/article/details/126189947