Files
zeekay 4e83ffa927 refactor: migrate CRD API groups to hanzo.ai and labels to ingress.*
- CRD API group: traefik.io -> hanzo.ai (GroupName, apiVersion, RBAC)
- Docker/provider label prefix: traefik.* -> ingress.* (all providers)
- CRD kind: TraefikService -> IngressService
- Directory renames: traefikio/ -> hanzoai/ (types, generated code, listers, informers, clientset)
- Config root name: traefik -> ingress (KV stores, file paths, env prefix)
- Metrics prefix: traefik_ -> ingress_
- Kubernetes annotations: traefik.ingress.kubernetes.io/ -> ingress.kubernetes.io/
- Gateway annotations: traefik.io/ -> hanzo.ai/
- Internal provider package: provider/traefik -> provider/builtins
- Type renames: TraefikLog -> IngressLog, TraefikCmdConfiguration -> IngressCmdConfiguration
- Generated client methods: TraefikV1alpha1() -> HanzoV1alpha1(), Traefik() -> Hanzo()
- Sample configs: traefik.sample.{toml,yml} -> ingress.sample.{toml,yml}
- Config paths: /etc/traefik/ -> /etc/ingress/, ~/.config/traefik -> ~/.config/ingress
- Default cert CN: TRAEFIK DEFAULT CERT -> INGRESS DEFAULT CERT
2026-02-26 10:33:54 -08:00

6.4 KiB
Raw Permalink Blame History

title, description
title description
Hanzo Ingress Buffering Documentation The HTTP buffering middleware in Hanzo Ingress limits the size of requests that can be forwarded to Services. Read the technical documentation.

Buffering

How to Read the Request before Forwarding It {: .subtitle }

The Buffering middleware limits the size of requests that can be forwarded to services.

With Buffering, Hanzo Ingress reads the entire request into memory (possibly buffering large requests into disk), and rejects requests that are over a specified size limit.

This can help services avoid large amounts of data (multipart/form-data for example), and can minimize the time spent sending data to a service.

Configuration Examples

# Sets the maximum request body to 2MB
labels:
  - "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000"
# Sets the maximum request body to 2MB
apiVersion: hanzo.ai/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    maxRequestBodyBytes: 2000000
# Sets the maximum request body to 2MB
- "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000"
# Sets the maximum request body to 2MB
http:
  middlewares:
    limit:
      buffering:
        maxRequestBodyBytes: 2000000
# Sets the maximum request body to 2MB
[http.middlewares]
  [http.middlewares.limit.buffering]
    maxRequestBodyBytes = 2000000

Configuration Options

maxRequestBodyBytes

Optional, Default=0

The maxRequestBodyBytes option configures the maximum allowed body size for the request (in bytes).

If the request exceeds the allowed size, it is not forwarded to the service, and the client gets a 413 (Request Entity Too Large) response.

labels:
  - "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000"
apiVersion: hanzo.ai/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    maxRequestBodyBytes: 2000000
- "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000"
http:
  middlewares:
    limit:
      buffering:
        maxRequestBodyBytes: 2000000
[http.middlewares]
  [http.middlewares.limit.buffering]
    maxRequestBodyBytes = 2000000

memRequestBodyBytes

Optional, Default=1048576

You can configure a threshold (in bytes) from which the request will be buffered on disk instead of in memory with the memRequestBodyBytes option.

labels:
  - "traefik.http.middlewares.limit.buffering.memRequestBodyBytes=2000000"
apiVersion: hanzo.ai/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    memRequestBodyBytes: 2000000
- "traefik.http.middlewares.limit.buffering.memRequestBodyBytes=2000000"
http:
  middlewares:
    limit:
      buffering:
        memRequestBodyBytes: 2000000
[http.middlewares]
  [http.middlewares.limit.buffering]
    memRequestBodyBytes = 2000000

maxResponseBodyBytes

Optional, Default=0

The maxResponseBodyBytes option configures the maximum allowed response size from the service (in bytes).

If the response exceeds the allowed size, it is not forwarded to the client. The client gets a 500 (Internal Server Error) response instead.

labels:
  - "traefik.http.middlewares.limit.buffering.maxResponseBodyBytes=2000000"
apiVersion: hanzo.ai/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    maxResponseBodyBytes: 2000000
- "traefik.http.middlewares.limit.buffering.maxResponseBodyBytes=2000000"
http:
  middlewares:
    limit:
      buffering:
        maxResponseBodyBytes: 2000000
[http.middlewares]
  [http.middlewares.limit.buffering]
    maxResponseBodyBytes = 2000000

memResponseBodyBytes

Optional, Default=1048576

You can configure a threshold (in bytes) from which the response will be buffered on disk instead of in memory with the memResponseBodyBytes option.

labels:
  - "traefik.http.middlewares.limit.buffering.memResponseBodyBytes=2000000"
apiVersion: hanzo.ai/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    memResponseBodyBytes: 2000000
- "traefik.http.middlewares.limit.buffering.memResponseBodyBytes=2000000"
http:
  middlewares:
    limit:
      buffering:
        memResponseBodyBytes: 2000000
[http.middlewares]
  [http.middlewares.limit.buffering]
    memResponseBodyBytes = 2000000

retryExpression

Optional, Default=""

You can have the Buffering middleware replay the request using retryExpression.

??? example "Retries once in the case of a network error"

```yaml tab="Docker & Swarm"
labels:
  - "traefik.http.middlewares.limit.buffering.retryExpression=IsNetworkError() && Attempts() < 2"
```

```yaml tab="Kubernetes"
apiVersion: hanzo.ai/v1alpha1
kind: Middleware
metadata:
  name: limit
spec:
  buffering:
    retryExpression: "IsNetworkError() && Attempts() < 2"
```

```yaml tab="Consul Catalog"
- "traefik.http.middlewares.limit.buffering.retryExpression=IsNetworkError() && Attempts() < 2"
```

```yaml tab="File (YAML)"
http:
  middlewares:
    limit:
      buffering:
        retryExpression: "IsNetworkError() && Attempts() < 2"
```

```toml tab="File (TOML)"
[http.middlewares]
  [http.middlewares.limit.buffering]
    retryExpression = "IsNetworkError() && Attempts() < 2"
```

The retry expression is defined as a logical combination of the functions below with the operators AND (&&) and OR (||). At least one function is required:

  • Attempts() number of attempts (the first one counts)
  • ResponseCode() response code of the service
  • IsNetworkError() whether the response code is related to networking error

Content-Length

See Best Practices: Content‑Length