You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GKE Containerd节点池从非安全Nexus镜像仓库认证拉取镜像的方法

可以实现,Containerd支持读取Docker格式的认证配置,但非安全镜像源的配置逻辑和Docker存在差异,以下是两种可行的落地方案:

方案1:节点级全局配置(集群内所有Pod无需额外配置即可拉取)

该方案会将认证和非安全源配置应用到节点池所有节点,适合整集群统一使用内部Nexus仓库的场景:

  • 配置非安全镜像源规则
    GKE节点的Containerd默认配置路径为/etc/containerd/config.toml,默认的证书配置目录为/etc/containerd/certs.d。
    首先创建对应Nexus仓库地址的专属配置目录,假设你的Nexus地址为nexus.internal:8080,执行命令:
    mkdir -p /etc/containerd/certs.d/nexus.internal:8080
    在该目录下创建hosts.toml文件,内容如下:
    server = "http://nexus.internal:8080"
    [host."http://nexus.internal:8080"]
      capabilities = ["pull", "resolve"]
      skip_verify = true
    
  • 配置仓库认证信息
    Containerd兼容Docker生成的config.json认证格式,你可以直接将本地Docker生成的包含Nexus认证的~/.docker/config.json内容,写入到节点的/var/lib/kubelet/config.json路径即可,Containerd和kubelet会自动读取该文件的认证信息。
  • 重启服务生效
    执行命令重启相关服务:systemctl restart containerd && systemctl restart kubelet
    验证配置是否生效可以执行:crictl pull nexus.internal:8080/你的镜像名:标签,能正常拉取即为配置成功。
    注意:如果使用GKE自动托管的节点池,节点重建、升级后手动修改的配置会被重置,建议通过DaemonSet方式批量自动注入配置,避免配置丢失。
方案2:Workload级独立配置(仅授权指定Pod拉取镜像)

该方案不需要修改节点配置,和K8s中Docker运行时的用法完全一致,仅适合部分业务需要使用该Nexus仓库的场景:

  • 第一步先创建镜像拉取Secret,直接执行以下命令即可:
    kubectl create secret docker-registry nexus-pull-secret --docker-server=nexus.internal:8080 --docker-username=Nexus登录账号 --docker-password=Nexus登录密码 --docker-email=test@example.com
    该命令底层就是生成Docker格式的认证配置并封装为K8s Secret,和你在Docker侧生成config.json的逻辑完全一致。
  • 第二步在业务Pod/工作负载的配置中引用该Secret即可,示例配置如下:
    apiVersion: v1
    kind: Pod
    metadata:
      name: test-demo
    spec:
      containers:
      - name: app
        image: nexus.internal:8080/biz/app:v1.0
      imagePullSecrets:
      - name: nexus-pull-secret
    

注意:非安全仓库的skip_verify配置仍然需要提前在节点侧配置,否则即使配置了Secret,也会因为HTTP仓库的证书校验失败无法拉取镜像。

内容的提问来源于stack exchange,提问作者LahiruSenevirathne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:54:01