После переноса Next Cloud в Kubernetes оказалось, что типовой настройки мне не хватило и файлы не пролезают через Ingress контроллер и чтобы увеличить лимит на размер загружаемого файла для Ingress‑контроллера, нужно настроить соответствующие параметры и способ зависит от типа контроллера.
NGINX Ingress Controller
Есть два основных способа:
Через аннотации в ресурсе Ingress (этот метод я и использовал и он работает, остальные поискал по интернету может кому пригодится)
Добавьте аннотации в манифест Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "50m" # лимит размера тела запроса
nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
nginx.ingress.kubernetes.io/proxy-send-timeout: "60"
nginx.ingress.kubernetes.io/proxy-read-timeout: "60"
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Через ConfigMap контроллера
Отредактируйте ConfigMap для NGINX Ingress Controller:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
data: Normally, this would be the ConfigMap data
proxy-body-size: "50m"
proxy-connect-timeout: "30"
proxy-send-timeout: "60"
proxy-read-timeout: "60"
Важные аннотации для NGINX:
- nginx.ingress.kubernetes.io/proxy-body-size — максимальный размер тела запроса (например, «50m» для 50 МБ, «0» — без ограничений);
- nginx.ingress.kubernetes.io/proxy-connect-timeout — таймаут подключения к бэкенду (в секундах);
- nginx.ingress.kubernetes.io/proxy-send-timeout — таймаут отправки данных к бэкенду;
- nginx.ingress.kubernetes.io/proxy-read-timeout — таймаут чтения данных от бэкенда.
Traefik Ingress Controller
Используйте аннотации в IngressRoute:
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: my-ingressroute
spec:
entryPoints:
- web
routes:
- match: PathPrefix(`/`)
kind: Rule
services:
- name: my-service
port: 80
middlewares:
- name: large-upload
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: large-upload
spec:
headers:
customRequestHeaders:
X-Max-Body-Size: "52428800" # 50 МБ в байтах
Либо настройте через ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: traefik
data:
traefik.toml: |
[entryPoints.web]
address = ":80"
[entryPoints.web.http.middlewares]
[entryPoints.web.http.middlewares.large-upload.headers]
customRequestHeaders = { "X-Max-Body-Size" = "52428800" }
HAProxy Ingress Controller
Используйте аннотации:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
haproxy.org/max-body-size: "50m"
haproxy.org/timeout-client: "60s"
haproxy.org/timeout-server: "60s"
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Istio Ingress Gateway
Настройте через VirtualService:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: my-virtualservice
spec:
hosts:
- "example.com"
gateways:
- my-gateway
http:
- headers:
request:
set:
x-max-body-size: "50m"
route:
- destination:
host: my-service
port:
number: 80




