All Products
Search
Document Center

Microservices Engine:Annotations supported by MSE Ingress gateways

Last Updated:Aug 27, 2026

MSE Ingress gateways support the core and common annotations of NGINX Ingress gateways, making migration straightforward. They also provide 40 additional annotations for advanced traffic management.

Standard Kubernetes Ingress resources handle only Transport Layer Security (TLS) encryption and basic Layer-7 HTTP routing. NGINX Ingress controllers alone define more than 100 custom annotations to address real-world traffic management and security requirements. MSE Ingress gateways are compatible with the most common NGINX Ingress annotations so existing workloads migrate without rewriting Ingress configurations.

Overview

The following table summarizes annotation coverage at a glance.

NGINX Ingress annotation coverage

Category Count Notes
Supported 51 Covers 90% of use cases
No configuration required 15 Functionality is available without explicit configuration
Planned 48 Applies to a small number of use cases
Not supported 5 Tied to NGINX-specific code snippets
MSE implements features differently from NGINX. NGINX variables used in NGINX Ingress annotations and code snippets are not compatible with their NGINX counterparts.

Large request bodies: The nginx.ingress.kubernetes.io/proxy-body-size annotation sets a maximum request body size in NGINX, rejecting anything larger. MSE uses chunked transfer encoding instead, which handles large bodies automatically without a size limit. To set upstream connection buffer limits, configure the DownstreamConnectionBufferLimits parameter in the Parameter Settings pane of your MSE gateway.

Redirects and NGINX variables: NGINX variables (such as $host or $request_uri) in redirect annotations may work in some NGINX Ingress versions but are not officially documented. Avoid using NGINX variables for redirects in NGINX Ingress — they are not compatible with MSE.

MSE-exclusive annotations

Category Count Notes
Extended annotations 40 Adds traffic governance and security protection capabilities beyond NGINX Ingress

Annotation scope

Each annotation applies at one of three scopes:

  • Ingress — applies to the routing rules defined on the Ingress resource.

  • Domain — applies to the hostnames defined on the Ingress resource and also takes effect on the same hostnames of other Ingress resources.

  • Service — applies to the backend services referenced by the Ingress resource and also takes effect on the same services referenced by other Ingress resources.

Annotation prefixes

MSE-compatible annotations accept either the nginx or mse prefix. For example, nginx.ingress.kubernetes.io/ssl-redirect and mse.ingress.kubernetes.io/ssl-redirect are equivalent.

MSE-exclusive annotations use only the mse prefix. Replacing mse with nginx for these annotations has no effect.

Quick-reference index

The following table lists all supported annotations with their compatibility status and category. Use this table to quickly check whether a specific annotation is supported before reading the full details below.

