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

K8s无法从MinIO存储后端的本地镜像仓库拉取镜像

问题分析与解决步骤

核心问题:Kubernetes集群拉取私有镜像时,域名解析到错误IP(XX.XXX.XXX.120),导致连接被拒绝。以下是针对性的排查和解决方法:

1. 修正K8s节点的hosts映射

你仅在本地机器配置了/etc/hosts,但Kubernetes的所有工作节点都需要正确的域名-IP映射(因为是节点上的kubelet负责拉取镜像):

  • 登录每个K8s工作节点,编辑/etc/hosts,添加正确的映射:
    XX.XXX.XXX.32 proj.name.registry
    
    注意:你当前hosts里写的是charity.ches.registry,但镜像使用的是proj.name.registry,这两个域名必须一致,否则解析无效。

2. 验证节点上的域名解析

在每个K8s节点执行以下命令,确认域名解析结果:

nslookup proj.name.registry
# 或
dig proj.name.registry

如果返回的IP仍是XX.XXX.XXX.120,说明:

  • hosts配置未生效(可重启节点的dnsmasq或network服务)
  • 节点使用的DNS服务器中存在该域名的错误记录,需修改DNS配置或优先使用hosts解析

3. 排查Service配置的有效性

你创建的Service仅适用于私有仓库部署在K8s集群内的场景:

  • 如果仓库是集群外部服务:该Service完全无效,可直接删除,无需通过Service访问外部仓库
  • 如果仓库是集群内部服务:需确认:
    • 仓库Deployment的labels包含app: ches-registry(与Service的selector匹配)
    • 仓库Pod处于Running状态,且targetPort与仓库实际监听端口一致

4. 临时绕过域名解析问题

若域名解析问题暂时无法解决,可直接在Deployment中使用IP替代域名:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: registry-test
  namespace: ches
  labels:
    app: registry-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: registry-test
  template:
    metadata:
      labels:
        app: registry-test
    spec:
      containers:
      - name: registry-test
        image: XX.XXX.XXX.32:5045/hello-world  # 替换为仓库IP
      imagePullSecrets:
        - name: ches-registry-secret

注意:如果你的ches-registry-secret是基于域名创建的,需重新创建针对该IP的Secret:

kubectl create secret docker-registry ches-registry-secret \
  --docker-server=XX.XXX.XXX.32:5045 \
  --docker-username=<你的用户名> \
  --docker-password=<你的密码> \
  --namespace=ches

5. 检查节点与仓库的网络连通性

在K8s节点执行以下命令,验证仓库端口是否可达:

curl -k https://XX.XXX.XXX.32:5045/v2/_catalog

如果连接失败,需排查:

  • 仓库服务器的防火墙是否开放5045端口
  • 集群与仓库之间的网络策略、安全组是否允许TCP 5045端口的通信

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:01:04