Tengine-Ingress

Tengine-Ingress完全兼容云原生ingress标准规范,用户可参照kubernetes ingress-nginx相关文档。

在此列出Tengine-Ingress原生扩展和增强功能的Annotations。

下述所有Annotations的变更生效都无需tengine reload,注解配置无损实时动态生效,长连接保持不变,成功率不受影响,配置变更效率提升翻倍,网关稳定性进一步得到增强。
对于文档kubernetes ingress-nginx中的注解,如果不在下述Annotations列表范围,则暂不支持动态生效。

Annotations

HTTP

注解名称: nginx.ingress.kubernetes.io/ssl-redirect
值类型: truefalse
默认值: true
注解类型: ingress注解
生效维度: 域名

强制HTTPS:Ingress注解nginx.ingress.kubernetes.io/ssl-redirect,生效维度是域名域名/Path继承域名/相同的ssl-redirect
默认强制HTTPSnginx.ingress.kubernetes.io/ssl-redirect: "true",即HTTP请求会被301重定向到HTTPS,客户端接收到301 HTTPS,需要通过TLS建链发送HTTPS请求到网关Tengine-Ingress


注解名称: nginx.ingress.kubernetes.io/proxy-read-timeout
值类型: number
默认值: 60
单位:
注解类型: ingress注解
生效维度: 域名域名/path

后端响应超时时间:Ingress注解nginx.ingress.kubernetes.io/proxy-read-timeout,生效维度是域名域名/path,相同域名不同path可以设置不同的proxy-read-timeout
请求从网关Tengine-Ingress向后端upstream发送后,等待后端upstream返回响应的最大时长,网关默认等待60秒,超过60秒未接收到upstream的响应报文,则网关Tengine-Ingress返回客户端HTTP 504错误响应消息。

高级路由

注解名称: nginx.ingress.kubernetes.io/canary
值类型: truefalse
默认值: false
注解类型: canary ingress注解
生效维度: 域名域名/path

高级路由标识

  • 如果Ingress资源对象有注解nginx.ingress.kubernetes.io/canary: "true",则实际为Canary Ingress资源对象,专用于HTTP高级路由。
  • 一个Canary Ingress资源对象定义一个高级路由,必须包含有注解nginx.ingress.kubernetes.io/canary: "true"

注解名称: nginx.ingress.kubernetes.io/canary-by-header
值类型: string
默认值:
注解类型: canary ingress注解
生效维度: 域名域名/path

基于请求header的高级路由

  • 基于请求Header的流量切分,当用于高级路由header的值等于always,则请求将被转发到指定的后端upstream。
  • 当请求消息中不存在用于高级路由的header,或者header值不等于always,则路由规则不生效。
  • 路由规则匹配,但用于高级路由的后端upstream不存在,则请求会被降级路由到主域名对应的后端upstream。
  • 所谓主域名即Ingress资源对象中的host,全部相同host的Canary Ingress资源对象都是隶属于主域名的高级路由。

注解名称: nginx.ingress.kubernetes.io/canary-by-header-value
值类型: string
默认值:
注解类型: canary ingress注解
生效维度: 域名域名/path

基于请求header值的高级路由

  • 在上述基于请求header的高级路由基础上,可以指定具体匹配的header值,在header和header值完全匹配的情况下,请求将被转发到指定的后端upstream。
  • 当请求消息中不存在用于高级路由的header和header值,则路由规则不生效。
  • 路由规则匹配,但用于高级路由的后端upstream不存在,则请求会被降级路由到主域名对应的后端upstream。

注解名称: nginx.ingress.kubernetes.io/canary-weight
值类型: string
默认值:
注解类型: canary ingress注解
生效维度: 域名域名/path

基于服务权重的高级路由

  • 基于服务权重的流量切分,其优先级低于上述基于请求header和header值的高级路由,优先级从高到低依次为 Header&Header值 --> Cookie --> 服务权重。
  • 刨除上述基于请求header和header值的高级路由请求,其他所有请求消息将按照服务权重比例转发到指定的后端upstream。
  • 例如:后端upstream=gray,服务权重=5,则5%请求被转发到后端upstream=gray,其它95%请求会被转发到主域名对应的后端upstream。
  • 当高级路由的服务权重被设置为100,则所有请求消息都将默认转发到高级路由配置的后端upstream,请求消息将不再转发到主域名对应的后端upstream。

网页爬虫

注解名称: nginx.ingress.kubernetes.io/disable-robots
值类型: truefalse
默认值: false
注解类型: ingress注解
生效维度: 域名

禁止搜索引擎收录:默认允许网页爬虫,设置nginx.ingress.kubernetes.io/disable-robots: "true",则禁止对应用域名执行网络爬虫。

CORS (跨域资源共享)

注解名称: nginx.ingress.kubernetes.io/enable-cors
值类型: truefalse
默认值: false
注解类型: ingress注解
生效维度: 域名域名/path

开启跨域资源共享:默认禁止跨域资源共享,如果设置nginx.ingress.kubernetes.io/enable-cors: "true",则应用域名开启跨域资源共享。


注解名称: nginx.ingress.kubernetes.io/cors-allow-origin
值类型: string
默认值: *
值格式:<origin>[, <origin>] | *
注解类型: ingress注解
生效维度: 域名域名/path

服务端允许跨域请求的源列表:默认允许所有源都可以跨域资源请求。


注解名称: nginx.ingress.kubernetes.io/cors-max-age
值类型: number
默认值: 1728000
单位:
注解类型: ingress注解
生效维度: 域名域名/path

预检请求的响应内容可缓存的最大时间:有效期内客户端跨域资源请求都不再需要预检请求。


注解名称: nginx.ingress.kubernetes.io/cors-allow-credentials
值类型: truefalse
默认值: true
注解类型: ingress注解
生效维度: 域名域名/path