Annotation Status Category
nginx.ingress.kubernetes.io/canary Compatible Canary release
nginx.ingress.kubernetes.io/canary-by-header Compatible Canary release
nginx.ingress.kubernetes.io/canary-by-header-value Compatible Canary release
nginx.ingress.kubernetes.io/canary-by-header-pattern Compatible Canary release
mse.ingress.kubernetes.io/canary-by-query MSE-exclusive Canary release
mse.ingress.kubernetes.io/canary-by-query-value MSE-exclusive Canary release
mse.ingress.kubernetes.io/canary-by-query-pattern MSE-exclusive Canary release
nginx.ingress.kubernetes.io/canary-by-cookie Compatible Canary release
mse.ingress.kubernetes.io/canary-by-cookie-value MSE-exclusive (V1.2.30+) Canary release
nginx.ingress.kubernetes.io/canary-weight Compatible Canary release
nginx.ingress.kubernetes.io/canary-weight-total Compatible Canary release
mse.ingress.kubernetes.io/destination MSE-exclusive Multi-service routing
mse.ingress.kubernetes.io/service-subset MSE-exclusive (V1.2.25+) Service subset
mse.ingress.kubernetes.io/subset-labels MSE-exclusive (V1.2.25+) Service subset
nginx.ingress.kubernetes.io/default-backend Compatible Fallback service
nginx.ingress.kubernetes.io/custom-http-errors Compatible Fallback service
nginx.ingress.kubernetes.io/use-regex Compatible Regex path matching
nginx.ingress.kubernetes.io/rewrite-target Compatible Path rewrite
nginx.ingress.kubernetes.io/upstream-vhost Compatible Path rewrite
nginx.ingress.kubernetes.io/ssl-redirect Compatible Redirect
nginx.ingress.kubernetes.io/force-ssl-redirect Compatible Redirect
nginx.ingress.kubernetes.io/permanent-redirect Compatible Redirect
nginx.ingress.kubernetes.io/permanent-redirect-code Compatible Redirect
nginx.ingress.kubernetes.io/temporal-redirect Compatible Redirect
nginx.ingress.kubernetes.io/app-root Compatible Redirect
nginx.ingress.kubernetes.io/enable-cors Compatible CORS
nginx.ingress.kubernetes.io/cors-allow-origin Compatible CORS
nginx.ingress.kubernetes.io/cors-allow-methods Compatible CORS
nginx.ingress.kubernetes.io/cors-allow-headers Compatible CORS
nginx.ingress.kubernetes.io/cors-expose-headers Compatible CORS
nginx.ingress.kubernetes.io/cors-allow-credentials Compatible CORS
nginx.ingress.kubernetes.io/cors-max-age Compatible CORS
mse.ingress.kubernetes.io/request-header-control-add MSE-exclusive Header control
mse.ingress.kubernetes.io/request-header-control-update MSE-exclusive Header control
mse.ingress.kubernetes.io/request-header-control-remove MSE-exclusive Header control
mse.ingress.kubernetes.io/response-header-control-add MSE-exclusive Header control
mse.ingress.kubernetes.io/response-header-control-update MSE-exclusive Header control
mse.ingress.kubernetes.io/response-header-control-remove MSE-exclusive Header control
mse.ingress.kubernetes.io/timeout MSE-exclusive Timeout
nginx.ingress.kubernetes.io/proxy-next-upstream-tries Compatible Retry
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout Compatible Retry
nginx.ingress.kubernetes.io/proxy-next-upstream Compatible Retry
mse.ingress.kubernetes.io/mirror-target-service MSE-exclusive Traffic mirroring
mse.ingress.kubernetes.io/mirror-percentage MSE-exclusive (V1.2.32+) Traffic mirroring
nginx.ingress.kubernetes.io/server-alias Partially compatible (V1.2.30+) Domain alias
mse.ingress.kubernetes.io/route-limit-rpm MSE-exclusive Rate limiting (single-gateway, to be deprecated)
mse.ingress.kubernetes.io/route-limit-rps MSE-exclusive Rate limiting (single-gateway, to be deprecated)
mse.ingress.kubernetes.io/route-limit-burst-multiplier MSE-exclusive Rate limiting (single-gateway, to be deprecated)
mse.ingress.kubernetes.io/rate-limit MSE-exclusive (V1.2.25+) Rate limiting (global)
mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-code MSE-exclusive (V1.2.25+) Rate limiting (global)
mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-body-type MSE-exclusive (V1.2.25+) Rate limiting (global)
mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-body MSE-exclusive (V1.2.25+) Rate limiting (global)
mse.ingress.kubernetes.io/rate-limit-fallback-redirect-url MSE-exclusive (V1.2.25+) Rate limiting (global)
mse.ingress.kubernetes.io/concurrency-limit MSE-exclusive (V1.2.25+) Concurrency control
mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code MSE-exclusive (V1.2.25+) Concurrency control
mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body-type MSE-exclusive (V1.2.25+) Concurrency control
mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body MSE-exclusive (V1.2.25+) Concurrency control
mse.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url MSE-exclusive (V1.2.25+) Concurrency control
nginx.ingress.kubernetes.io/backend-protocol Partially compatible Backend protocol
nginx.ingress.kubernetes.io/load-balance Partially compatible Load balancing
nginx.ingress.kubernetes.io/upstream-hash-by Partially compatible Load balancing
mse.ingress.kubernetes.io/warmup MSE-exclusive Service warm-up
nginx.ingress.kubernetes.io/affinity Compatible Cookie affinity
nginx.ingress.kubernetes.io/affinity-mode Partially compatible Cookie affinity
nginx.ingress.kubernetes.io/session-cookie-name Compatible Cookie affinity
nginx.ingress.kubernetes.io/session-cookie-path Compatible Cookie affinity
nginx.ingress.kubernetes.io/session-cookie-max-age Compatible Cookie affinity
nginx.ingress.kubernetes.io/session-cookie-expires Compatible Cookie affinity
nginx.ingress.kubernetes.io/whitelist-source-range Compatible IP access control
nginx.ingress.kubernetes.io/denylist-source-range Compatible (V1.2.31+) IP access control
mse.ingress.kubernetes.io/blacklist-source-range MSE-exclusive IP access control
mse.ingress.kubernetes.io/domain-whitelist-source-range MSE-exclusive IP access control
mse.ingress.kubernetes.io/domain-blacklist-source-range MSE-exclusive IP access control
mse.ingress.kubernetes.io/connection-policy-tcp-max-connection MSE-exclusive Connection pool
mse.ingress.kubernetes.io/connection-policy-tcp-max-connection-per-endpoint MSE-exclusive Connection pool
mse.ingress.kubernetes.io/connection-policy-http-max-request-per-connection MSE-exclusive Connection pool
mse.ingress.kubernetes.io/tls-min-protocol-version MSE-exclusive TLS (client-to-gateway)
mse.ingress.kubernetes.io/tls-max-protocol-version MSE-exclusive TLS (client-to-gateway)
nginx.ingress.kubernetes.io/ssl-cipher Compatible TLS (client-to-gateway)
mse.ingress.kubernetes.io/auth-tls-secret Partially compatible TLS (client-to-gateway)
nginx.ingress.kubernetes.io/proxy-ssl-secret Compatible TLS (gateway-to-backend)
nginx.ingress.kubernetes.io/proxy-ssl-name Compatible TLS (gateway-to-backend)
nginx.ingress.kubernetes.io/proxy-ssl-server-name Compatible TLS (gateway-to-backend)
nginx.ingress.kubernetes.io/auth-type Partially compatible Authentication
nginx.ingress.kubernetes.io/auth-secret Compatible Authentication
nginx.ingress.kubernetes.io/auth-secret-type Compatible Authentication
nginx.ingress.kubernetes.io/auth-realm Compatible Authentication

