kubernetes Nginx Ingress返回413 Entity Too Large

hgc7kmma  于 2023-05-16  发布在  Kubernetes
关注(0)|答案(8)|浏览(179)

在我的群集上,我试图上传一个大文件,但当我尝试时,我得到413 Error

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.3</center>\r\n</body>\r\n</html>\r\n"

我知道这是由nginx的默认参数引起的,我需要覆盖它。在文档中,我发现这可以通过两种方式完成:
1.在入口配置上使用注解
1.使用configMap
两种方法我都试过了,没有结果。
以下是我的YAML:ingress.yml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-body-size: "700m"
  name: nginx-ingress
spec:
  rules:
    - host: example.com
      http:
        paths:
          - backend:
              serviceName: nginx-service
              servicePort: 80
            path: /

configmap.yml:

apiVersion: v1
data:
  proxy-body-size: "800m"
kind: ConfigMap
metadata:
  name: ingress-nginx-controller
  labels:
    app.kubernetes.io/name: nginx-ingress
    app.kubernetes.io/part-of: nginx-ingress
zour9fqk

zour9fqk1#

对于未来的搜索,它为我工作:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
  name: docker-registry
  namespace: docker-registry
spec:
yqlxgs2m

yqlxgs2m2#

对于NGINX,当请求中的大小超过客户端请求体的最大允许大小时,将向客户端返回413错误。此大小可通过参数配置
为了针对所有Ingress规则全局地配置该设置,可以在NGINX ConfigMap中设置代理主体大小值。要在Ingress规则中使用自定义值,请定义以下注解:

nginx.ingress.kubernetes.io/proxy-body-size: 8m

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#custom-max-body-size
对于node.js,您可以设置

app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ limit: '50mb' }));
332nm8kg

332nm8kg3#

我在GKE上使用Nginx Ingress时遇到了同样的问题。
以下是对我有用的注解:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.org/client-max-body-size: "0"
    nginx.org/proxy-connect-timeout: 600s
    nginx.org/proxy-read-timeout: 600s

别忘了为你输入正确的值。
有关更多详细信息,您可以查看这些文档:
1.使用注解
1.客户端最大正文大小

PS我已经在this tutorial后面安装了“Nginx Ingress Controller”。

0yycz8jy

0yycz8jy4#

这里已经有一些很好的答案来避免413
例如,使用以下注解编辑Ingress(更好的重新部署):

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"

此外,对于NGINX,当请求中的大小超过客户端请求体的最大允许大小时,将向客户端返回413错误。此大小可以通过参数client_max_body_size参考配置。

carvr3hs

carvr3hs5#

下面的配置为我工作:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: cs-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 16m

参考:https://github.com/kubernetes/ingress-nginx/issues/4825

zpjtge22

zpjtge226#

在设置此设置时,需要考虑以下几点:
1.最好重新创建Ingress对象,而不是编辑它,以确保配置将被正确加载。删除Ingress并使用适当的注解重新创建它。
1.如果仍然不起作用,您可以尝试使用ConfigMap方法,例如:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
data:
  proxy-body-size: "8m"

1.请注意,将size设置为0将禁用对客户端请求正文大小的检查。
1.请记住将该值设置为大于您尝试推送的数据大小。
1.根据您的Kubernetes版本使用适当的apiVersion。请注意:
Ingress的extensions/v1beta1networking.k8s.io/v1beta1 API版本将不再在v1.22中提供。

  • 迁移清单和API客户端以使用networking.k8s.io/v1 API版本(自v1.19起可用)。
  • 所有现有的持久化对象都可以通过新的API访问
kt06eoxx

kt06eoxx7#

也许我的经验可以帮助别人。我在nginx中的所有设置都是OK的,但nginx在代理模式下站在CloudFlare后面。因此,请尝试将其设置为“仅DNS”,以确保您和nginx之间没有任何内容。

piah890a

piah890a8#

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
    nginx.org/proxy_read_timeout: "720s"
    nginx.ingress.kubernetes.io/proxy-body-size: "0"

以上设置在AKS nginx上适用。零意味着没有限制,如果用户想要应用上传限制,只需将0替换为所需的限制,如150m。

相关问题