• 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

  • 相关阅读:
    [牛客top101]合并两个有序链表
    15.4 Java反射机制的深入应用(血干JAVA系类)
    应用架构和实践
    Spark 【Spark SQL(一)DataFrame的创建、保存与基本操作】
    金融行业多活架构设计及容灾发展趋势
    composer update抛出异常的处理
    界面控件DevExpress WPF Sunburst组件,开启可视化分层扁平数据新方式!
    leetCode 337. 打家劫舍 III 动态规划 房子都连成树了,偷不偷呢? “树形dp“ (递归三部曲 + 动规五部曲)
    poi读取word中的目录大纲,导入
    金九银十BAT互联网企业涨薪必备知识点:Jvm性能调优实战
  • 原文地址:https://blog.csdn.net/rendongxingzhe/article/details/126189947