Supported annotations

Traffic governance

Canary release

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/canary Ingress Compatible Enables canary release for the Ingress.
nginx.ingress.kubernetes.io/canary-by-header Ingress Compatible Splits traffic by request header key.
nginx.ingress.kubernetes.io/canary-by-header-value Ingress Compatible Splits traffic by request header value. Supports exact matching.
nginx.ingress.kubernetes.io/canary-by-header-pattern Ingress Compatible Splits traffic by request header value. Supports regular expression matching.
mse.ingress.kubernetes.io/canary-by-query Ingress MSE-exclusive Splits traffic by URL query parameter key.
mse.ingress.kubernetes.io/canary-by-query-value Ingress MSE-exclusive Splits traffic by URL query parameter value. Supports exact matching.
mse.ingress.kubernetes.io/canary-by-query-pattern Ingress MSE-exclusive Splits traffic by URL query parameter value. Supports regular expression matching.
nginx.ingress.kubernetes.io/canary-by-cookie Ingress Compatible Splits traffic by cookie key.
mse.ingress.kubernetes.io/canary-by-cookie-value Ingress MSE-exclusive (requires gateway V1.2.30 or later) Splits traffic by cookie value. Supports exact matching.
nginx.ingress.kubernetes.io/canary-weight Ingress Compatible Sets the traffic weight for the canary service.
nginx.ingress.kubernetes.io/canary-weight-total Ingress Compatible Sets the total weight used for traffic splitting calculations.

Multi-service routing

Annotation Scope Support status Description
mse.ingress.kubernetes.io/destination Ingress MSE-exclusive Distributes traffic across multiple services by weight.

Syntax: {weight}% {serviceName}.{serviceNamespace}.svc.cluster.local:{port}

