You need to enable JavaScript to run this app.
导航
Nginx ingress 常用注解
最近更新时间:2024.08.01 17:14:19首次发布时间:2024.08.01 17:07:23

容器服务 Nginx ingress 提供了与社区完全兼容的注解(Annotation),能够实现更丰富的七层负载均衡能力和更多样的服务路由规则。本文介绍容器服务 Nginx ingress 中常用注解的含义和使用方法。

注意

  • 由于不同版本集群中 Nginx ingress 的版本不同,提供的注解略有差异,请以控制台的显示为准。
  • 若在下文中没有找到您需要的注解,请参考 Nginx 官方文档

灰度发布

注解说明
nginx.ingress.kubernetes.io/canary启用灰度发布功能。配置为true时,表示启用该功能。
nginx.ingress.kubernetes.io/canary-by-header基于 Header 实现灰度发布,将请求流量分配到灰度服务入口。
nginx.ingress.kubernetes.io/canary-by-header-value当请求中的 Header 值与该配置匹配时,请求流量会被分配到灰度服务入口。
nginx.ingress.kubernetes.io/canary-by-header-pattern基于请求中的 Header 值进行流量切分,支持正则匹配。
nginx.ingress.kubernetes.io/canary-by-cookie基于 Cookie 实现灰度发布,将请求流量分配到灰度服务入口。
nginx.ingress.kubernetes.io/canary-weight基于权重实现灰度发布,流量会根据权重占比随机路由到灰度服务入口。
nginx.ingress.kubernetes.io/canary-weight-total配置基于权重切分流量时的权重总和。

说明

灰度发布相关注解的详细使用方式,请参见 使用 Nginx Ingress 实现灰度发布和蓝绿发布

重定向

注解说明

nginx.ingress.kubernetes.io/force-ssl-redirect

当客户端的 HTTPS 被外部集群进行 SSL 卸载(SSL offloading)时,是否仍将 HTTP 的请求强制跳转到 HTTPS 端口。取值:

  • true:HTTPS 卸载后,仍将 HTTP 的请求强制跳转到 HTTPS 端口。
  • false:HTTPS 卸载后,不进行 HTTP 的请求跳转。

nginx.ingress.kubernetes.io/from-to-www-redirect

是否将 www.domain.com 重定向到 domain.com,取值:

  • true:将 www.domain.com 重定向到 domain.com。
  • false:不进行重定向。
nginx.ingress.kubernetes.io/permanent-redirect配置永久重定向的目标地址。
nginx.ingress.kubernetes.io/permanent-redirect-code配置永久重定向的响应码。
nginx.ingress.kubernetes.io/temporal-redirect配置临时重定向的目标地址。

nginx.ingress.kubernetes.io/preserve-trailing-slash

使用 ssl-redirect 时,是否保留 URI 的尾斜杠。取值:

  • true:使用 ssl-redirect 时,保留 URI 的尾斜杠。
  • false:使用 ssl-redirect 时,不保留 URI 的尾斜杠。
nginx.ingress.kubernetes.io/proxy-redirect-from配置要替换的源文本,同 Nginx proxy_redirect命令 的第一个参数。
nginx.ingress.kubernetes.io/proxy-redirect-to配置要替换的目标文本,同 Nginx proxy_redirect 命令的第二个参数。

nginx.ingress.kubernetes.io/ssl-redirect

配置是否开启 HTTP 重定向,即当收到 HTTP 的请求时,强制重定向到 HTTPS 端口。

  • true:开启 HTTP 重定向。
  • false:禁用 HTTP 重定向。

说明

当 Ingress 上有证书时,默认为 true。即开启 HTTP 重定向。

说明

重定向相关注解的详细使用方式,请参见 Nginx Ingress 配置重定向规则

流量复制

注解说明
nginx.ingress.kubernetes.io/mirror-target配置镜像后端的地址。
nginx.ingress.kubernetes.io/mirror-host默认情况下,流量复制请求的 Host 头会被设置成和mirror-target配置保持一致。可以通过该字段覆写 Host 头的内容。
nginx.ingress.kubernetes.io/mirror-request-body请求体默认会发送给镜像后端,配置该字段为off时,禁止将请求体发送给镜像后端。

