AWS ALB / Cloudfront文件上传-返回状态码413

时间:2020-02-20 16:18:53

标签: amazon-web-services amazon-cloudfront amazon-elb kubernetes-ingress

上下文

我正在使用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"
  ...
    }
...

知道我为什么要得到这个吗?

2 个答案:

答案 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 以在需要时下载