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

K8s集群无法从Nexus私有仓库拉取镜像问题求助

解决Kubernetes从Nexus私有仓库拉取镜像失败(HTTP响应给HTTPS客户端)

核心问题分析

报错http: server gave HTTP response to HTTPS client说明Kubernetes使用的容器运行时没有将你的Nexus仓库标记为不安全仓库——你仅在Docker daemon中配置了insecure-registries,但如果K8s集群使用的是containerd(当前主流集群默认容器运行时),Docker的配置不会生效。

分步解决方案

1. 确认Kubernetes使用的容器运行时

执行命令查看节点的容器运行时:

kubectl get nodes -o wide

关注CONTAINER-RUNTIME列,比如containerd://1.6.20或docker://24.0.2,对应不同的配置方式。

2. 针对容器运行时配置不安全仓库

情况A:使用containerd

每个集群节点上执行以下操作:

  1. 编辑containerd配置文件:
    vi /etc/containerd/config.toml
    
  2. 找到并修改[plugins."io.containerd.grpc.v1.cri".registry]段,添加你的Nexus仓库配置:
    [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        # 配置镜像仓库地址映射
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."34.125.222.46:8083"]
          endpoint = ["http://34.125.222.46:8083"]
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        # 跳过TLS验证
        [plugins."io.containerd.grpc.v1.cri".registry.configs."34.125.222.46:8083".tls]
          insecure_skip_verify = true
    
  3. 重启containerd服务:
    systemctl restart containerd
    

情况B:使用Docker作为容器运行时

确保每个节点都完成了以下操作:

  1. 确认/etc/docker/daemon.json中已添加:
    {
      "insecure-registries": ["34.125.222.46:8083"]
    }
    
  2. 重启Docker和kubelet服务:
    systemctl restart docker
    systemctl restart kubelet
    

3. 验证镜像拉取密钥配置

  1. 检查Deployment清单中imagePullSecrets是否正确引用:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: springapp-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: springapp
      template:
        metadata:
          labels:
            app: springapp
        spec:
          containers:
          - name: springapp
            image: 34.125.222.46:8083/springapp:69
          # 确认这里引用了正确的密钥
          imagePullSecrets:
          - name: registry-secret
    
  2. 确认密钥是用正确命令创建的:
    kubectl create secret docker-registry registry-secret \
      --docker-server=34.125.222.46:8083 \
      --docker-username=你的Nexus用户名 \
      --docker-password=你的Nexus密码 \
      --docker-email=你的邮箱
    
  3. 可解码密钥验证内容:
    kubectl get secret registry-secret -o jsonpath='{.data.\.dockerconfigjson}' | base64 -d
    
    输出中应包含你的Nexus仓库地址、用户名和加密后的密码。

4. 额外排查点

  • 节点网络连通性:在每个集群节点上执行curl http://34.125.222.46:8083/v2/,确认能正常返回{}或仓库相关响应
  • Nexus镜像存在性:登录Nexus管理界面,确认springapp仓库下确实存在69标签的镜像
  • 本地集群特殊配置:如果是minikube/kind等本地集群,启动时需指定不安全仓库,比如:
    minikube start --insecure-registry=34.125.222.46:8083
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:53:09