Ingress-Nginx Annotations 指南:配置要点全方面解读(上)

文章目录

  • 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,如下表。

Nametype
nginx.ingress.kubernetes.io/app-rootstring
nginx.ingress.kubernetes.io/affinitycookie
nginx.ingress.kubernetes.io/affinity-mode“balanced” or “persistent”
nginx.ingress.kubernetes.io/affinity-canary-behavior“sticky” or “legacy”
nginx.ingress.kubernetes.io/auth-realmstring
nginx.ingress.kubernetes.io/auth-secretstring
nginx.ingress.kubernetes.io/auth-secret-typestring
nginx.ingress.kubernetes.io/auth-type“basic” or “digest”
nginx.ingress.kubernetes.io/auth-tls-secretstring
nginx.ingress.kubernetes.io/auth-tls-verify-depthnumber
nginx.ingress.kubernetes.io/auth-tls-verify-clientstring
nginx.ingress.kubernetes.io/auth-tls-error-pagestring
nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream“true” or “false”
nginx.ingress.kubernetes.io/auth-tls-match-cnstring
nginx.ingress.kubernetes.io/auth-urlstring
nginx.ingress.kubernetes.io/auth-cache-keystring
nginx.ingress.kubernetes.io/auth-cache-durationstring
nginx.ingress.kubernetes.io/auth-keepalivenumber
nginx.ingress.kubernetes.io/auth-keepalive-share-vars“true” or “false”
nginx.ingress.kubernetes.io/auth-keepalive-requestsnumber
nginx.ingress.kubernetes.io/auth-keepalive-timeoutnumber
nginx.ingress.kubernetes.io/auth-proxy-set-headersstring
nginx.ingress.kubernetes.io/auth-snippetstring
nginx.ingress.kubernetes.io/enable-global-auth“true” or “false”
nginx.ingress.kubernetes.io/backend-protocolstring
nginx.ingress.kubernetes.io/canary“true” or “false”
nginx.ingress.kubernetes.io/canary-by-headerstring
nginx.ingress.kubernetes.io/canary-by-header-valuestring
nginx.ingress.kubernetes.io/canary-by-header-patternstring
nginx.ingress.kubernetes.io/canary-by-cookiestring
nginx.ingress.kubernetes.io/canary-weightnumber
nginx.ingress.kubernetes.io/canary-weight-totalnumber
nginx.ingress.kubernetes.io/client-body-buffer-sizestring
nginx.ingress.kubernetes.io/configuration-snippetstring
nginx.ingress.kubernetes.io/custom-http-errors[]int
nginx.ingress.kubernetes.io/disable-proxy-intercept-errors“true” or “false”
nginx.ingress.kubernetes.io/default-backendstring
nginx.ingress.kubernetes.io/enable-cors“true” or “false”
nginx.ingress.kubernetes.io/cors-allow-originstring
nginx.ingress.kubernetes.io/cors-allow-methodsstring
nginx.ingress.kubernetes.io/cors-allow-headersstring
nginx.ingress.kubernetes.io/cors-expose-headersstring
nginx.ingress.kubernetes.io/cors-allow-credentials“true” or “false”
nginx.ingress.kubernetes.io/cors-max-agenumber
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-connectionsnumber
nginx.ingress.kubernetes.io/limit-rpsnumber
nginx.ingress.kubernetes.io/global-rate-limitnumber
nginx.ingress.kubernetes.io/global-rate-limit-windowduration
nginx.ingress.kubernetes.io/global-rate-limit-keystring
nginx.ingress.kubernetes.io/global-rate-limit-ignored-cidrsstring
nginx.ingress.kubernetes.io/permanent-redirectstring
nginx.ingress.kubernetes.io/permanent-redirect-codenumber
nginx.ingress.kubernetes.io/temporal-redirectstring
nginx.ingress.kubernetes.io/preserve-trailing-slash“true” or “false”
nginx.ingress.kubernetes.io/proxy-body-sizestring
nginx.ingress.kubernetes.io/proxy-cookie-domainstring
nginx.ingress.kubernetes.io/proxy-cookie-pathstring
nginx.ingress.kubernetes.io/proxy-connect-timeoutnumber
nginx.ingress.kubernetes.io/proxy-send-timeoutnumber
nginx.ingress.kubernetes.io/proxy-read-timeoutnumber
nginx.ingress.kubernetes.io/proxy-next-upstreamstring
nginx.ingress.kubernetes.io/proxy-next-upstream-timeoutnumber
nginx.ingress.kubernetes.io/proxy-next-upstream-triesnumber
nginx.ingress.kubernetes.io/proxy-request-bufferingstring
nginx.ingress.kubernetes.io/proxy-redirect-fromstring
nginx.ingress.kubernetes.io/proxy-redirect-tostring
nginx.ingress.kubernetes.io/proxy-http-version“1.0” or “1.1”
nginx.ingress.kubernetes.io/proxy-ssl-secretstring
nginx.ingress.kubernetes.io/proxy-ssl-ciphersstring
nginx.ingress.kubernetes.io/proxy-ssl-namestring
nginx.ingress.kubernetes.io/proxy-ssl-protocolsstring
nginx.ingress.kubernetes.io/proxy-ssl-verifystring
nginx.ingress.kubernetes.io/proxy-ssl-verify-depthnumber
nginx.ingress.kubernetes.io/proxy-ssl-server-namestring
nginx.ingress.kubernetes.io/enable-rewrite-log“true” or “false”
nginx.ingress.kubernetes.io/rewrite-targetURI
nginx.ingress.kubernetes.io/satisfystring
nginx.ingress.kubernetes.io/server-aliasstring
nginx.ingress.kubernetes.io/server-snippetstring
nginx.ingress.kubernetes.io/service-upstream“true” or “false”
nginx.ingress.kubernetes.io/session-cookie-namestring
nginx.ingress.kubernetes.io/session-cookie-pathstring
nginx.ingress.kubernetes.io/session-cookie-domainstring
nginx.ingress.kubernetes.io/session-cookie-change-on-failure“true” or “false”
nginx.ingress.kubernetes.io/session-cookie-samesitestring
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-snippetstring
nginx.ingress.kubernetes.io/upstream-hash-bystring
nginx.ingress.kubernetes.io/x-forwarded-prefixstring
nginx.ingress.kubernetes.io/load-balancestring
nginx.ingress.kubernetes.io/upstream-vhoststring
nginx.ingress.kubernetes.io/denylist-source-rangeCIDR
nginx.ingress.kubernetes.io/whitelist-source-rangeCIDR
nginx.ingress.kubernetes.io/proxy-bufferingstring
nginx.ingress.kubernetes.io/proxy-buffers-numbernumber
nginx.ingress.kubernetes.io/proxy-buffer-sizestring
nginx.ingress.kubernetes.io/proxy-max-temp-file-sizestring
nginx.ingress.kubernetes.io/ssl-ciphersstring
nginx.ingress.kubernetes.io/ssl-prefer-server-ciphers“true” or “false”
nginx.ingress.kubernetes.io/connection-proxy-headerstring
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-regexbool
nginx.ingress.kubernetes.io/enable-modsecuritybool
nginx.ingress.kubernetes.io/enable-owasp-core-rulesbool
nginx.ingress.kubernetes.io/modsecurity-transaction-idstring
nginx.ingress.kubernetes.io/modsecurity-snippetstring
nginx.ingress.kubernetes.io/mirror-request-bodystring
nginx.ingress.kubernetes.io/mirror-targetstring
nginx.ingress.kubernetes.io/mirror-hoststring

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/495824.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序-基于Vant Weapp UI 组件库的Area 省市区选择

