imagePullSecret资源对象
imagePullSecret资源可用于辅助kubelet从需要认证的私有镜像仓库获取镜像,它通过将Secret提供的密码传递给kubelet从而在拉取镜像前完成必要的认证过程。
使用imagePullSecret的方式有两种:一是创建docker-registry类型的Secret对象,并在定义Pod资源时明确通过“imagePullSecrets”字段给出;另一个是创建docker-registry类型的Secret对象,将其添加到某特定的ServiceAccount对象中,那些使用该ServiceAccount资源创建的Pod对象,以及默认使用该ServiceAccount的Pod对象都将会直接使用imagePullSecrets中的认证信息。
推荐采用第二种方式,这样一来,凡是在这个名称空间创建pod等,都不用再单独指定docker-registry类型的Secret对象了
第一种方式:创建docker-registry类型的Secret对象
$ kubectl create secret docker-registry local-registry --docker-username=Ops --docker-password=Opspass --docker-email=ops@ilinux.io
此类Secret对象打印的类型信息为“kubernetes.io/dockerconfigjson”,如下面的命令结果所示:
$ kubectl get secrets local-registry
NAME TYPE DATA AGE
local-registry kubernetes.io/dockerconfigjson 1 7s
而后,使用相应的私有registry中镜像的Pod资源的定义,即可通过imagePullSecrets字段使用此Secret对象,使用示例如下面的配置清单所示:
apiVersion: v1
kind: Pod
metadata:
name: secret-imagepull-demo
namespace: default
spec:
imagePullSecrets:
- name: local-registry
containers:
- image: registry.ilinux.io/dev/myimage
name: myapp
第二种方式:创建docker-registry类型的Secret对象,将其添加到某特定的ServiceAccount对象
ServiceAccount资源基于spec.imagePullSecret字段附带一个由下载镜像专用的Secret资源组成的列表,用于在进行容器创建时,从某私有镜像仓库下载镜像文件之前进行服务认证。下面的示例定义了一个有着从本地私有镜像仓库harbor中下载镜像文件时用于认证的Secret对象信息的ServiceAccount:
apiVersion: v1
kind: ServiceAccount
metadata:
name: image-download-sa
imagePullSecrets:
- name: local-harbor-secret
其中,local-harbor-secret是docker-registry类型的Secret对象,由用户提前手动创建,它可以通过键值数据提供docker仓库服务器的地址、接入服务器的用户名、密码及用户的电子邮件等信息。认证通过后,引用了此ServiceAccount的Pod资源即可从指定的镜像仓库中下载由image字段指定的镜像文件。
官方文档地址:https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-service-account/
首先,生成一个 imagePullSecret; 接下来,验证该 Secret 已被创建。例如:
# kubectl create secret docker-registry myregistrykey --docker-server=DUMMY_SERVER \
--docker-username=DUMMY_USERNAME --docker-password=DUMMY_DOCKER_PASSWORD \
--docker-email=DUMMY_DOCKER_EMAIL
# kubectl get secrets myregistrykey
NAME TYPE DATA AGE
myregistrykey kubernetes.io/.dockerconfigjson 1 1d
接下来更改名字空间的默认服务账号,将该 Secret 用作 imagePullSecret。
# kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "myregistrykey"}]}'
也可以通过手动编辑该对象来实现同样的效果:
# kubectl edit serviceaccount/default
使用你的编辑器,删掉包含 resourceVersion 主键的行,添加包含 imagePullSecrets: 的行并保存文件。对于 uid 而言,保持其取值与你读到的值一样。
当你完成这些变更之后,所编辑的 ServiceAccount 看起来像是这样:
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: 2021-07-07T22:02:39Z
name: default
namespace: default
uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
imagePullSecrets:
- name: myregistrykey
现在,在当前名字空间中创建新 Pod 并使用默认 ServiceAccount 时, 新 Pod 的 spec.imagePullSecrets 会被自动设置。
# kubectl run nginx --image=nginx --restart=Never
# kubectl get pod nginx -o=jsonpath='{.spec.imagePullSecrets[0].name}{"\n"}'
输出为:myregistrykey
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2021-03-23 Elasticsearch:同步 MongoDB 数据到 Elasticsearch
2021-03-23 Elasticsearch:Elasticsearch-head - 用于浏览和与 Elasticsearch 集群进行交互的 Web 前端
2021-03-23 Logstash:解析 JSON 文件并导入到 Elasticsearch 中
2021-03-23 Logstash:使用 Logstash 导入 CSV 文件示例
2021-03-23 Logstash:如何处理 Logstash pipeline 错误信息
2021-03-23 Elasticsearch:定制分词器(analyzer)及相关性
2021-03-23 Elasticsearch:理解 mapping 中的 null_value