Kubernetes从私有镜像仓库拉取容器镜像时的身份验证方式

 更新时间:2026年01月26日 15:43:30   作者:ICT董老师  
Kubernetes从私有镜像仓库拉取容器镜像时,需要使用私有仓库的凭证进行身份验证,这些凭证可以存储在`private-registry-auth`这个Secret中,然后在Pod或ServiceAccount中指定使用该Secret,这样可以确保Pod在拉取镜像时能够正确进行身份验证

Kubernetes从私有镜像仓库拉取容器镜像时的身份验证

1.访问私有镜像仓库

当你的Docker镜像存储在私有镜像仓库(如私有Docker Hub、Harbor、ACR、ECR等)时,需要凭据才能拉取镜像。

当Pod被调度到某个节点上时,kubelet会尝试拉取Pod中指定的镜像。如果镜像位于私有仓库,kubelet就会使用private-registry-auth这个Secret中的凭证去拉取。

注意:如果Pod中指定了多个镜像,且来自不同的私有仓库,那么可能需要多个imagePullSecret,每个对应一个仓库。或者,也可以创建一个包含多个仓库凭证的Secret(但一个Secret通常只对应一个仓库)。

另外,除了在Pod级别指定imagePullSecrets,还可以在ServiceAccount级别指定,这样所有使用该ServiceAccount的Pod都会自动使用这些imagePullSecrets,避免了在每个Pod中重复配置。

2.提供认证凭据

private-registry-auth 是一个提前创建的Secret对象,包含:

  • 用户名和密码
  • 或Docker配置JSON文件
  • 或访问令牌

创建对应的Secret

需要提前创建这个Secret:

# 方法1:使用用户名密码创建
kubectl create secret docker-registry private-registry-auth \
  --docker-server=<registry-url> \
  --docker-username=<username> \
  --docker-password=<password> \
  --docker-email=<email>

# 方法2:使用已有的docker config文件
kubectl create secret generic private-registry-auth \
  --from-file=.dockerconfigjson=/path/to/.docker/config.json \
  --type=kubernetes.io/dockerconfigjson

使用场景示例

yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  template:
    spec:
      imagePullSecrets:
      - name: private-registry-auth  # 引用之前创建的Secret
      containers:
      - name: app
        image: private-registry.example.com/mycompany/app:v1.0  # 私有镜像

工作原理

  • Pod创建时:kubelet从私有仓库拉取镜像
  • 身份验证:使用imagePullSecrets中的凭据进行认证
  • 镜像拉取:认证成功后拉取镜像到节点

最佳实践

yaml

# 可以将imagePullSecrets绑定到ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
imagePullSecrets:
- name: private-registry-auth  # 所有使用这个SA的Pod都会自动继承

# 然后在Pod中引用这个ServiceAccount
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  serviceAccountName: default  # 自动获得imagePullSecrets
  containers:
  - name: app
    image: private.registry/app:v1

替代方案比较

方式优点缺点
Pod级imagePullSecrets灵活,不同Pod可用不同凭据每个Pod都要配置
ServiceAccount级统一管理,减少重复配置所有使用该SA的Pod共享凭据
节点级配置在节点docker daemon配置不推荐,安全性差

这个配置是现代Kubernetes安全实践中保护私有镜像访问的重要部分。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • K8s PV和PVC持久化存储详解

    K8s PV和PVC持久化存储详解

    Kubernetes PV由管理员创建,支持多种存储类型,提供生命周期管理,PVC请求PV资源,需匹配大小、存储类和访问模式,并在同一命名空间,回收策略包括Retain、Delete和Recycle,生产环境建议使用NAS而非NFS
    2025-08-08
  • K8S的dashboard使用token登录的操作流程

    K8S的dashboard使用token登录的操作流程

    Dashboard 支持 Kubeconfig 和 Token 两种认证方式,这里测试 Token 认证方式登录,本文介绍K8S的dashboard如何使用token登录,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • Kubernetes安装Jenkins的思路详解

    Kubernetes安装Jenkins的思路详解

    这篇文章主要介绍了Kubernetes安装Jenkins,Jenkins插件可以在Kubernetes集群中运行动态jenkins-slave代理,基于Kubernetes的docker,自动化在Kubernetes中运行的Jenkins-slave代理的缩放,需要的朋友可以参考下
    2022-06-06
  • k8s中pod不停重启问题定位原因与解决方法

    k8s中pod不停重启问题定位原因与解决方法

    这篇文章主要给大家介绍了关于k8s中pod不停重启问题定位原因与解决方法的相关资料,Kubernetes是一款高度可扩展、可靠的容器编排和管理系统,它简化了容器的部署、管理和自动化操作,需要的朋友可以参考下
    2023-08-08
  • K8S内部pod之间相互调用案例以及详解

    K8S内部pod之间相互调用案例以及详解

    这篇文章主要给大家介绍了关于K8S内部pod之间相互调用案例的相关资料,Pod是Kubernetes中最小的可部署单元,它是一个或多个容器的集合,它们共享网络和存储资源,并在同一节点上运行,需要的朋友可以参考下
    2023-08-08
  • 云原生要素配置分离ConfigMap创建方式

    云原生要素配置分离ConfigMap创建方式

    这篇文章主要为大家介绍了云原生要素配置分离ConfigMap以及多种创建方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • K8s内存溢出问题剖析之排查与解决过程

    K8s内存溢出问题剖析之排查与解决过程

    这篇文章主要介绍了K8s内存溢出问题剖析之排查与解决过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • 云原生技术kubernetes(K8S)简介

    云原生技术kubernetes(K8S)简介

    这篇文章主要介绍了云原生技术kubernetes的相关资料,帮助大家更好的理解和学习使用K8S,感兴趣的朋友可以了解下
    2021-03-03
  • 一文详解基于k8s部署Session模式Flink集群

    一文详解基于k8s部署Session模式Flink集群

    这篇文章主要为大家介绍了基于k8s部署Session模式Flink集群详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 理解k8s控制器DaemonSet创建及使用场景

    理解k8s控制器DaemonSet创建及使用场景

    这篇文章主要为大家介绍了k8s控制器DaemonSet创建及使用场景详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论