Area 省市区选择&#xff0c;省市区选择组件通常与 弹出层 组件配合使用。 areaList 格式 areaList 为对象结构&#xff0c;包含 province_list、city_list、county_list 三个 key。 每项以地区码作为 key&#xff0c;省市区名字作为 value。地区码为 6 位数字&#xff0c;前两…

每天40分玩转Django:Django静态文件

Django静态文件 一、今日学习内容概述 学习模块重要程度主要内容静态文件配置⭐⭐⭐⭐⭐基础设置、路径配置CDN集成⭐⭐⭐⭐⭐CDN配置、资源优化静态文件处理⭐⭐⭐⭐压缩、版本控制部署优化⭐⭐⭐⭐性能优化、缓存策略 二、基础配置 # settings.py import os# 静态文件配置…

Python数据处理——re库与pydantic的使用总结与实战,处理采集到的思科ASA防火墙设备信息

目录 Python正则表达式re库的基本用法 引入re库 各函数功能 总结 使用方法举例 正则表达式语法与书写方式 正则表达式的常用操作符 思科ASA防火墙数据 数据1 数据2 书写正则表达式 Python中pydantic的使用 导入基础数据模板 根据数据采集目标定义Pydantic数据类型…

「Python数据科学」标量、向量、矩阵、张量与多维数组的辨析

引言 在数据科学中&#xff0c;有很多概念&#xff0c;其中&#xff0c;最容易搞混的就是标量、向量、矩阵、张量了。具体到这些概念的落地实现&#xff0c;又与多维数组有着密不可分的联系。 本文就来尝试对这些概念进行简要地梳理&#xff0c;从而更加清晰地理解这些概念及…

iOS开发代码块-OC版

iOS开发代码块-OC版 资源分享资源使用详情Xcode自带代码块自定义代码块 资源分享 自提&#xff1a; 通过网盘分享的文件&#xff1a;CodeSnippets 2.zip 链接: https://pan.baidu.com/s/1Yh8q9PbyeNpuYpasG4IiVg?pwddn1i 提取码: dn1i Xcode中的代码片段默认放在下面的目录中…

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项任务书正式赛题

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项任务书-A 目录 一、竞赛阶段 二、竞赛任务书内容 &#xff08;一&#xff09;拓扑图 &#xff08;二&#xff09;模块A 基础设施设置与安全加固(200分) &#xff08;三&#xff09;B模块安全事件响应/网络安全数据取证/…