Configuring this annotation overrides the destination services for all routing rules on the Ingress. If the syntax is invalid, the annotation is ignored and the original routing rules remain in effect.

Example:

annotations:
  # Route 60% of traffic to foo and 40% to bar
  mse.ingress.kubernetes.io/destination: |
    60% foo.default.svc.cluster.local:8080
    40% bar.default.svc.cluster.local:9090

Service subset

Use service subsets when a single Kubernetes Service manages multiple deployments — for example, a stable version and a canary version. A subset directs requests to a specific group of pods.

Annotation Scope Support status Description
mse.ingress.kubernetes.io/service-subset Ingress MSE-exclusive (requires gateway V1.2.25 or later) Routes requests to a pod subset of the target service. When mse.ingress.kubernetes.io/subset-labels is not set, the routing behavior depends on this annotation's value: set it to "" or base to target pods with opensergo.io/canary: "" or pods without the opensergo.io/canary label prefix; set it to any other value (for example, gray) to target pods with the label opensergo.io/canary-gray: gray. When mse.ingress.kubernetes.io/subset-labels is set, requests are forwarded only to pods whose labels match the key-value pairs defined there. If no pods match the label, requests fall back to all pods of the service.
mse.ingress.kubernetes.io/subset-labels Ingress MSE-exclusive (requires gateway V1.2.25 or later) Optional. Use with mse.ingress.kubernetes.io/service-subset to specify the labels that define the pod subset.

Fallback service

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/default-backend Ingress Compatible Specifies a fallback service. If no nodes are available for the service defined in an Ingress rule, requests are forwarded to this service.
nginx.ingress.kubernetes.io/custom-http-errors Ingress Compatible Works with nginx.ingress.kubernetes.io/default-backend. When a backend returns one of the specified HTTP status codes, the request is forwarded to the fallback service with the path rewritten to /.

Regex path matching

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/use-regex Ingress Compatible Enables regular expression matching for the path defined in the Ingress rule. Uses RE2 syntax.

Path rewrite

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/rewrite-target Ingress Compatible Rewrites the request path before forwarding to the backend. Supports capture groups.
nginx.ingress.kubernetes.io/upstream-vhost Ingress Compatible Rewrites the Host header to the specified value when forwarding requests to the backend.

Redirect

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/ssl-redirect Ingress Compatible Redirects HTTP requests to HTTPS.
nginx.ingress.kubernetes.io/force-ssl-redirect Ingress Compatible Forcibly redirects HTTP requests to HTTPS.
nginx.ingress.kubernetes.io/permanent-redirect Ingress Compatible Redirects requests to the specified URL with a permanent redirect.
nginx.ingress.kubernetes.io/permanent-redirect-code Ingress Compatible Sets the HTTP status code for permanent redirects.
nginx.ingress.kubernetes.io/temporal-redirect Ingress Compatible Redirects requests to the specified URL with a temporary redirect.
nginx.ingress.kubernetes.io/app-root Ingress Compatible Redirects requests from / to the specified application root path.

Cross-origin resource sharing (CORS)

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/enable-cors Ingress Compatible Enables cross-origin resource sharing (CORS).
nginx.ingress.kubernetes.io/cors-allow-origin Ingress Compatible Sets the allowed origins for CORS requests.
nginx.ingress.kubernetes.io/cors-allow-methods Ingress Compatible Sets the allowed HTTP methods for CORS requests, such as GET, POST, and PUT.
nginx.ingress.kubernetes.io/cors-allow-headers Ingress Compatible Sets the allowed request headers for CORS requests.
nginx.ingress.kubernetes.io/cors-expose-headers Ingress Compatible Sets the response headers exposed to browsers in CORS responses.
nginx.ingress.kubernetes.io/cors-allow-credentials Ingress Compatible Specifies whether credentials can be included in CORS requests.
nginx.ingress.kubernetes.io/cors-max-age Ingress Compatible Sets the duration for which preflight request results are cached.

Header control

