Как увеличить лимит на размер загружаемого файла для Ingress контроллера

Оцените статью

После переноса 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

Похожие записи

Трассировка WordPress для определения узких мест

Я обратил внимание, что у меня в блоге стала ужасно долго открываться админка и значит пришло время разобраться как эти ваши PHP вообще трассировать и нормально отлаживать. Чтобы провести трассировку…

Менеджер баз данных Postgresql упакованных в Docker (Postgresql Docker Manager)

Доделал интересную приложуху для управления базами данных Postgresql упакованными в Docker. Возникла необходимость управления большим количеством баз данных и самые прожорливые отсадить в отдельные контейнеры урезав им аппетит по ресурсам.…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Трассировка WordPress для определения узких мест

Трассировка WordPress для определения узких мест

Как увеличить лимит на размер загружаемого файла для Ingress контроллера

Как увеличить лимит на размер загружаемого файла для Ingress контроллера

Менеджер баз данных Postgresql упакованных в Docker (Postgresql Docker Manager)

Менеджер баз данных Postgresql упакованных в Docker (Postgresql Docker Manager)

Автоматизированное получение Let’s encrypt сертификатов для Ingress Nginx при помощи cert‑manager

Автоматизированное получение Let’s encrypt сертификатов для Ingress Nginx при помощи cert‑manager

Тестовый кластер Kubernetes в Docker Desktop

Тестовый кластер Kubernetes в Docker Desktop

Хранилище артефактов (Docker) Cloud.ru

Хранилище артефактов (Docker) Cloud.ru