文章目录
- 1.Canary(金丝雀)
- 2.Rewrite(重写)
- 3.Session Affinity(会话亲和性)
- 4.Cookie affinity
- 5.Authentication
- 6.Custom NGINX upstream hashing
- 7.自定义NGINX负载均衡
- 8.自定义 NGINX 上游虚拟主机
- 9.Client Certificate Authentication(客户端证书认证)
- 10.Backend Certificate Authentication(后端证书认证)
- 11.Configuration snippet(配置段)
- 12.Custom HTTP Errors(自定义HTTP错误)
- 13.Disable Proxy intercept Errors(禁用代理拦截错误)
- 14.Default Backend(默认后端)
- 15.Enable CORS
您可以将这些 Kubernetes 注释添加到特定的 Ingress 对象中,以自定义其行为。注释键和值只能是字符串。其他类型,如布尔值或数值必须加引号,即“true”、“false”、“100”。
注释前缀可以使用以下命令进行更改–annotations-prefix 命令行参数,但默认值是nginx.ingress.kubernetes.io,如下表。
Name | type |
---|---|
nginx.ingress.kubernetes.io/app-root | string |
nginx.ingress.kubernetes.io/affinity | cookie |
nginx.ingress.kubernetes.io/affinity-mode | “balanced” or “persistent” |
nginx.ingress.kubernetes.io/affinity-canary-behavior | “sticky” or “legacy” |
nginx.ingress.kubernetes.io/auth-realm | string |
nginx.ingress.kubernetes.io/auth-secret | string |
nginx.ingress.kubernetes.io/auth-secret-type | string |
nginx.ingress.kubernetes.io/auth-type | “basic” or “digest” |
nginx.ingress.kubernetes.io/auth-tls-secret | string |
nginx.ingress.kubernetes.io/auth-tls-verify-depth | number |
nginx.ingress.kubernetes.io/auth-tls-verify-client | string |
nginx.ingress.kubernetes.io/auth-tls-error-page | string |
nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream | “true” or “false” |
nginx.ingress.kubernetes.io/auth-tls-match-cn | string |
nginx.ingress.kubernetes.io/auth-url | string |
nginx.ingress.kubernetes.io/auth-cache-key | string |
nginx.ingress.kubernetes.io/auth-cache-duration | string |
nginx.ingress.kubernetes.io/auth-keepalive | number |
nginx.ingress.kubernetes.io/auth-keepalive-share-vars | “true” or “false” |
nginx.ingress.kubernetes.io/auth-keepalive-requests | number |
nginx.ingress.kubernetes.io/auth-keepalive-timeout | number |
nginx.ingress.kubernetes.io/auth-proxy-set-headers | string |
nginx.ingress.kubernetes.io/auth-snippet | string |
nginx.ingress.kubernetes.io/enable-global-auth | “true” or “false” |
nginx.ingress.kubernetes.io/backend-protocol | string |
nginx.ingress.kubernetes.io/canary | “true” or “false” |
nginx.ingress.kubernetes.io/canary-by-header | string |
nginx.ingress.kubernetes.io/canary-by-header-value | string |
nginx.ingress.kubernetes.io/canary-by-header-pattern | string |
nginx.ingress.kubernetes.io/canary-by-cookie | string |
nginx.ingress.kubernetes.io/canary-weight | number |
nginx.ingress.kubernetes.io/canary-weight-total | number |
nginx.ingress.kubernetes.io/client-body-buffer-size | string |
nginx.ingress.kubernetes.io/configuration-snippet | string |
nginx.ingress.kubernetes.io/custom-http-errors | []int |
nginx.ingress.kubernetes.io/disable-proxy-intercept-errors | “true” or “false” |
nginx.ingress.kubernetes.io/default-backend | string |
nginx.ingress.kubernetes.io/enable-cors | “true” or “false” |
nginx.ingress.kubernetes.io/cors-allow-origin | string |
nginx.ingress.kubernetes.io/cors-allow-methods | string |
nginx.ingress.kubernetes.io/cors-allow-headers | string |
nginx.ingress.kubernetes.io/cors-expose-headers | string |
nginx.ingress.kubernetes.io/cors-allow-credentials | “true” or “false” |
nginx.ingress.kubernetes.io/cors-max-age | number |
nginx.ingress.kubernetes.io/force-ssl-redirect | “true” or “false” |
nginx.ingress.kubernetes.io/from-to-www-redirect | “true” or “false” |
nginx.ingress.kubernetes.io/http2-push-preload | “true” or “false” |
nginx.ingress.kubernetes.io/limit-connections | number |
nginx.ingress.kubernetes.io/limit-rps | number |
nginx.ingress.kubernetes.io/global-rate-limit | number |
nginx.ingress.kubernetes.io/global-rate-limit-window | duration |
nginx.ingress.kubernetes.io/global-rate-limit-key | string |
nginx.ingress.kubernetes.io/global-rate-limit-ignored-cidrs | string |
nginx.ingress.kubernetes.io/permanent-redirect | string |
nginx.ingress.kubernetes.io/permanent-redirect-code | number |
nginx.ingress.kubernetes.io/temporal-redirect | string |
nginx.ingress.kubernetes.io/preserve-trailing-slash | “true” or “false” |
nginx.ingress.kubernetes.io/proxy-body-size | string |
nginx.ingress.kubernetes.io/proxy-cookie-domain | string |
nginx.ingress.kubernetes.io/proxy-cookie-path | string |
nginx.ingress.kubernetes.io/proxy-connect-timeout | number |
nginx.ingress.kubernetes.io/proxy-send-timeout | number |
nginx.ingress.kubernetes.io/proxy-read-timeout | number |
nginx.ingress.kubernetes.io/proxy-next-upstream | string |
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout | number |
nginx.ingress.kubernetes.io/proxy-next-upstream-tries | number |
nginx.ingress.kubernetes.io/proxy-request-buffering | string |
nginx.ingress.kubernetes.io/proxy-redirect-from | string |
nginx.ingress.kubernetes.io/proxy-redirect-to | string |
nginx.ingress.kubernetes.io/proxy-http-version | “1.0” or “1.1” |
nginx.ingress.kubernetes.io/proxy-ssl-secret | string |
nginx.ingress.kubernetes.io/proxy-ssl-ciphers | string |
nginx.ingress.kubernetes.io/proxy-ssl-name | string |
nginx.ingress.kubernetes.io/proxy-ssl-protocols | string |
nginx.ingress.kubernetes.io/proxy-ssl-verify | string |
nginx.ingress.kubernetes.io/proxy-ssl-verify-depth | number |
nginx.ingress.kubernetes.io/proxy-ssl-server-name | string |
nginx.ingress.kubernetes.io/enable-rewrite-log | “true” or “false” |
nginx.ingress.kubernetes.io/rewrite-target | URI |
nginx.ingress.kubernetes.io/satisfy | string |
nginx.ingress.kubernetes.io/server-alias | string |
nginx.ingress.kubernetes.io/server-snippet | string |
nginx.ingress.kubernetes.io/service-upstream | “true” or “false” |
nginx.ingress.kubernetes.io/session-cookie-name | string |
nginx.ingress.kubernetes.io/session-cookie-path | string |
nginx.ingress.kubernetes.io/session-cookie-domain | string |
nginx.ingress.kubernetes.io/session-cookie-change-on-failure | “true” or “false” |
nginx.ingress.kubernetes.io/session-cookie-samesite | string |
nginx.ingress.kubernetes.io/session-cookie-conditional-samesite-none | “true” or “false” |
nginx.ingress.kubernetes.io/ssl-redirect | “true” or “false” |
nginx.ingress.kubernetes.io/ssl-passthrough | “true” or “false” |
nginx.ingress.kubernetes.io/stream-snippet | string |
nginx.ingress.kubernetes.io/upstream-hash-by | string |
nginx.ingress.kubernetes.io/x-forwarded-prefix | string |
nginx.ingress.kubernetes.io/load-balance | string |
nginx.ingress.kubernetes.io/upstream-vhost | string |
nginx.ingress.kubernetes.io/denylist-source-range | CIDR |
nginx.ingress.kubernetes.io/whitelist-source-range | CIDR |
nginx.ingress.kubernetes.io/proxy-buffering | string |
nginx.ingress.kubernetes.io/proxy-buffers-number | number |
nginx.ingress.kubernetes.io/proxy-buffer-size | string |
nginx.ingress.kubernetes.io/proxy-max-temp-file-size | string |
nginx.ingress.kubernetes.io/ssl-ciphers | string |
nginx.ingress.kubernetes.io/ssl-prefer-server-ciphers | “true” or “false” |
nginx.ingress.kubernetes.io/connection-proxy-header | string |
nginx.ingress.kubernetes.io/enable-access-log | “true” or “false” |
nginx.ingress.kubernetes.io/enable-opentracing | “true” or “false” |
nginx.ingress.kubernetes.io/opentracing-trust-incoming-span | “true” or “false” |
nginx.ingress.kubernetes.io/enable-opentelemetry | “true” or “false” |
nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span | “true” or “false” |
nginx.ingress.kubernetes.io/use-regex | bool |
nginx.ingress.kubernetes.io/enable-modsecurity | bool |
nginx.ingress.kubernetes.io/enable-owasp-core-rules | bool |
nginx.ingress.kubernetes.io/modsecurity-transaction-id | string |
nginx.ingress.kubernetes.io/modsecurity-snippet | string |
nginx.ingress.kubernetes.io/mirror-request-body | string |
nginx.ingress.kubernetes.io/mirror-target | string |
nginx.ingress.kubernetes.io/mirror-host | string |
1.Canary(金丝雀)
在某些情况下,您可能希望通过向与生产服务不同的服务发送少量请求来"金丝雀"一组新的更改。金丝雀注释使Ingress规范能够根据应用的规则充当请求路由到的备选服务。在设置nginx.ingress.kubernetes.io/canary: "true"
后,可以启用以下配置金丝雀的注释:
- nginx.ingress.kubernetes.io/canary-by-header: 用于通知Ingress将请求路由到Canary Ingress中指定的服务的头。当请求头设置为always时,将路由到金丝雀。当头设置为never时,永远不会路由到金丝雀。对于任何其他值,将忽略头,并根据优先级与其他金丝雀规则进行比较。
- nginx.ingress.kubernetes.io/canary-by-header-value: 用于匹配通知Ingress将请求路由到Canary Ingress中指定的服务的头值。当请求头设置为此值时,将路由到金丝雀。对于任何其他头值,将忽略头,并根据优先级与其他金丝雀规则进行比较。必须与nginx.ingress.kubernetes.io/canary-by-header一起使用此注释。此注释是nginx.ingress.kubernetes.io/canary-by-header的扩展,允许自定义头值而不是使用硬编码值。如果未定义nginx.ingress.kubernetes.io/canary-by-header注释,则不会产生任何效果。
- nginx.ingress.kubernetes.io/canary-by-header-pattern: 这与canary-by-header-value的工作方式相同,只是它进行PCRE Regex匹配。请注意,当设置canary-by-header-value时,将忽略此注解。当给定的Regex在请求处理期间引发错误时,将认为该请求不匹配。
- nginx.ingress.kubernetes.io/canary-by-cookie: 用于通知Ingress将请求路由到Canary Ingress中指定的服务的cookie。当cookie值设置为always时,将路由到金丝雀。当cookie设置为never时,永远不会路由到金丝雀。对于任何其他值,将忽略cookie,并根据优先级与其他金丝雀规则进行比较。
- nginx.ingress.kubernetes.io/canary-weight: 应路由到金丝雀Ingress中指定的服务的随机请求的基于整数的(0 - )百分比。权重为0意味着此金丝雀规则不会将任何请求发送到金丝雀ingress中的服务。权重意味着所有请求将发送到Ingress中指定的备选服务。默认为100,可以通过nginx.ingress.kubernetes.io/canary-weight-total增加。
- nginx.ingress.kubernetes.io/canary-weight-total: 流量的总重量。如果未指定,默认为100。
金丝雀规则按优先级顺序进行评估。优先级如下:canary-by-header -> canary-by-cookie -> canary-weight
请注意,当您将ingress标记为金丝雀时,将忽略所有其他非金丝雀注释(从相应的主ingress继承),除了nginx.ingress.kubernetes.io/load-balance,nginx.ingress.kubernetes.io/upstream-hash-by和与会话亲和性相关的注释。
如果您希望在忽略会话亲和性时恢复金丝雀的原始行为,请在金丝雀ingress定义上设置nginx.ingress.kubernetes.io/affinity-canary-behavior注释,值为legacy。
已知的限制是目前每个Ingress规则最多只能应用一个金丝雀入口。
2.Rewrite(重写)
在某些场景中,后端服务公开的URL与Ingress规则中指定的路径不同。如果没有重写,任何请求都会返回404。请将注解nginx.ingress.kubernetes.io/rewrite-target
设置为服务期望的路径。
如果应用程序根目录在不同的路径中公开并需要重定向,请将注解nginx.ingress.kubernetes.io/app-root
设置为重定向请求。
3.Session Affinity(会话亲和性)
注解nginx.ingress.kubernetes.io/affinity可以在Ingress的所有上游中启用并设置亲和性类型。这样,请求将始终被定向到同一个上游服务器。对于NGINX,唯一可用的亲和性类型是cookie。
注解nginx.ingress.kubernetes.io/affinity-mode
定义了会话的粘性。将此设置为平衡(默认)将在部署扩展时重新分配一些会话,从而重新平衡服务器上的负载。将此设置为持久不会将会话重新平衡到新的服务器,因此提供最大的粘性。
注解nginx.ingress.kubernetes.io/affinity-canary-behavior
定义了在启用会话亲和性时金丝雀的行为。将此设置为粘性(默认)将确保被金丝雀服务的用户将继续被金丝雀服务。将此设置为legacy将恢复原始的金丝雀行为,当时会话亲和性被忽略。
注意:如果为主机定义了多个Ingress,并且至少一个Ingress使用nginx.ingress.kubernetes.io/affinity:cookie
,那么只有在使用nginx.ingress.kubernetes.io/affinity的Ingress上的路径将使用会话cookie亲和性。主机上其他Ingress定义的所有路径将通过随机选择后端服务器进行负载均衡。
4.Cookie affinity
如果你使用cookie亲和性类型,你也可以通过注解nginx.ingress.kubernetes.io/session-cookie-name
来指定将被用来路由请求的cookie的名称。默认情况下,会创建一个名为'INGRESSCOOKIE'
的cookie。
NGINX注解nginx.ingress.kubernetes.io/session-cookie-path
定义了将被设置在cookie上的路径。除非将注解nginx.ingress.kubernetes.io/use-regex
设置为true,否则这是可选的;会话cookie的路径不支持正则表达式。
使用nginx.ingress.kubernetes.io/session-cookie-domain
来设置粘性cookie的域属性。
使用nginx.ingress.kubernetes.io/session-cookie-samesite
来对粘性cookie应用SameSite属性。浏览器接受的值有None、Lax和Strict。一些浏览器会拒绝SameSite=None的cookie,包括在SameSite=None规范之前创建的cookie(例如Chrome 5X)。其他浏览器错误地将SameSite=None的cookie视为SameSite=Strict(例如运行在OSX 14上的Safari)。为了从这些不兼容的浏览器中省略SameSite=None
,添加注解nginx.ingress.kubernetes.io/session-cookie-conditional-samesite-none: "true"
。
5.Authentication
这是可能的,通过在Ingress规则中添加额外的注解来添加认证。认证的来源是一个包含用户名和密码的秘密。注解包括:
nginx.ingress.kubernetes.io/auth-type: [basic|digest]
表示HTTP认证类型:基本或摘要访问认证。
nginx.ingress.kubernetes.io/auth-secret: secretName
指定包含用户名和密码的Secret的名称,这些用户名和密码被授予访问在Ingress规则中定义的路径的权限。此注解还接受"namespace/secretName"的替代形式,在这种情况下,Secret的查找是在引用的命名空间中执行,而不是在Ingress命名空间中执行。
nginx.ingress.kubernetes.io/auth-secret-type: [auth-file|auth-map]
auth-secret可以有两种形式:
- auth-file - 默认情况下,secret中的auth键中有一个htpasswd文件
- auth-map - secret的键是用户名,值是哈希密码
nginx.ingress.kubernetes.io/auth-realm: "realm string"
6.Custom NGINX upstream hashing
NGINX支持基于给定键的一致性哈希的客户端-服务器映射进行负载均衡。键可以包含文本、变量或者两者的任何组合。这个特性允许除了客户端IP或Cookie之外的请求粘性。将使用ketama一致性哈希方法,这确保在上游组改变时,只有少数键会被重新映射到不同的服务器。
有一种特殊的上游哈希模式叫做子集。在这种模式下,上游服务器被分组到子集中,粘性通过将键映射到子集而不是单个上游服务器来工作。从选定的粘性子集中随机均匀选择特定的服务器。它在粘性和负载分配之间提供了平衡。
要为后端启用一致性哈希:
nginx.ingress.kubernetes.io/upstream-hash-by:
用于一致性哈希的nginx变量、文本值或者任何组合。例如:
nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri" or nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri$host" or nginx.ingress.kubernetes.io/upstream-hash-by: "${request_uri}-text-value"
以便根据当前请求URI对上游请求进行一致性哈希。
"subset"哈希可以通过设置nginx.ingress.kubernetes.io/upstream-hash-by-subset: "true"
来启用。这将请求映射到节点的子集,而不是单个节点。nginx.ingress.kubernetes.io/upstream-hash-by-subset-size
决定了每个子集的大小(默认为3)。
7.自定义NGINX负载均衡
这与ConfigMap中的负载均衡类似,但是按照每个入口配置负载均衡算法。
请注意,nginx.ingress.kubernetes.io/upstream-hash-by
优先于此。如果这个和nginx.ingress.kubernetes.io/upstream-hash-by
都没有设置,那么我们将回退使用全局配置的负载均衡算法。
8.自定义 NGINX 上游虚拟主机
此配置设置允许你控制以下语句中 host 的值:proxy_set_header Host $host,该语句是location块的一部分。如果你需要用host,该语句是location块的一部分。如果你需要用host 以外的内容来调用上游服务器,这将非常有用。
9.Client Certificate Authentication(客户端证书认证)
可以通过在 Ingress 规则中使用额外的注解来启用客户端证书认证。
客户端证书认证是按主机应用的,无法为单个路径指定不同的规则。
要启用,添加注解 nginx.ingress.kubernetes.io/auth-tls-secret: namespace/secretName
。此密钥必须有一个名为 ca.crt 的文件,其中包含完整的证书颁发机构链 ca.crt,这是启用对此 Ingress 进行认证的证书。
你可以使用以下注解进一步定制客户端证书认证和行为:
- nginx.ingress.kubernetes.io/auth-tls-verify-depth: 提供的客户端证书和证书颁发机构链之间的验证深度。(默认值:1)
- nginx.ingress.kubernetes.io/auth-tls-verify-client: 启用客户端证书的验证。可能的值有:
- on: 请求一个客户端证书,该证书必须由在 nginx.ingress.kubernetes.io/auth-tls-secret: namespace/secretName 中指定的密钥的密钥 ca.crt 中包含的证书签名。证书验证失败将导致状态码 400(Bad Request)(默认)
- off: 不请求客户端证书,也不进行客户端证书验证。
- optional: 对来自 auth-tls-secret 的 CA 进行可选的客户端证书验证。当提供的证书未由 CA 签名时,请求将以状态码 400(Bad Request)失败。当没有提供证书或者提供了无效的证书时,请求不会失败,而是将验证结果发送到上游服务。
- optional_no_ca: 进行可选的客户端证书验证,但当客户端证书未由来自 auth-tls-secret 的 CA 签名时,不会导致请求失败。证书验证结果将发送到上游服务。
- nginx.ingress.kubernetes.io/auth-tls-error-page: 在证书认证错误的情况下,用户应被重定向到的 URL/页面
- nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: 指示是否应将接收到的证书传递到头部 ssl-client-cert 的上游服务器。可能的值是 “true” 或 “false”(默认)。
- nginx.ingress.kubernetes.io/auth-tls-match-cn: 添加一个对使用字符串/正则表达式(以 “CN=” 开头)发送的客户端证书的 CN 进行健全性检查,例如:“CN=myvalidclient”。如果在 mTLS 中发送的证书 CN 不匹配你的字符串/正则表达式,它将以状态码 403 失败。使用此功能的另一种方式是在你的正则表达式中添加多个选项,例如:
"CN=(option1|option2|myvalidclient)"
。在这种情况下,只要括号中的一个选项匹配证书 CN,你就会收到一个 200 状态码。
根据 auth-tls-* 注解,以下头部将发送到上游服务:- ssl-client-issuer-dn: 客户端证书的颁发者信息。例如:“CN=My CA”
- ssl-client-subject-dn: 客户端证书的主题信息。例如:“CN=My Client”
- ssl-client-verify: 客户端验证的结果。可能的值:
"SUCCESS", "FAILED: <description, why the verification failed>"
- ssl-client-cert: PEM 格式的完整客户端证书。只有当
nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream
设置为 “true” 时才会发送。例如:-----BEGIN%20CERTIFICATE-----%0A...---END%20CERTIFICATE-----%0A
10.Backend Certificate Authentication(后端证书认证)
使用Ingress规则中的额外注解,可以使用证书对代理的HTTPS后端进行身份验证。以下是一些关键的注解:
- nginx.ingress.kubernetes.io/proxy-ssl-secret: secretName: 指定用于向代理的HTTPS服务器进行身份验证的PEM格式的证书tls.crt和密钥tls.key的Secret。它还应包含用于验证代理HTTPS服务器证书的PEM格式的可信CA证书ca.crt。此注解期望Secret名称的形式为"namespace/secretName"。
- nginx.ingress.kubernetes.io/proxy-ssl-verify: 启用或禁用代理HTTPS服务器证书的验证。 (默认: 关闭)
- nginx.ingress.kubernetes.io/proxy-ssl-verify-depth: 设置代理HTTPS服务器证书链中的验证深度。 (默认: 1)
- nginx.ingress.kubernetes.io/proxy-ssl-ciphers: 指定向代理HTTPS服务器的请求所启用的密码。密码以OpenSSL库理解的格式指定。
- nginx.ingress.kubernetes.io/proxy-ssl-name: 允许设置proxy_ssl_name。这允许覆盖用于验证代理HTTPS服务器证书的服务器名称。在与代理HTTPS服务器建立连接时,此值也会通过SNI传递。
- nginx.ingress.kubernetes.io/proxy-ssl-protocols: 启用向代理HTTPS服务器的请求所指定的协议。
- nginx.ingress.kubernetes.io/proxy-ssl-server-name: 在与代理HTTPS服务器建立连接时,启用通过TLS服务器名称指示扩展(SNI,RFC 6066)传递服务器名称。
11.Configuration snippet(配置段)
使用这个注解,你可以向NGINX位置添加额外的配置。例如:
nginx.ingress.kubernetes.io/configuration-snippet: |more_set_headers "Request-Id: $req_id";
注意:自1.9.0版本起,“configuration-snippet”
注解默认是禁用的,必须显式启用,详见allow-snippet-annotations。在多租户集群中启用它可能会很危险,因为这可能导致原本权限有限的人能够检索到集群上的所有秘密。更多信息请参见CVE-2021-25742和github上的相关问题。
12.Custom HTTP Errors(自定义HTTP错误)
就像ConfigMap中的custom-http-errors值一样,这个注解将设置NGINX的proxy-intercept-errors,但只针对与此Ingress相关的NGINX位置。如果在Ingress上指定了默认的后端注解,错误将被路由到该注解的默认后端服务(而不是全局默认后端)。不同的Ingress可以指定不同的错误代码集。即使多个Ingress对象共享同一主机名,这个注解也可以用来拦截每个Ingress的不同错误代码(例如,如果每个路径都在不同的Ingress上,那么同一主机名的不同路径可以拦截不同的错误代码)。如果也全局指定了custom-http-errors,那么这个注解中指定的错误值将覆盖给定Ingress主机名和路径的全局值。
示例用法:
nginx.ingress.kubernetes.io/custom-http-errors: "404,415"
13.Disable Proxy intercept Errors(禁用代理拦截错误)
像在ConfigMap中的disable-proxy-intercept-errors值一样,这个注解允许在设置了custom-http-errors时禁用NGINX的proxy-intercept-errors,但只对与这个ingress关联的NGINX位置有效。如果在ingress上指定了默认的后端注解,错误将被路由到那个注解的默认后端服务(而不是全局默认的后端)。不同的ingress可以指定不同的错误代码集,有一些用例需要NGINX不拦截所有来自上游的错误。如果全局也指定了disable-proxy-intercept-errors,那么这个注解将覆盖给定的ingress主机名和路径的全局值。
示例用法:
nginx.ingress.kubernetes.io/disable-proxy-intercept-errors: "false"
14.Default Backend(默认后端)
这个注解的格式是nginx.ingress.kubernetes.io/default-backend: ,用于指定自定义的默认后端。这里的是对在应用这个注解的同一命名空间内的服务的引用。这个注解会覆盖全局默认后端。如果服务有多个端口,第一个将会接收后端流量。
当在Ingress规则中配置的服务没有任何活动的端点时,这个服务将被用来处理响应。如果设置了这个注解和custom-http-errors注解,它也将被用来处理错误响应。
15.Enable CORS
要在Ingress规则中启用跨源资源共享(CORS),添加注解nginx.ingress.kubernetes.io/enable-cors: “true”。这将在服务器位置中添加一个启用此功能的部分。
CORS可以通过以下注解进行控制:
- nginx.ingress.kubernetes.io/cors-allow-methods:控制接受哪些方法。这是一个多值字段,用’,'分隔,只接受字母(大小写)。
- 默认值:GET, PUT, POST, DELETE, PATCH, OPTIONS
- 示例:nginx.ingress.kubernetes.io/cors-allow-methods: “PUT, GET, POST, OPTIONS”
- nginx.ingress.kubernetes.io/cors-allow-headers:控制接受哪些头。这是一个多值字段,用’,'分隔,接受字母、数字、_ 和 -。
- 默认值:DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization
- 示例
:nginx.ingress.kubernetes.io/cors-allow-headers: "X-Forwarded-For, X-app123-XPTO"
- nginx.ingress.kubernetes.io/cors-expose-headers:控制哪些头暴露给响应。这是一个多值字段,用’,'分隔,接受字母、数字、_、- 和 。
- 默认值:空
- 示例:
nginx.ingress.kubernetes.io/cors-expose-headers: ", X-CustomResponseHeader"
- nginx.ingress.kubernetes.io/cors-allow-origin:控制接受哪个源的CORS。这是一个多值字段,用’,'分隔。它必须遵循以下格式:
http(s)://origin-site.com 或 http(s)://origin-site.com:port
- 默认值:*
- 示例:
nginx.ingress.kubernetes.io/cors-allow-origin: "https://origin-site.com:4443, http://origin-site.com, https://example.org:1199"
它还支持单级通配符子域名,遵循以下格式:http(s)://.foo.bar, http(s)://.bar.foo:8080 或 http(s)://.abc.bar.foo:9000
- 示例:
nginx.ingress.kubernetes.io/cors-allow-origin: "https://.origin-site.com:4443, http://*.origin-site.com, https://example.org:1199"
- nginx.ingress.kubernetes.io/cors-allow-credentials:控制是否可以在CORS操作期间传递凭据。
- 默认值:true
- 示例:nginx.ingress.kubernetes.io/cors-allow-credentials: “false”
- nginx.ingress.kubernetes.io/cors-max-age:控制预检请求可以缓存多长时间。
- 默认值:1728000
- 示例:nginx.ingress.kubernetes.io/cors-max-age: 600