说明

流量复制相关注解的详细使用方式,请参见 Nginx Ingress 配置流量复制

后端服务

注解说明
nginx.ingress.kubernetes.io/backend-protocol指定后端服务使用的协议,支持 HTTP(默认值)、HTTP2、HTTPS、GRPC 和 GRPCS。
nginx.ingress.kubernetes.io/default-backend配置默认后端资源对象的 Service 名称。

说明

后端服务相关注解的详细使用方式,请参见 Nginx Ingress 使用 HTTPS 对接后端服务

URL 重写

在某些场景中,后端服务中公开的 URL 与 Ingress 规则中指定的路径不同。如果没有重写,任何请求都将返回 404。

注解说明
nginx.ingress.kubernetes.io/rewrite-target配置 URL 重写规则。
nginx.ingress.kubernetes.io/app-root配置应用重定向的根目录。

说明

URL 重写相关注解的详细使用方式,请参见 Nginx Ingress 配置 URL 重写规则

身份验证

支持通过在 Ingress 规则中添加附加注释来添加身份验证。

注解说明
nginx.ingress.kubernetes.io/auth-type配置身份认证类型,支持basicdigest
nginx.ingress.kubernetes.io/auth-secret配置身份认证使用的 Secret 名称。

nginx.ingress.kubernetes.io/auth-secret-type

配置身份认证的 Secret 内容格式,支持如下 2 种格式:

  • auth-file:(默认值)数据的 key 为 auth;value 为用户名和密码。多帐号使用回车分隔。
  • auth-map:数据的 key 为用户名;value 为密码。
nginx.ingress.kubernetes.io/auth-realm配置身份认证的提示信息。

外部认证

注解说明
nginx.ingress.kubernetes.io/auth-url配置外部认证服务的 URL。
nginx.ingress.kubernetes.io/auth-keepalive配置外部认证 URL 链接的最大保持时间。

nginx.ingress.kubernetes.io/auth-keepalive-share-vars

是否在当前请求和外部认证请求之间共享 Nginx 变量。

  • true:后端和身份验证请求的X-Request-ID HTTP 标头将相同。
  • false:(默认值)后端和身份验证请求的 X-Request-ID HTTP 标头不同。
nginx.ingress.kubernetes.io/auth-keepalive-requests配置外部认证的一次连接中,允许处理的请求数。
nginx.ingress.kubernetes.io/auth-keepalive-timeout配置外部认证 URL 链接的超时时间。
nginx.ingress.kubernetes.io/auth-proxy-set-headers配置要传递给认证服务请求头的 Configmap 名称。
nginx.ingress.kubernetes.io/auth-cache-key开启认证缓存,并设置认证缓存的关键字。
nginx.ingress.kubernetes.io/auth-cache-duration根据响应码设置认证缓存的有效时间。
nginx.ingress.kubernetes.io/auth-snippet配置用于外部认证的自定义代码段。

nginx.ingress.kubernetes.io/enable-global-auth

配置是否开启 GlobalExternalAuth,取值:

  • true:(默认值)开启 GlobalExternalAuth。
  • false:关闭 GlobalExternalAuth。

会话亲和性

注解说明
nginx.ingress.kubernetes.io/affinity配置会话亲和性类型,仅支持设置为cookie

nginx.ingress.kubernetes.io/affinity-mode

配置会话亲和性模式,取值:

  • balanced:该模式在 Pod 扩缩容时会重新分配部分会话。
  • persistent:该模式不会重新平衡与新服务器的会话,保证最大粘性。

nginx.ingress.kubernetes.io/affinity-canary-behavior

配置蓝绿发布的会话亲和策略,取值:

  • sticky:该策略下,被 canary 服务处理的请求会一直被 canary 服务处理。
  • legacy:该模式下,在忽略会话亲和性时,会恢复 canary 原始的行为表现。

客户端证书认证

