You need to enable JavaScript to run this app.
导航
API 网关支持的 Annotation
最近更新时间:2024.07.23 17:18:30首次发布时间:2023.08.09 10:41:01

本文为您介绍 API 网关当前支持的 Nginx Ingress Annotation。

重写

注解作用域支持度说明

nginx.ingress.kubernetes.io/rewrite-target

路由(Ingress)

兼容

将 Ingress 定义的原 Path 重写为指定目标,支持 Group Capture。

注意

rewrite-target 仅支持精确匹配和前缀匹配。对于前缀匹配类型,原 path 必须以/结尾,否则可能同步失败。

语法示例:

annotations:
    #  path重写
    nginx.ingress.kubernetes.io/rewrite-target: '/new-path'

跨域

注解作用域支持度说明
nginx.ingress.kubernetes.io/enable-cors路由(Ingress)兼容开启或关闭跨域。开启跨域则完全开放跨域能力,暂不支持精确控制跨域能力。

语法示例:

annotations:
    #  是否开启跨域(true或false),开启跨域则用户可以在浏览器上跨域访问网关
    nginx.ingress.kubernetes.io/enable-cors: 'true'

负载均衡

注解作用域支持度说明

nginx.ingress.kubernetes.io/load-balance

upstream

部分兼容。
不支持 ewma 算法。若配置为 EWMA 算法,会回退到 round_robin 算法。

后端服务的普通负载均衡算法。默认为 round_robin。合法值如下:

  • round_robin:基于轮询的负载均衡。

  • least_conn:基于最小请求数的负载均衡。

  • random:基于随机的负载均衡。

语法示例:

annotations:
    #  网关到upstream的负载均衡策略,示例中网关会以轮询的负载均衡方式访问上游k8s service
    nginx.ingress.kubernetes.io/load-balance: 'round_robin'

超时

注解作用域支持度说明
apig.ingress.kubernetes.io/timeoutIngress不兼容,APIG 扩展请求的超时时间,单位为秒。默认未配置超时时间。说明超时设置作用在应用层,非传输层 TCP。

语法示例:

annotations:
    # APIG扩展的请求超时时间,单位是秒。30s上游service没返回,网关就返回504 timeout
    apig.ingress.kubernetes.io/timeout: '30'

重定向

注解作用域支持度说明
nginx.ingress.kubernetes.io/ssl-redirectIngress兼容HTTP 重定向为 HTTPS

语法示例:

annotations:
    # 是否开启重定向(true或false),开启后如果客户端通过HTTP访问,则网关会重定向成HTTPS
    nginx.ingress.kubernetes.io/ssl-redirect: 'true'

Header 操作

注解作用域支持度说明

apig.ingress.kubernetes.io/request-header-control-add

Ingress

不兼容,APIG
扩展

请求在转发给后端服务时,添加指定 Header。若该 Header 存在,则其值拼接在原有值后面。语法如下:

  • 单个 Header:Key Value

  • 多个 Header:使用 YAML 特殊符号| ,使每对 Key Value 单独处于一行。

apig.ingress.kubernetes.io/request-header-control-update

Ingress

不兼容,APIG 扩展

请求在转发给后端服务时,修改指定 Header。若该 Header 存在,则其值覆盖原有值。语法如下:

  • 单个 Header:Key Value

  • 多个 Header:使用 YAML 特殊符号| ,使每对 Key Value 单独处于一行。

apig.ingress.kubernetes.io/request-header-control-remove

Ingress

不兼容,APIG 扩展

请求在转发给后端服务时,删除指定 Header。语法如下:

  • 单个 Header:Key

  • 多个 Header:使用英文逗号分隔。

apig.ingress.kubernetes.io/response-header-control-add

Ingress

不兼容,APIG 扩展

请求收到后端服务响应后,在转发响应给客户端之前需要添加指定 Header。若该 Header 存在,则其值拼接在原有值后面。语法如下:

  • 单个 Header:Key Value

  • 多个 Header:使用 YAML 特殊符号| ,使每对 Key Value 单独处于一行。

apig.ingress.kubernetes.io/response-header-control-update

Ingress

不兼容,APIG 扩展

请求收到后端服务响应后,在转发响应给客户端之前需要修改指定 Header。若该 Header 存在,则其值覆盖原有值。语法如下:

  • 单个 Header:Key Value

  • 多个 Header:使用 YAML 特殊符号| ,使每对 Key Value 单独处于一行。

apig.ingress.kubernetes.io/response-header-control-remove

Ingress

不兼容,APIG 扩展

请求收到后端服务响应后,在转发响应给客户端之前需要删除指定 Header。语法如下:

  • 单个 Header:Key

  • 多个 Header:使用英文逗号分隔。

语法示例:
用户后端服务在接收到网关转发的http请求时,希望能从 request header 中获取到客户端 IP、客户端 Port 等信息,从而针对客户端信息做一些业务处理。
例如,用户后端服务想通过自定义 request header:X-Real-IP、X-Real-Port 来获取客户端信息。

注意

Envoy 支持向请求和响应头部里添加动态值。用百分号(%)来分割变量名称,支持的动态值请参考headers

annotations:
    # 添加request header,value的值支持envoy动态值
    apig.ingress.kubernetes.io/request-header-control-add: |-
      x-Real-IP %DOWNSTREAM_REMOTE_ADDRESS_WITHOUT_PORT%
      X-Real-Port %DOWNSTREAM_REMOTE_PORT%
    apig.ingress.kubernetes.io/request-header-control-update: |-
      aaa bb&*!b
      ccc ddd
    apig.ingress.kubernetes.io/request-header-control-remove: |-
      age

最终效果如下:

  • 网关访问上游 upstream 时,追加两个 request header:
    • x-Real-IP=客户端 IP
    • X-Real-Port=客户端 Port
  • 网关访问上游 upstream 时,覆写两个 request header:
    • aaa=bb&*!b
    • ccc=ddd
  • 网关访问上游 upstream 时,移除了一个request header:header key是age

灰度发布

注解作用域支持度说明
nginx.ingress.kubernetes.io/canaryIngress兼容开启或关闭灰度发布。
nginx.ingress.kubernetes.io/canary-by-headerIngress兼容基于Request Header Key分流到不同 k8s service上。
nginx.ingress.kubernetes.io/canary-by-header-valueIngress兼容基于Request Header Value分流到不同 k8s service上,Value为精确匹配。
nginx.ingress.kubernetes.io/canary-weightIngress兼容基于权重分流到不同 k8s service 上。
nginx.ingress.kubernetes.io/canary-weight-totalIngress兼容权重总和。

按 Header 匹配灰度发布语法示例:

annotations: 
		nginx.ingress.kubernetes.io/canary: 'true' 
		# headers中包含foo=bar时,才会发送到new-ngnix上,不带此header时,发送到原始路由nginx上
		nginx.ingress.kubernetes.io/canary-by-header: foo 
		nginx.ingress.kubernetes.io/canary-by-header-value: bar

按 weight 灰度发布语法示例:

annotations: 
		nginx.ingress.kubernetes.io/canary: 'true' 
		# 30%的流量发送new-nginx上,剩下的70%发送到原始路由中的nginx上 
		nginx.ingress.kubernetes.io/canary-weight: '30'