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

求助:K8s拉取Podman本地仓库镜像时出现连接拒绝错误

问题分析

kubelet尝试访问localhost:5001时出现连接拒绝,核心原因是:你用Podman搭建的本地镜像仓库大概率只绑定了主机的127.0.0.1地址,而K8s的容器运行时(如containerd)的网络上下文与主机命令行不同,或者仓库未监听虚拟机的实际网卡IP,导致kubelet无法建立连接。

解决方案

1. 修改镜像仓库的监听地址

默认启动的Podman仓库仅监听127.0.0.1,需改为监听所有可用网卡,确保节点的实际IP能访问仓库:

  • 停止并删除现有仓库容器:
podman stop registry
podman rm registry
  • 重新启动仓库,指定监听0.0.0.0:
podman run -d -p 0.0.0.0:5001:5000 --name registry registry:2

2. 替换镜像地址为节点实际IP

将K8s部署文件中的镜像引用从localhost:5001/datawire/aes:3.1.0改为虚拟机的实际网卡IP(比如192.168.1.100:5001/datawire/aes:3.1.0)。

kubelet运行在节点环境中,localhost指向节点自身,但容器运行时的网络与主机网络存在隔离,使用节点实际IP可确保请求能正确路由到镜像仓库。

3. 配置containerd允许访问非安全仓库

如果你的仓库是HTTP协议(未配置HTTPS),containerd默认会拒绝访问,需修改配置:

  • 编辑containerd配置文件/etc/containerd/config.toml,添加以下内容:
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."[你的仓库IP]:5001"]
  endpoint = ["http://[你的仓库IP]:5001"]
[plugins."io.containerd.grpc.v1.cri".registry.configs."[你的仓库IP]:5001".tls]
  insecure_skip_verify = true
  • 重启containerd服务:
sudo systemctl restart containerd

4. 验证仓库连通性

在节点上执行curl命令,确认仓库可正常访问:

curl http://[你的仓库IP]:5001/v2/datawire/aes/manifests/3.1.0

若能返回镜像manifest内容,说明仓库已可被节点正常访问,此时K8s即可拉取镜像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:55:19