注解说明
nginx.ingress.kubernetes.io/auth-tls-secret配置客户端认证的 Secret 名称。该 Secret 中必须包含一个名为 ca.crt 的文件,可对此 Ingress 进行身份验证。
nginx.ingress.kubernetes.io/auth-tls-verify-depth配置客户端证书链的验证深度,默认为 1。
nginx.ingress.kubernetes.io/auth-tls-verify-client启用客户端证书校验。
nginx.ingress.kubernetes.io/auth-tls-error-page配置客户端证书验证错误时的跳转页面。

nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream

配置是否将证书传递到上游服务器。取值:

  • true:将证书传递到上游服务器。
  • false:不传递证书。
nginx.ingress.kubernetes.io/auth-tls-match-cn为使用CN=前缀的请求的客户端证书的 CN 添加健全性检查。

后端证书认证

注解说明
nginx.ingress.kubernetes.io/proxy-ssl-secret配置后端认证的 Secret 名称。该 Secret 中必须包含一个名为 ca.crt 的文件,用于验证代理服务器的证书。

nginx.ingress.kubernetes.io/proxy-ssl-verify

启用或禁用验证代理服务器证书,取值:

  • on:启用验证代理服务器证书。
  • off:(默认值)禁用验证代理服务器证书。
nginx.ingress.kubernetes.io/proxy-ssl-verify-depth配置代理服务器证书链的验证深度,默认为 1。
nginx.ingress.kubernetes.io/proxy-ssl-ciphers配置发送到代理服务器的请求使用的加密算法。该加密算法需要能被 OpenSSL 识别。
nginx.ingress.kubernetes.io/proxy-ssl-name覆盖用于验证代理服务器证书的服务器名称。当与代理服务器建立连接时,该值会通过 SNI 传递。
nginx.ingress.kubernetes.io/proxy-ssl-protocols配置发给代理服务器的请求使用指定协议。
nginx.ingress.kubernetes.io/proxy-ssl-server-name与代理的 HTTPS 服务器建立连接时,允许通过 TLS 服务器的 SNI(名称指示扩展)传递服务器名称。

跨域访问

注解说明

nginx.ingress.kubernetes.io/enable-cors

是否启用跨域访问,取值:

  • true:开启跨域访问。
  • false:关闭跨域访问。
nginx.ingress.kubernetes.io/cors-allow-origin配置允许跨域访问的域名。
nginx.ingress.kubernetes.io/cors-allow-methods配置允许跨域访问的方法。
nginx.ingress.kubernetes.io/cors-allow-headers配置允许跨域访问的请求头。
nginx.ingress.kubernetes.io/cors-expose-headers配置允许暴露给浏览器响应的 Header。

nginx.ingress.kubernetes.io/cors-allow-credentials

是否允许客户端携带验证信息,取值:

  • true:允许客户端携带验证信息。
  • false:禁止客户端携带验证信息。
nginx.ingress.kubernetes.io/cors-max-age配置返回结果缓存的最长时间。

超时时间

注解说明
nginx.ingress.kubernetes.io/proxy-connect-timeout配置将请求发送至 Upstream server 的超时时间。
nginx.ingress.kubernetes.io/proxy-send-timeout配置两次写操作的最大间隔时长。
nginx.ingress.kubernetes.io/proxy-read-timeout配置在连接断开之前,两次从 Upstream server 接收读操作的超时时间。
nginx.ingress.kubernetes.io/proxy-next-upstream配置重试策略或者重试条件。
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout配置允许将连接传递到下一个服务器的超时时间。
nginx.ingress.kubernetes.io/proxy-next-upstream-tries请求的最大重试次数。

nginx.ingress.kubernetes.io/proxy-request-buffering

配置是否启用请求缓冲功能,取值:

  • on:表示启用请求缓冲。
  • off:表示禁用请求缓冲。

全局限速