Header control annotations on base routes and canary routes are independent and validated separately. Configure different header policies for base-route traffic and canary-route traffic as needed.
Annotation Scope Support status Description
mse.ingress.kubernetes.io/request-header-control-add Ingress MSE-exclusive Adds a header to requests before forwarding to the backend. If the header already exists, the new value is appended to the original. For a single header, use a key-value pair. For multiple headers, use a YAML literal block (|) with one key-value pair per line.
mse.ingress.kubernetes.io/request-header-control-update Ingress MSE-exclusive Modifies a header in requests before forwarding to the backend. If the header exists, the new value overwrites the original. Same syntax as request-header-control-add.
mse.ingress.kubernetes.io/request-header-control-remove Ingress MSE-exclusive Removes headers from requests before forwarding to the backend. For a single header, specify the key. For multiple headers, separate keys with commas.
mse.ingress.kubernetes.io/response-header-control-add Ingress MSE-exclusive Adds a header to responses before forwarding to the client. If the header already exists, the new value is appended to the original. Same syntax as request-header-control-add.
mse.ingress.kubernetes.io/response-header-control-update Ingress MSE-exclusive Modifies a header in responses before forwarding to the client. If the header exists, the new value overwrites the original. Same syntax as request-header-control-add.
mse.ingress.kubernetes.io/response-header-control-remove Ingress MSE-exclusive Removes headers from responses before forwarding to the client. For a single header, specify the key. For multiple headers, separate keys with commas.

Timeout

Annotation Scope Support status Description
mse.ingress.kubernetes.io/timeout Ingress MSE-exclusive Sets the request timeout in seconds. No timeout is applied by default. Applies at the application layer, not at the TCP transport layer.

Retry

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/proxy-next-upstream-tries Ingress Compatible Sets the maximum number of retry attempts. Default: 3.
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout Ingress Compatible Sets the timeout for retry attempts in seconds. No timeout is applied by default.
nginx.ingress.kubernetes.io/proxy-next-upstream Ingress Compatible Sets the conditions that trigger a retry. See NGINX retry mechanism for supported values.

Traffic mirroring

Annotation Scope Support status Description
mse.ingress.kubernetes.io/mirror-target-service Ingress MSE-exclusive Forwards a copy of incoming traffic to the specified service. Format: namespace/name:port. The namespace defaults to the Ingress gateway's namespace. The port defaults to the first port of the service.
mse.ingress.kubernetes.io/mirror-percentage Ingress MSE-exclusive (requires gateway V1.2.32 or later) Sets the percentage of traffic to mirror. Valid values: 0–100. Default: 100.

Domain alias

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/server-alias Domain Partially compatible — exact match domains and wildcard domains only (requires gateway V1.2.30 or later) Defines a domain alias for the hostname in the Ingress spec. The alias inherits the TLS, routing, and traffic governance configuration of the source domain.

Rate limiting (single-gateway, to be deprecated)

When throttling is triggered, the response body is local_rate_limited. The response status code depends on gateway version: gateways earlier than V1.2.23 return 503; V1.2.23 and later return 429.

Annotation Scope Support status Description
mse.ingress.kubernetes.io/route-limit-rpm Ingress MSE-exclusive Sets the maximum requests per minute (RPM) on a route. The burst limit equals this value multiplied by mse.ingress.kubernetes.io/route-limit-burst-multiplier.
mse.ingress.kubernetes.io/route-limit-rps Ingress MSE-exclusive Sets the maximum requests per second (RPS) on a route. The burst limit equals this value multiplied by mse.ingress.kubernetes.io/route-limit-burst-multiplier.
mse.ingress.kubernetes.io/route-limit-burst-multiplier Ingress MSE-exclusive Sets the burst limit multiplier. Default: 5.

Rate limiting (global, recommended)

