• Kubernetes
  • Nginx-Ingress 的配置造成上传文件报“413 Request Entity Too Large”

JFrog Container Registry 部署在 kubernetes里,通过应用路由对外发布,因为EIP地址有限,在配置应用路由之前,先添加外部服务 Service(externalName)

kind: Service
apiVersion: v1
metadata:
  name: rtifactory-jcr-service
  namespace: harbor-project
  labels:
    app: rtifactory-jcr-service
  annotations:
    kubesphere.io/creator: admin
    kubesphere.io/description: 暴露rtifactory-jcr服务
    kubesphere.io/serviceType: externalservice
spec:
  type: ExternalName
  sessionAffinity: None
  externalName: artifac-0wpgrs-artifactory.rtifactory-jcr

然后再添加 ingress,

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: ks-console-ingress
  namespace: harbor-project
  annotations:
    kubesphere.io/creator: admin
    kubesphere.io/description: 暴露kubesphere console,禁止删除
spec:
  tls:
    - hosts:
      - ks.demo.com
    secretName: ks-console-tls              # 先在配置中心添加 TLS 类型的密钥 (Secret)
  rules:
    - host: jfrog.demo.com
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              serviceName: ks-console-service
              servicePort: 80

按照如上方案配置之后,将 JFrog Container Registry 服务暴露出去,通过 docker push 命令上传镜像的时候产生如下报错:

root@harbor-server:~# docker push jfrog.demo.com/library/postgres:9.6
The push refers to repository [jfrog.demo.com/library/postgres]
b097a9d04b28: Pushed
be0b05b5390f: Pushed
8e48dc53f4bb: Pushed
ee526a2916bf: Pushed
171411a85828: Pushed
cc03f5799485: Pushing [==================================================>] 111.8MB/111.8MB
05be9b26ce19: Pushed
fa3932cf6acb: Pushed
10a20528501b: Pushed
90e6521e6178: Pushing [=======> ] 2.491MB/16.53MB
1d466e69ce2b: Pushing [=============================> ] 2.408MB/4.145MB
100bfb61c8b5: Pushed
13f611a9c539: Pushing [====> ] 879.1kB/10.24MB
c0a294e617df: Waiting
error parsing HTTP 413 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>413 Request Entity Too Large</title></head>\r\n<body>\r\n<center><h1>413 Request Entity Too Large</h1></center>\r\n<hr><center>nginx/1.19.2</center>\r\n</body>\r\n</html>\r\n"

同样其它的应用在上传大文件的时候都报 “413 Request Entity Too Large” 错误。

互联网搜了一下原因,也查看了一下 helm 部署 harbor 时应用路由的配置,发现是是上传文件的大小超出了 nginx-ingress 的大小限制,在 Ingress 配置的 annotations 字段添加以下内容可以解决该问题:

nginx.ingress.kubernetes.io/proxy-body-size: '0'             # 修改为0表示不限制大小