注解说明
nginx.ingress.kubernetes.io/global-rate-limit配置一个窗口允许的最大请求数。
nginx.ingress.kubernetes.io/global-rate-limit-window配置窗口的持续时间。
nginx.ingress.kubernetes.io/global-rate-limit-key配置用于计数的键。
nginx.ingress.kubernetes.io/global-rate-limit-ignored-cidrs配置不限速的 IP 列表和 CIDR 列表,不同的 IP 和 CIDR 用逗号分隔。

其他

注解说明
nginx.ingress.kubernetes.io/client-body-buffer-size每个 location 读取客户端请求体的缓存大小。
nginx.ingress.kubernetes.io/configuration-snippet在 location 指令域添加 Nginx 配置指令。
nginx.ingress.kubernetes.io/custom-http-errors根据响应码设置为错误状态,只针对当前 Ingress 关联的 location。
nginx.ingress.kubernetes.io/disable-proxy-intercept-errors当配置了custom-http-errors时,可以使用该注解禁用 Nginx 的 proxy-intercept-errors,但仅适用于与此 Ingress 关联的 Nginx 的 location。

nginx.ingress.kubernetes.io/http2-push-preload

配置是否 Nginx 可以自动把 Link 头中指定的预加载链接推送给客户端。取值:

  • true:自动把 Link 头中指定的预加载链接推送给客户端。
  • false:不把 Link 头中指定的预加载链接推送给客户端。
nginx.ingress.kubernetes.io/limit-connections配置单个 IP 地址的并发连接数限制。
nginx.ingress.kubernetes.io/limit-rps配置单个 IP 地址每秒请求频率限制。
nginx.ingress.kubernetes.io/proxy-body-size配置 Nginx 中的请求体最大限制。如果客户端请求体的大小超过了最大限制,Nginx 会返回413错误码。
nginx.ingress.kubernetes.io/proxy-cookie-domain将 Upstream server 通过 Set-Cookie 字段设定的 Domain 属性修改为指定的值。
nginx.ingress.kubernetes.io/proxy-cookie-path配置在代理服务器响应的 Set-Cookie 字段。
nginx.ingress.kubernetes.io/proxy-http-version配置 Nginx 反向代理与后端通信的 HTTP 协议版本,取值为1.01.1

nginx.ingress.kubernetes.io/enable-rewrite-log

是否启用重写日志,取值:

  • true:启用重写日志。
  • false:(默认值)禁用重写日志。
nginx.ingress.kubernetes.io/satisfy默认情况下,请求需要满足所有身份验证要求才能被允许。使用该注解允许满足任何或所有身份验证要求的请求。
nginx.ingress.kubernetes.io/server-alias在 Nginx 配置的服务器定义中设置一个或多个别名。
nginx.ingress.kubernetes.io/server-snippet扩展配置到 Server 模块。

nginx.ingress.kubernetes.io/service-upstream

配置 Upstream 成员列表。取值:

  • true:以 Service 的 ClusterIP 和端口作为 Upstream 中的成员列表。
  • false:(默认值)以 Service 中 Pod 的 IP 和端口作为 Upstream 中的成员列表。
nginx.ingress.kubernetes.io/session-cookie-name配置 Cookie 名称。
nginx.ingress.kubernetes.io/session-cookie-path配置 Cookie 字段 Path 的值。
nginx.ingress.kubernetes.io/session-cookie-domain配置 Cookie 的 Domain 属性。

nginx.ingress.kubernetes.io/session-cookie-change-on-failure

当会话保持的被代理服务器请求失败时,下次请求是否更改为向另一台被代理服务器转发。

  • true:下次请求更改为向另一台被代理服务器转发。
  • false:下次请求继续向当前被代理服务器转发。
nginx.ingress.kubernetes.io/session-cookie-samesite配置 Samesite 属性到 Cookie 上。
nginx.ingress.kubernetes.io/session-cookie-conditional-samesite-none配置在不兼容SameSite=None的浏览器中忽略SameSite=None属性。

nginx.ingress.kubernetes.io/ssl-passthrough

配置 Controller 是否将 TLS 链接直接发发送到后端,取值:

  • true:直接将 TLS 链接发送到后端,不解密。
  • false:使用 Nginx 解密 TLS 链接。
