关注「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.jsondocker login -uweiyigeek -pHarbor12345 harbor.weiyigeek.top# 基于该凭证文件创建secretkubectl 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.yamlapiVersion: v1kind: ServiceAccountmetadata:creationTimestamp: 2015-08-07T22:02:39Zname: defaultnamespace: defaultuid: 052fb0f4-3d50-11e5-b066-42010af0d7b6secrets:- name: default-token-uudgeimagePullSecrets:- name: myregistrykey# 最后,用新的更新的 sa.yaml 文件替换服务账号。kubectl replace serviceaccount default -f ./sa.yaml
dockerconfigjson 示例:
# (1) 查看类型为 kubernetes.io/dockerconfigjson 的 myregistrykey secret$ kubectl get secret myregistrykey -o yamlapiVersion: v1kind: Secretmetadata:name: myregistrykeynamespace: appdata:.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: v1kind: Podmetadata:name: foonamespace: appspec:containers:- name: fooimage: harbor.weiyigeek.top/private/app:latestcommand:- sh- -c- "sleep 160"imagePullSecrets:- name: myregistrykeyEOF# 拉取部署私有镜像容器kubectl apply -f private-reg.yamlkubectl 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】站点,谢谢支持!
帅哥、美女、大佬们点个【赞+在看】吧! 👇
↓👇↓ 点击【"阅读原文"】,即可获取更多知识!




