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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?