Annotation Scope Support status Description
mse.ingress.kubernetes.io/rate-limit Ingress MSE-exclusive (requires gateway V1.2.25 or later) Sets the maximum RPS for global rate limiting on a route.
mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-code Ingress MSE-exclusive (requires gateway V1.2.25 or later) Sets the HTTP response code returned when rate limiting is triggered. Default: 429. Mutually exclusive with mse.ingress.kubernetes.io/rate-limit-fallback-redirect-url.
mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-body-type Ingress MSE-exclusive (requires gateway V1.2.25 or later) Sets the format of the rate-limit response body. Default: text. Setting text returns Content-Type: text/plain; charset=UTF-8. Setting JSON returns Content-Type: application/json; charset=UTF-8.
mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-body Ingress MSE-exclusive (requires gateway V1.2.25 or later) Sets the body content of the rate-limit response. Default: sentinel rate limited.
mse.ingress.kubernetes.io/rate-limit-fallback-redirect-url Ingress MSE-exclusive (requires gateway V1.2.25 or later) Redirects requests to the specified URL when rate limiting is triggered. Mutually exclusive with mse.ingress.kubernetes.io/rate-limit-fallback-custom-response-code.

Concurrency control (global)

Annotation Scope Support status Description
mse.ingress.kubernetes.io/concurrency-limit Ingress MSE-exclusive (requires gateway V1.2.25 or later) Sets the maximum number of concurrent requests on a route.
mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code Ingress MSE-exclusive (requires gateway V1.2.25 or later) Sets the HTTP response code when concurrency control is triggered. Default: 429. Mutually exclusive with mse.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url.
mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body-type Ingress MSE-exclusive (requires gateway V1.2.25 or later) Sets the format of the concurrency-limit response body. Default: text. Setting text returns Content-Type: text/plain; charset=UTF-8. Setting JSON returns Content-Type: application/json; charset=UTF-8.
mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-body Ingress MSE-exclusive (requires gateway V1.2.25 or later) Sets the body content of the concurrency-limit response. Default: sentinel rate limited.
mse.ingress.kubernetes.io/concurrency-limit-fallback-redirect-url Ingress MSE-exclusive (requires gateway V1.2.25 or later) Redirects requests to the specified URL when concurrency control is triggered. Mutually exclusive with mse.ingress.kubernetes.io/concurrency-limit-fallback-custom-response-code.

Backend protocol

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/backend-protocol Service Partially compatible — AJP and FCGI are not supported Sets the protocol used to communicate with backend services. Default: HTTP. Supported values: HTTP, HTTP2, HTTPS, gRPC, gRPCS.

Load balancing

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/load-balance Service Partially compatible — the Exponentially Weighted Moving Average (EWMA) algorithm is not supported and falls back to round-robin Sets the load balancing algorithm. Default: round_robin. Supported values: round_robin, least_conn, random.
nginx.ingress.kubernetes.io/upstream-hash-by Service Partially compatible — combining NGINX variables with constants is not supported Enables consistent hashing. Supported hash key types: $request_uri (request path, including path parameters), $host (request hostname), $remote_addr (client IP address), $http_<headerName> (request header value), $arg_<varName> (URL query parameter value).

Service warm-up (graceful start)

Annotation Scope Support status Description
mse.ingress.kubernetes.io/warmup Service MSE-exclusive Sets the warm-up duration in seconds. Disabled by default. Supported only with round_robin and least_conn load balancing algorithms.

Cookie affinity

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/affinity Service Compatible Sets the affinity type. The only valid value is cookie.
nginx.ingress.kubernetes.io/affinity-mode Service Partially compatible — persistent mode is not supported Sets the affinity mode. The only valid value is balanced.
nginx.ingress.kubernetes.io/session-cookie-name Service Compatible Sets the cookie name used as the hash key for session affinity.
nginx.ingress.kubernetes.io/session-cookie-path Service Compatible Sets the path attribute of the generated session cookie. Default: /.
nginx.ingress.kubernetes.io/session-cookie-max-age Service Compatible Sets the Max-Age of the generated session cookie in seconds. Defaults to session-level expiration.
nginx.ingress.kubernetes.io/session-cookie-expires Service Compatible Sets the Expires attribute of the generated session cookie in seconds. Defaults to session-level expiration.

IP address-based access control

