如何在 nginx 入口控制器和 kong 上增加最大请求正文大小

Posted

技术标签:

【中文标题】如何在 nginx 入口控制器和 kong 上增加最大请求正文大小【英文标题】:How to increase max request body size on nginx ingress controller and kong 【发布时间】:2019-12-11 05:52:48 【问题描述】:

我有一项服务,它接受正文中带有 base64 编码文件的 POST。我目前正在 Error: 413 Request Entity Too Large 当我发布大于 1MB 的内容时,它可以正常工作。

我的设置有 kong 代理到该服务。我通过 stable kong helm 图表安装了代理入口的以下注释:

      kubernetes.io/ingress.class: "nginx"
      ingress.kubernetes.io/ssl-redirect: “true”
      ingress.kubernetes.io/proxy-body-size: 50m

我还将这个添加到 kong env 值中:

client_max_body_size: 0

我的理解是这应该更新 nginx.conf

Kong 前面有一个 nginx-ingress,我用 stable helm chart 安装了它。对于我设置的入口控制器:

--set controller.config.proxy-body-size: "50m"

但是,这些设置都不起作用。查看 ingress-controller 的 pod 日志,我看到:

2019/08/02 15:01:34 [warn] 42#42: *810139 a client request body is buffered to a temporary file /tmp/client-body/0000000014, client: 1X.XXX.X0.X, server: example.com, request: "POST /endpoint HTTP/1.1", host: "example.com"

以及kong pod中对应的log:

2019/08/02 15:01:39 [warn] 33#0: *1147388 a client request body is buffered to a temporary file /usr/local/kong/client_body_temp/0000000017, client: XX.XXX.XXX.XX, server: kong, request: "POST /ENDPOINT HTTP/1.1", host: "example.com"
10.120.20.17 - - [02/Aug/2019:15:01:39 +0000] "POST /endpoint HTTP/1.1" 413 794 "-" "PostmanRuntime/7.15.2"

我是否缺少其他设置,或者我正在处理这个错误?我怎样才能让它按预期工作。

如果我只是直接使用它的 IP 发布到 pod,则不涉及任何入口控制器,我会收到相同的 413 错误。 Kubernetes 是否有一个默认入口也需要更改?

【问题讨论】:

如果你把client-max-body-size设置成proxy-body-size50m呢?请参阅413 Request Entity Too Large 和File upload limit in Kubernetes & Nginx 我也试过了。原来这是对实际吊舱的限制。这些是无 kubeless 的 pod,并且限制在瓶子上。 所以kong pod不接受POST,对吧? 【参考方案1】:

注释似乎工作正常。我遇到的限制是因为我正在测试的代码是在 kubeless 中。 kubeless 函数使用瓶子,入口限制在瓶子上。我在 kubeless 的自定义 python3.7 映像中增加了它,并且一切正常。

【讨论】:

以上是关于如何在 nginx 入口控制器和 kong 上增加最大请求正文大小的主要内容,如果未能解决你的问题,请参考以下文章

Kong 如何在 NGINX 和 OpenResty 上工作

openresty 编译和WAF 组件安装配置

KONGAPI插件开发

如何修复 nginx 入口的“无法确保负载均衡器”错误

Kong Ingress Controller 对 Kong Plugins 没有影响

API Gateway——KONG简单入门