Как увеличить лимит на размер загружаемого файла для 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

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

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

В этой статье мы рассмотрим пошаговую настройку кластера Kubernetes на Ubuntu 24.04 с тремя узлами: один мастер (который также может запускать пользовательские поды) и два рабочих узла. Мы настроим PersistentVolume…

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

В рамках создания собственного кластера Kubernetes я поднаял кластер Mysql который работает в режиме Master-Slave и Slave-узлы соответственно работают в режиме read-only, а мастер в read-write. Соответственно мне нужен балансировщик…

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

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

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

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования