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

Kubernetes中Docker Registry上传大于1GB镜像失败求助

解决Docker Registry大镜像层上传重试问题

一、优化Nginx Ingress配置

针对你的Ingress配置,做以下调整:

  • 替换错误的客户端最大请求体注解:将nginx.org/client-max-body-size: "0"改为nginx.ingress.kubernetes.io/client-max-body-size: "0"(0表示不限制大小,适配nginx-ingress控制器的正确注解)
  • 清理configuration-snippet中的重复设置:移除重复的proxy_http_version 1.1和X-Forwarded-For配置,避免规则冲突
  • 添加客户端请求超时注解:增加nginx.ingress.kubernetes.io/client-body-timeout: "600"和nginx.ingress.kubernetes.io/client-header-timeout: "600",防止大文件上传时客户端侧超时中断
  • 调整keepalive连接设置:添加nginx.ingress.kubernetes.io/keepalive-requests: "1000"和nginx.ingress.kubernetes.io/keepalive-timeout: "600",保障长连接稳定性

修改后的Ingress关键注解示例:

annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: {{ .Values.certManager.name }}
    nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/client-max-body-size: "0"  # 替换为控制器适配的注解
    nginx.ingress.kubernetes.io/proxy-buffering: "off"
    nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
    nginx.ingress.kubernetes.io/proxy_ignore_headers: "X-Accel-Buffering"
    nginx.ingress.kubernetes.io/connection-proxy-header: "keep-alive"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/client-body-timeout: "600"  # 新增客户端超时配置
    nginx.ingress.kubernetes.io/client-header-timeout: "600"  # 新增客户端超时配置
    nginx.ingress.kubernetes.io/keepalive-requests: "1000"  # 新增长连接请求数限制
    nginx.ingress.kubernetes.io/keepalive-timeout: "600"  # 新增长连接超时时间
    nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-next-upstream-tries: "10"
    nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
    nginx.ingress.kubernetes.io/proxy-body-size: "8192m"
    kubernetes.io/tls-acme: 'true'
    nginx.ingress.kubernetes.io/configuration-snippet: |
        more_set_headers "Host $http_host";
        more_set_headers "Upgrade $http_upgrade";
        more_set_headers "Connection keep-alive";
        more_set_headers "X-Real-IP $remote_addr";
        more_set_headers "X-Forwarded-Proto: https";
        more_set_headers "X-Forwarded-Ssl on";

二、调整Cloudflare相关设置

Cloudflare的默认限制会干扰大文件上传,需做以下修改:

  • 提升最大上传大小:在Cloudflare控制台「规则」→「传输规则」中,设置「最大上传大小」为至少10GB(或按需调整),覆盖默认100MB的限制
  • 关闭Rocket Loader:在「速度」→「优化」中禁用Rocket Loader,它会破坏长连接和大文件上传的稳定性
  • 设置缓存绕过规则:创建缓存规则,对Registry域名的所有POST/PUT请求设置「缓存级别:绕过缓存」,避免Cloudflare缓存上传请求导致中断
  • 延长HTTP超时:在「网络」→「HTTP超时」中,将「HTTP请求超时」调整为600秒(10分钟),与Ingress的超时设置保持一致

三、检查Docker Registry配置

确保Registry本身支持大文件上传:

  • 确认Registry配置文件(config.yml)中未设置max_content_length限制,或设置为足够大的值
  • 保持分块上传启用:Docker Registry默认支持分块上传,若手动修改过配置,确保storage模块未禁用该功能
  • 验证存储后端:检查Registry绑定的PVC或其他存储是否有足够空间、读写权限正常,避免写入失败触发重试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:05:32