k8s 国内无法下载docker images的分析

国内不能下载image, 报错信息如下,

复制代码
[root@hz-shtop-1 ~]# docker pull hub.c.163.com/kubesphere/kindest-node:v1.35.0
Error response from daemon: failed to resolve reference "hub.c.163.com/kubesphere/kindest-node:v1.35.0": failed to do request: Head "https://hub.c.163.com/v2/kubesphere/kindest-node/manifests/v1.35.0": dial tcp 106.2.45.245:443: i/o timeout

遇到的是拉取网易云 kindest-node:v1.35.0 镜像时网络超时i/o timeout),核心原因是服务器到网易云镜像仓库的网络链路不通(可能是防火墙/代理限制、网络带宽不足,或 v1.35.0 版本在该镜像源未同步)。我会给你「降级版本+离线加载」的终极解决方案,彻底绕开网络问题。

一、核心错误分析

复制代码
dial tcp 106.2.45.245:443: i/o timeout
  • 服务器能解析 hub.c.163.com 的 IP(106.2.45.245),但无法建立 TCP 连接(443端口),属于网络层不通
  • v1.35.0 是较新版本,网易云镜像源可能未同步该版本,进一步加剧拉取失败。

二、终极解决方案:离线加载镜像(完全绕开网络)

步骤1:在能上网的机器(本地/其他服务器)下载镜像

找一台有外网的机器(比如你的本地电脑),执行以下命令下载稳定版本的 kindest-node 镜像:

bash 复制代码
# 推荐下载 v1.28.0(国内镜像源覆盖最全、最稳定)
docker pull hub.c.163.com/kubesphere/kindest-node:v1.28.0

# 将镜像保存为 tar 包(方便拷贝到目标服务器)
docker save hub.c.163.com/kubesphere/kindest-node:v1.28.0 > kind-node-v1.28.0.tar

# 可选:若需要 v1.30.0,也可下载(成功率高于 v1.35.0)
# docker pull hub.c.163.com/kubesphere/kindest-node:v1.30.0
# docker save hub.c.163.com/kubesphere/kindest-node:v1.30.0 > kind-node-v1.30.0.tar
步骤2:将 tar 包拷贝到目标服务器(hz-shtop-1)

scp 命令拷贝(替换「本地路径」和「服务器IP」):

bash 复制代码
# 本地执行:拷贝 tar 包到目标服务器的 /root 目录
scp /本地路径/kind-node-v1.28.0.tar root@hz-shtop-1:/root/
步骤3:在目标服务器加载镜像并打标签

登录 hz-shtop-1 服务器,执行以下命令:

bash 复制代码
# 1. 加载镜像到 Docker 本地仓库
docker load < /root/kind-node-v1.28.0.tar

# 2. 给镜像打标签(匹配 Kind 期望的默认名称,避免路径问题)
docker tag hub.c.163.com/kubesphere/kindest-node:v1.28.0 kindest/node:v1.28.0

# 验证镜像是否加载成功(能看到 kindest/node:v1.28.0 即为成功)
docker images | grep kindest-node
步骤4:基于本地镜像创建 Kind 集群

跳过网络拉取,直接使用本地镜像创建集群:

bash 复制代码
# 1. 删除之前失败的集群残留
kind delete cluster --name kind

# 2. 创建集群(指定本地镜像,跳过预检查)
kind create cluster \
  --image kindest/node:v1.28.0 \
  --name kind \
  --skip-preflight-checks  # 跳过镜像拉取检查,强制用本地镜像

三、验证集群创建成功

执行以下命令确认状态:

bash 复制代码
# 1. 查看 Kind 集群列表
kind get clusters
# 输出 "kind" 表示集群创建成功

# 2. 查看节点状态(Status 为 Ready 即为正常)
kubectl get nodes
# 预期输出:
NAME                 STATUS   ROLES           AGE   VERSION
kind-control-plane   Ready    control-plane   20s   v1.28.0

四、备选方案:检查服务器网络(若能调整网络策略)

如果你的服务器允许调整网络配置,可尝试以下操作解决超时问题:

  1. 临时关闭防火墙/SELinux (测试用,生产需谨慎):

    bash 复制代码
    systemctl stop firewalld
    setenforce 0
  2. 配置 Docker 代理 (若服务器需通过代理上网):
    编辑 /etc/docker/daemon.json

    json 复制代码
    {
      "proxies": {
        "default": {
          "httpProxy": "http://你的代理IP:端口",
          "httpsProxy": "http://你的代理IP:端口",
          "noProxy": "localhost,127.0.0.1,192.168.0.0/16"
        }
      }
    }

    重启 Docker:

    bash 复制代码
    systemctl daemon-reload
    systemctl restart docker
  3. 改用更低版本 (v1.27.0/v1.26.0):
    这些版本在国内镜像源的同步率更高,拉取成功率也更高:

    bash 复制代码
    docker pull hub.c.163.com/kubesphere/kindest-node:v1.27.0

总结

  1. 核心问题:服务器到网易云镜像仓库的网络链路不通,且高版本镜像未同步;
  2. 终极方案:离线下载镜像→拷贝到服务器→加载镜像→创建集群,完全绕开网络限制;
  3. 关键版本:优先选 v1.28.0(稳定、镜像源覆盖全),避免 v1.35.0 这类高版本;
  4. 验证重点 :加载镜像后用 docker images 确认标签正确,创建集群时加 --skip-preflight-checks 跳过校验。

如果执行 kind create cluster 后仍有报错,提供完整的错误输出,我会帮你进一步定位问题。

相关推荐
养乐多q.♡2 小时前
docker镜像的nginx配置证书SSL,单独配置单个localtion使用证书,其他nginx配置不影响
nginx·docker·ssl
last demo4 小时前
docker镜像
运维·docker·容器
L1624765 小时前
Prometheus 监控 K8s 集群全指南(适配 K8s 特性 + 实操部署)
docker·容器·kubernetes
阿方索5 小时前
Kubernetes 1.28 高可用集群安装指南(Docker 运行时)
docker·容器·kubernetes
last demo6 小时前
docker基础
运维·docker·容器·eureka
咕叽咕叽的汪7 小时前
Es/Kibana7.17.9中数据迁移到openSearch3.4.0【DockerDesktop模拟】
运维·spring boot·elasticsearch·docker·容器·devops
xzl047 小时前
Docker Overlay2 迁移至 CentOS Home 完整指南
docker·eureka·centos
Mr. Cao code7 小时前
Docker文件数据卷实战:挂载与优化
运维·docker·容器
大佐不会说日语~8 小时前
Docker部署旧版本系统MySQL5.7+乱码问题解决方案
运维·docker·容器