我正在使用CloudFront,S3,ALB和Kubernetes运行我的应用程序。后端(即API)在Kubernetes(EKS)中运行,使用公共ALB公开。前端作为静态站点运行,托管在S3存储桶中,并通过cloudfront提供服务。所有这些都通过Terraform进行管理。
当我上传大于7MB的文件时,上传失败。如果我检查k8s容器中的API日志,则会看到:
Completed 413 Payload Too Large in 1651ms
您会看到返回了状态码413。
我的ALB代码段是:
resource "kubernetes_ingress" "example" {
metadata {
name = "example_name"
namespace = "example_namespace"
annotations = {
"kubernetes.io/ingress.class" = "alb"
"alb.ingress.kubernetes.io/scheme" = "internet-facing"
...
}
...
知道我为什么要得到这个吗?
答案 0 :(得分:0)
此限制可能与您的 nginx入口控制器的当前设置有关。正如您在其documentation中所读到的:
自定义最大机身尺寸
对于NGINX,当大小为5%时,将向客户端返回413错误 请求中的请求超出了客户端请求的最大允许大小 身体。可以通过参数配置此大小
client_max_body_size
。要为所有Ingress规则全局配置此设置,请 可以在NGINX ConfigMap中设置
proxy-body-size
的值。使用自定义 Ingress规则中的值定义以下注释:nginx.ingress.kubernetes.io/proxy-body-size: 8m
因此,如果您不想在 nginx入口控制器 ConfigMap
中全局设置此选项,可以通过在入口资源定义中添加以下注释来进行调整< / strong>:
nginx.ingress.kubernetes.io/proxy-body-size: 8m
让我知道是否有帮助。
答案 1 :(得分:0)
我认为请求包含超过 6mb 的主体有效负载,alb 不支持并且抛出 413 错误。我仍然面临这个问题,同样的基础设施,除了我们有 AWS lambda 的无服务器主机。我尝试过的简单解决方案是使用前端将文件上传到 AWS s3 并生成预签名 URL 以在需要时下载