用于控制是否允许在跨域请求中携带认证信息:认证信息含cookies,header Authorization,客户端证书。


注解名称: nginx.ingress.kubernetes.io/cors-allow-methods
值类型: string
默认值: GET, PUT, POST, DELETE, PATCH, OPTIONS
值格式:<method>[, <method>]*
值校验:以','分割,只允许字母
注解类型: ingress注解
生效维度: 域名域名/path

服务端允许跨域资源请求的HTTP Method列表。


注解名称: nginx.ingress.kubernetes.io/cors-allow-headers
值类型: string
默认值: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
值格式:<header-name>[, <header-name>]*
值校验:以','分割,只允许字母,数字,_ 和 -
注解类型: ingress注解
生效维度: 域名域名/path

服务端允许跨域资源请求的HTTP Header列表。

来源标识

注解名称: nginx.ingress.kubernetes.io/ingress-referrer
值类型: string
默认值:
值格式:<referrer>[, <referrer>]
值校验:以','分割
注解类型: ingress注解
生效维度: 域名域名/path

注解nginx.ingress.kubernetes.io/ingress-referrer用于标识Ingress资源对象的来源。
网关Tengine-Ingress基于configmap的配置ingress-referrer,校验Ingress资源对象的来源是否在授权允许创建Ingress资源对象的应用列表中。
以下场景的ingress资源对象将被丢弃处理:

  • 注解ingress-referrer值非空,且不在configmap配置ingress-referrer授权应用列表中。

注解名称: nginx.ingress.kubernetes.io/canary-referrer
值类型: string
默认值:
值格式:<referrer>[, <referrer>]
值校验:以','分割
注解类型: canary ingress注解
生效维度: 域名域名/path

注解nginx.ingress.kubernetes.io/canary-referrer用于标识Canary Ingress资源对象的来源。
网关Tengine-Ingress基于configmap的配置canary-referrer,校验Canary Ingress资源对象的来源是否在授权允许创建Canary Ingress资源对象的应用列表中。
以下场景的ingress资源对象将被丢弃处理:

  • 注解canary-referrer值非空,且不在configmap配置canary-referrer授权应用列表中。

Ingress分批次滚动生效

注解名称: nginx.ingress.kubernetes.io/ingress-rollout
值类型: truefalse
默认值: false
注解类型: ingress注解
生效维度: 域名域名/path

Ingress资源对象分批次滚动生效开关

  • 注意:为了使用Ingress域名资源对象的分批次滚动生效功能,Tengine-Ingress需要以StatefulSet形式部署发布。
  • 如果注解nginx.ingress.kubernetes.io/ingress-rollout: "true",ingress资源对象将在网关Tengine-Ingress集群内部分批次滚动生效,无需tengine reload,实时动态无损生效。

注解名称: nginx.ingress.kubernetes.io/ingress-rollout-current-revision
值类型: string
默认值:
注解类型: ingress注解
生效维度: 域名域名/path

Ingress资源对象的当前运行版本号


注解名称: nginx.ingress.kubernetes.io/ingress-rollout-update-revision
值类型: string
默认值:
注解类型: ingress注解
生效维度: 域名域名/path

Ingress资源对象的升级版本号


注解名称: nginx.ingress.kubernetes.io/ingress-rollout-index-id
值类型: number
默认值: -1
注解类型: ingress注解
生效维度: 域名域名/path

Ingress资源对象的生效范围

  • 网关Tengine-Ingress集群需要以statefulset形式部署发布,0..N-1为Tengine-Ingress的Pod序号,从0开始到N-1结束。
  • 例如:网关Tengine-Ingress集群有10个实例,则Tengine-Ingress的Pod序号的为0..9。
  • 只有Pod序号小于ingress-rollout-index-id的Tengine-Ingress实例才会动态更新ingress资源对象。

Secret分批次滚动生效

注解名称: nginx.ingress.kubernetes.io/secret-rollout
值类型: truefalse
默认值: false
注解类型: secret注解
生效维度: 域名域名/path

Secret资源对象分批次滚动生效开关

  • 注意:为了使用Ingress域名资源对象的分批次滚动生效功能,Tengine-Ingress需要以StatefulSet形式部署发布。
  • 如果注解nginx.ingress.kubernetes.io/secret-rollout: "true",secret资源对象将在网关Tengine-Ingress集群内部分批次滚动生效,无需tengine reload,实时动态无损生效。

注解名称: nginx.ingress.kubernetes.io/secret-rollout-current-revision
值类型: string
默认值:
注解类型: secret注解
生效维度: 域名域名/path

Secret资源对象的当前运行版本号


注解名称: nginx.ingress.kubernetes.io/secret-rollout-update-revision
值类型: string
默认值:
注解类型: secret注解
生效维度: 域名域名/path

Secret资源对象的升级版本号


注解名称: nginx.ingress.kubernetes.io/secret-rollout-index-id
值类型: number
默认值: -1
注解类型: secret注解
生效维度: 域名域名/path

Secret资源对象的生效范围

  • 网关Tengine-Ingress集群需要以statefulset形式部署发布,0..N-1为Tengine-Ingress的Pod序号,从0开始到N-1结束。
  • 只有Pod序号小于secret-rollout-index-id的Tengine-Ingress实例才会动态更新secret资源对象。

全局一致性校验

注解名称: nginx.ingress.kubernetes.io/version
值类型: number
默认值: 0
注解类型: ingress注解
生效维度: 域名域名/path

Ingress资源对象的ID号:唯一标识一个ingress资源对象。


注解名称: nginx.ingress.kubernetes.io/version
值类型: number
默认值: 0
注解类型: secret注解
生效维度: 证书

Secret资源对象的ID号:唯一标识一个secret资源对象。