欢迎光临
我们一直在努力

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安全实践中保护私有镜像访问的重要部分。

    赞(0)
    未经允许不得转载:171主机测评 » Kubernetes从私有镜像仓库拉取容器镜像时的身份验证
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址