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

如何让使用Containerd的Kubernetes默认使用Nexus私有镜像仓库?

解决Kubernetes+Containerd使用Nexus私有仓库的两个问题

问题1:未指定镜像仓库时仍从docker.io拉取

按以下顺序排查并修复:

  • 确保配置生效:修改/etc/containerd/config.toml后,必须重启containerd和kubelet服务,否则配置不会生效:

    systemctl restart containerd
    systemctl restart kubelet
    
  • 补充完整registry配置:仅配置mirror的endpoint还不够,需添加允许HTTP访问私有仓库的规则(你的Nexus用的是HTTP),在config.toml中追加:

    [plugins."io.containerd.grpc.v1.cri".registry.configs."192...:8082".tls]
      insecure_skip_verify = true
    

    这段配置让containerd跳过该私有仓库的HTTPS证书验证,允许HTTP请求。

  • 同步所有节点配置:确保集群中所有worker节点都更新了相同的config.toml,并且都执行了服务重启操作。

  • 排查containerd日志:通过日志确认镜像拉取逻辑是否走了配置的私有仓库:

    journalctl -u containerd -f | grep docker.io
    

问题2:指定Nexus地址拉取镜像失败

从Pod事件看,containerd默认用HTTPS访问你的Nexus但连接被拒绝,结合ping通但端口无法访问的情况,按以下步骤处理:

  • 验证端口真实可达性:ping是ICMP协议,不代表TCP端口开放,在worker节点上执行以下命令测试8082端口:

    # 测试HTTP访问是否正常
    curl http://repo.mm.mm:8082/v2/_catalog
    # 或直接测试端口连通性
    telnet repo.mm.mm 8082
    

    如果返回连接拒绝,说明Nexus的8082端口未对外暴露,或者防火墙/安全组阻止了worker节点的访问。

  • 配置containerd用HTTP访问该仓库:在/etc/containerd/config.toml中添加针对repo.mm.mm:8082的规则:

    [plugins."io.containerd.grpc.v1.cri".registry.configs."repo.mm.mm:8082".tls]
      insecure_skip_verify = true
    

    保存后重启containerd和kubelet,containerd就会改用HTTP访问你的Nexus仓库。

  • 检查Nexus自身配置:

    • 确认你创建的Docker代理仓库(指向docker.io)处于启用状态;
    • 确认仓库允许匿名拉取(如果未配置imagePullSecret的话);
    • 查看Nexus日志,排查是否有访问拒绝的记录。
  • 确认镜像存在性:确保Nexus中已缓存nginx:latest镜像,或者代理仓库能正常从docker.io拉取并缓存该镜像。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:25:36