nginx.ingress.kubernetes.io/stream-snippet添加自定义的流配置到 Server 块。
nginx.ingress.kubernetes.io/upstream-hash-by用于一致散列的 Nginx 变量、文本值或其任何组合。
nginx.ingress.kubernetes.io/x-forwarded-prefix用字符串值将非标准的 X-Forwarded-Prefix 标头添加到上游请求中。
nginx.ingress.kubernetes.io/load-balance配置后端服务的负载均衡算法。取值为:(默认值)round_robin 和 ewma。
nginx.ingress.kubernetes.io/upstream-vhost允许修改语句proxy_set_header Host $host中的 host 值。
nginx.ingress.kubernetes.io/denylist-source-range配置路由 IP 黑名单,支持 IP 地址或 CIDR 地址块,以逗号分隔。
nginx.ingress.kubernetes.io/whitelist-source-range配置路由 IP 白名单,支持 IP 地址或 CIDR 地址块,以逗号分隔。

nginx.ingress.kubernetes.io/proxy-buffering

配置是否开启代理缓冲,取值:

  • on:开启代理缓冲。
  • off:(默认值)禁用代理缓冲。
nginx.ingress.kubernetes.io/proxy-buffers-number配置从代理服务器中读取响应的缓冲区的数量。默认为 4。
nginx.ingress.kubernetes.io/proxy-buffer-size配置从代理服务器中读取响应的缓冲的大小。默认为4k。
nginx.ingress.kubernetes.io/proxy-max-temp-file-size配置临时缓冲区大小。当从代理服务器读取响应的缓冲区时,如果完整的响应数据量大于缓冲区大小,一部分响应数据可以保存在临时缓冲区里。
nginx.ingress.kubernetes.io/ssl-ciphers配置 TLS 用于协商使用的加密算法组合。

nginx.ingress.kubernetes.io/ssl-prefer-server-ciphers

配置使用 SSLv3 和 TLS 协议时,服务器加密算法是否优先于客户端加密算法。取值:

  • true:服务器加密算法优先于客户端加密算法。
  • false:服务器加密算法不优先于客户端加密算法。
nginx.ingress.kubernetes.io/connection-proxy-header配置覆盖 Nginx 的默认链接头。

nginx.ingress.kubernetes.io/enable-access-log

配置是否开启访问日志,取值:

  • true:(默认值)开启访问日志。
  • false:禁用访问日志。

nginx.ingress.kubernetes.io/enable-opentracing

配置是否开启 opentracing,取值:

  • true:开启 opentracing。
  • false:关闭 opentracing。

nginx.ingress.kubernetes.io/opentracing-trust-incoming-span

配置是否信任 trace spans,取值:

  • true:信任 trace spans。
  • false:不信任 trace spans。

nginx.ingress.kubernetes.io/enable-opentelemetry

配置是否开启 Opentelemetry,取值:

  • true:开启 Opentelemetry。
  • false:禁用 Opentelemetry。

nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span

配置是否信任 Opentelemetry 的 trace spans,取值:

  • true:信任 Opentelemetry 的 trace spans。
  • false:不信任 Opentelemetry 的 trace spans。

nginx.ingress.kubernetes.io/use-regex

配置是否使用正则表达式形式的路径,取值:

  • true:使用正则表达式形式的路径。
  • false:不使用正则表达式形式的路径。

nginx.ingress.kubernetes.io/enable-modsecurity

是否开启 ModSecurity,取值:

  • true:开启 ModSecurity。
  • false:禁用 ModSecurity。

nginx.ingress.kubernetes.io/enable-owasp-core-rules

配置是否开启 OWASP Core Rule Set,取值:

  • true:开启 OWASP Core Rule Set。
  • false:禁用 OWASP Core Rule Set。
nginx.ingress.kubernetes.io/modsecurity-transaction-id配置从 Nginx 传递事务 ID,而不是在库中自动生成。
nginx.ingress.kubernetes.io/modsecurity-snippet配置自定义 ModSecurity 规则。