如何在Kubernetes中配置使用不安全镜像仓库部署应用?
Kubernetes中从不安全镜像仓库部署应用的配置方法
在Docker环境中你通过修改daemon.json配置不安全镜像仓库,但Kubernetes没有直接的命名空间级配置项,不过可以通过以下两种方案实现需求:
方案1:节点级全局配置(和Docker逻辑一致)
如果集群所有节点都需要访问这个不安全仓库,直接在每个K8s节点上修改容器运行时的配置:
针对Docker运行时:
- 编辑
/etc/docker/daemon.json,添加仓库地址:
{ "insecure-registries": ["your-registry-hostname:port"] }
- 重启Docker和kubelet服务:
systemctl restart docker systemctl restart kubelet
配置完成后,整个节点上的所有Pod都能拉取该仓库的镜像,无需额外在命名空间或应用中配置。
针对containerd运行时:
- 编辑
/etc/containerd/config.toml,找到[plugins."io.containerd.grpc.v1.cri".registry.configs]部分,添加:
[plugins."io.containerd.grpc.v1.cri".registry.configs."your-registry-hostname:port".tls] insecure_skip_verify = true
- 重启containerd服务:
systemctl restart containerd
方案2:命名空间/应用级配置(使用ImagePullSecret)
如果只需要特定命名空间下的应用访问该仓库,或者不想修改节点配置,可以通过创建ImagePullSecret来实现:
- 在目标命名空间创建Docker配置类型的Secret:
先创建一个包含仓库认证和不安全配置的config.json文件(仓库无认证时,auths部分可留空):
{ "auths": { "your-registry-hostname:port": { "username": "your-username", "password": "your-password" } }, "insecure-registries": ["your-registry-hostname:port"] }
然后用这个文件生成Secret:
kubectl create secret generic regcred \ --from-file=.dockerconfigjson=./config.json \ --type=kubernetes.io/dockerconfigjson \ -n your-target-namespace
- 关联Secret到命名空间默认ServiceAccount:
这样该命名空间下所有Pod都会自动使用这个Secret拉取镜像:
kubectl patch serviceaccount default \ -p '{"imagePullSecrets": [{"name": "regcred"}]}' \ -n your-target-namespace
- 或者直接在Deployment中指定:
如果只想让某个应用使用该Secret,在Deployment的Pod模板中添加imagePullSecrets字段:
apiVersion: apps/v1 kind: Deployment metadata: name: your-app-deployment namespace: your-target-namespace spec: replicas: 1 selector: matchLabels: app: your-app template: metadata: labels: app: your-app spec: imagePullSecrets: - name: regcred containers: - name: your-app-container image: your-registry-hostname:port/your-image:tag
注意事项
- 务必确保仓库地址(主机名和端口)填写准确,否则会出现镜像拉取失败的错误。
- 若仓库不需要认证,
config.json中的auths部分可仅保留空对象,重点保留insecure-registries配置项即可。
内容的提问来源于stack exchange,提问作者Abdul Salam
相关产品推荐
相关产品推荐

