Kubernetes ingress에서의 413 에러 해결 방법

Kubernetes에서 nginx-ingress를 사용한다면 파일 업로드 등 큰 데이터를 전송할 때 413 Request Entity Too Large 에러가 발생할 수 있습니다. 이는 nginx-ingress에서 기본적으로 가지고 있는 최대 body size가 크지 않게 추가되어 있어서 발생하는 문제로 아래와 같이 ingress의 annotation을 설정하여 해결할 수 있습니다.

nginx.org

nginx.org를 사용하는 ingress, 즉 nginx 자체에서 만든 ingress를 사용하는 경우 client-max-body-size를 이용해 설정합니다.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: your-app
  annotations:
    nginx.org/client-max-body-size: "1tb"

nginx.ingress.kubernetes.io

만약 k8s에서 만든 nginx-ingress를 사용하는 경우 proxy-body-size를 사용하여 설정합니다.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: your-app
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "1tb"

nginx-ingress의 이미지에 따라 annotation이 다른 이유는 각각 개발사(nginx/google)가 사용하는 naming convention이 다르기 때문입니다. 그래서 만약 k8s-nginx-ingress를 사용할 때는 아무리 client-max-body-size를 설정하여도 반응이 없고, 반대로 nginx-igress에선 proxy-body-size를 사용하여도 제대로 처리되지 않기 떄문에 이점 유의하여 적용하셔야할 것 같습니다.

참고로 미 설정 시 기본값은 1mb입니다.

Syntax: client_max_body_size size;
Default: client_max_body_size 1m;
Context: http, server, location

https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size