Route-level allowlists take precedence over domain-level allowlists. Route-level blocklists take precedence over domain-level blocklists.

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/whitelist-source-range Ingress Compatible Sets an IP allowlist for the route. Accepts IP addresses and CIDR blocks, separated by commas.
nginx.ingress.kubernetes.io/denylist-source-range Ingress Compatible (requires gateway V1.2.31 or later) Sets an IP blocklist for the route. Accepts IP addresses and CIDR blocks, separated by commas. Takes precedence over mse.ingress.kubernetes.io/blacklist-source-range.
mse.ingress.kubernetes.io/blacklist-source-range Ingress MSE-exclusive Sets an IP blocklist for the route. Accepts IP addresses and CIDR blocks, separated by commas.
mse.ingress.kubernetes.io/domain-whitelist-source-range Ingress MSE-exclusive Sets an IP allowlist at the domain level. Accepts IP addresses and CIDR blocks, separated by commas.
mse.ingress.kubernetes.io/domain-blacklist-source-range Ingress MSE-exclusive Sets an IP blocklist at the domain level. Accepts IP addresses and CIDR blocks, separated by commas.

Connection pool (gateway to backend)

Annotation Scope Support status Description
mse.ingress.kubernetes.io/connection-policy-tcp-max-connection Service MSE-exclusive Sets the maximum number of TCP connections between the gateway and the backend service.
mse.ingress.kubernetes.io/connection-policy-tcp-max-connection-per-endpoint Service MSE-exclusive Sets the maximum number of TCP connections between the gateway and a single backend pod.
mse.ingress.kubernetes.io/connection-policy-http-max-request-per-connection Service MSE-exclusive Sets the maximum number of HTTP requests per connection between the gateway and the backend service.

Security protection

TLS between clients and the gateway

Annotation Scope Support status Description
mse.ingress.kubernetes.io/tls-min-protocol-version Domain MSE-exclusive Sets the minimum TLS version. Default: TLSv1.0. Valid values: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3.
mse.ingress.kubernetes.io/tls-max-protocol-version Domain MSE-exclusive Sets the maximum TLS version. Default: TLSv1.3. Valid values: TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3.
nginx.ingress.kubernetes.io/ssl-cipher Domain Compatible Sets the TLS cipher suites, separated by commas. Takes effect only for TLS 1.0–1.2 handshakes. Default cipher suites: ECDHE-ECDSA-AES128-GCM-SHA256, ECDHE-RSA-AES128-GCM-SHA256, ECDHE-ECDSA-AES128-SHA, ECDHE-RSA-AES128-SHA, AES128-GCM-SHA256, AES128-SHA, ECDHE-ECDSA-AES256-GCM-SHA384, ECDHE-RSA-AES256-GCM-SHA384, ECDHE-ECDSA-AES256-SHA, ECDHE-RSA-AES256-SHA, AES256-GCM-SHA384, AES256-SHA.
mse.ingress.kubernetes.io/auth-tls-secret Domain Partially compatible — the secret name must follow the format <domain-certificate-secret-name>-cacert Specifies the CA certificate the gateway uses to verify client certificates during mutual TLS (mTLS) handshakes.

TLS between the gateway and backend services

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/proxy-ssl-secret Service Compatible Specifies the client certificate the gateway presents to backend services during TLS handshakes.
nginx.ingress.kubernetes.io/proxy-ssl-name Service Compatible Sets the Server Name Indication (SNI) value used during the TLS handshake with the backend.
nginx.ingress.kubernetes.io/proxy-ssl-server-name Service Compatible Enables or disables SNI during the TLS handshake with the backend.

Authentication

Basic authentication

Annotation Scope Support status Description
nginx.ingress.kubernetes.io/auth-type Ingress Partially compatible — only basic authentication is supported Sets the authentication type.
nginx.ingress.kubernetes.io/auth-secret Ingress Compatible Specifies the secret that contains credentials for the route. Format: <namespace>/<name>.
nginx.ingress.kubernetes.io/auth-secret-type Ingress Compatible Sets the format of the secret data. auth-file: the auth key holds newline-separated username:password pairs. auth-map: each key is a username and its value is the password.
nginx.ingress.kubernetes.io/auth-realm Ingress Compatible Sets the authentication realm. Credentials are shared within a realm.

For the full list of NGINX Ingress annotations, see Annotations.