Git(11)之log显示支持中文

Git(11)之log显示支持中文 Author&#xff1a;Once Day Date&#xff1a;2024年12月21日 漫漫长路有人对你微笑过嘛… 参考文档&#xff1a;GIT使用log命令显示中文乱码_gitlab的log在matlab里显示中文乱码-CSDN博客 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSD…

rabbitmq相关使用

使用rabbitmq实现异步解耦 使用步骤&#xff1a; 1、pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2、yml配置文件 spring:rabbitmq:host: 12…

oracle linux8.10+ oracle 23ai安装

介质准备&#xff1a; 数据库23ai https://edelivery.oracle.com 上述网站下载基础版本&#xff0c;本次未使用。 本次是安装了带补丁的版本&#xff1a; Database Release Update 23.6.0.24.10 GoldImage表示带补丁用于直接安装的软件包 查找888.1对应Primary Note for …

使用helm安装canal-server和canal-admin

1.前置条件&#xff1a; 需要电脑有helm kubectl 如果没有的话需要安装环境 2.需要拉取canal-server和canal-admin镜像 拉取镜像的时候可能存在拉取不下来的情况&#xff0c;需要配置&#xff1a; /etc/docker/daemon.json {"registry-mirrors": ["https://do…

使用ForceBindIP绑定应用到指定IP

前言 使用ForceBindIP工具&#xff0c;用户可以轻松地将特定应用程序绑定到指定的IP地址&#xff0c;从而确保应用程序的网络连接通过指定的网络适配器进行。通过在命令提示符下运行ForceBindIP并指定IP地址和应用程序的完整路径&#xff0c;用户能够控制应用程序的网络流量&a…

Windows下安装Rabbit MQ

一、安装环境&#xff1a; 系统&#xff1a;windows11; 环境配置安装&#xff1a;otp_win64_25.3.2.14.exe&#xff08;erlang类库&#xff09;&#xff1b; 服务应用安装&#xff1a;rabbitmq-server-3.12.4.exe&#xff1b; 二、erlang环境&#xff1a; 1.执行…

层序遍历练习

层次遍历 II 给定一个二叉树&#xff0c;返回其节点值自底向上的层次遍历。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09; 思路 相对于102.二叉树的层序遍历&#xff0c;就是最后把result数组反转一下就可以了。 C代码&…

[Python机器学习]:Anaconda3实践环境安装和使用

文章目录 一&#xff1a;机器学习基本环境安装二&#xff1a;设置环境变量三&#xff1a;检查结果四&#xff1a;创建自己的虚拟环境1&#xff1a;查看虚拟环境: conda env list2&#xff1a;创建新环境:conda create --name envname python3.83&#xff1a;删除环境:conda rem…

重温设计模式--观察者模式

文章目录 观察者模式&#xff08;Observer Pattern&#xff09;概述观察者模式UML图作用&#xff1a;实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题&#xff08;Subject&#xff09;&#xff1a;具体主题&#xff08;Concrete Subject&#xf…

【更新】Docker新手入门教程2:在Windows系统通过compose创建多个mysql镜像并配置应用

文章目录 前言一、运行Docker init生成docker配置文件二、修改创建镜像的配置文件1、添加镜像挂载点 三、【拉取镜像】四、生成Docker 镜像查看生成的镜像 五、修改Compose配置文件3、配置Mysql六、生成Docker容器七、检查容器创建状态总结 前言 在window下通过Docker创建mysq…

lxml 解析xml\html

from lxml import etree# XML文档示例 xml_doc """ <root><book><title>Python编程指南</title><author>张三</author></book><book><title>Python高级编程</title><author>李四</autho…

FFmpeg在python里推流被处理过的视频流

链式算法处理视频流 视频源是本地摄像头 # codinggbk # 本地摄像头直接推流到 RTMP 服务器 import cv2 import mediapipe as mp import subprocess as sp# 初始化 Mediapipe mp_drawing mp.solutions.drawing_utils mp_drawing_styles mp.solutions.drawing_styles mp_holis…

从零开始k8s-部署篇(未完待续)

从零开始k8s 1.部署k8s-部署篇 1.部署k8s-部署篇 本次部署完全学习于华子的博客点击此处进入华子主页 K8S中文官网&#xff1a;https://kubernetes.io/zh-cn 笔者从零开始部署的k8s&#xff0c;部署前置条件为 1.需要harbor仓库&#xff0c;存放镜像&#xff0c;拉取镜像&am…

Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集AI-FGTM介绍算法流程初始化迭代更新&#xff08; t 0 t 0 t0 到 T − 1 T - 1 T−1&#xff09;迭代完成 AI-FGTM代码实现AI-FGTM算法实现攻击效果 代码汇总aifgtm.pytrain.pyadvtest.py 之前已经…