Skip to content

Latest commit

 

History

History
121 lines (91 loc) · 6.52 KB

File metadata and controls

121 lines (91 loc) · 6.52 KB

HTTPRoute

  • HTTPRoute是Kubernetes中的一种自定义资源,在Kubernetes中使用HTTPRoute来定义http路由信息,Ingress Controller会监听该资源的创建、更新、删除等事件并同步更新Nginx配置。在集群中创建HTTPRoute时,Ingress Controller会首先对该资源的Spec进行检查,检查通过后则HTTPRoute创建成功,Ingress Controller接收到HTTPRoute的创建成功事件并更新Nginx配置。

  • Nginx对七层协议的功能支持非常强大,也因此HTTPRoute的设计相对TCPRoute/UDPRoute复杂的多,HTTPRoute的字段结构设计在充分考虑了Nginx功能特性情况下扩展了多种灰度发布方案的支持。

  • 文件位置: httproute

  • 规定:文件中字段注释存在 +unsupported,表示Ingress Controller尚未支持该项配置


Nginx对于http协议的支持非常丰富,HTTPRoute在充分考虑了Nginx配置的基础上,扩展了多种灰度方案支持。也因此HTTPRoute的设计结构相对复杂的多,HTTPRote支持配置多域名、每个域名下多路径、每个路径可以配置不同的灰度发布服务。路径、服务等又可配置多种可选参数,因此关于HTTPRoute这块的解析,会拆分成多个模块分别讲述


Spec
字段 类型 必填 描述 示例
IngressClassName *string IngressClass的名称,如果为空则使用默认IngressClass(1.19以下版本必填),用于指定哪个Controller处理此资源 nginx
Routes [Route] 多组http路由配置
Route
  • Spec.Routes[0]
字段 类型 必填 描述 示例
Host string 域名FQDN demo.nginx.com
Protocol string Nginx转发给后端使用的协议,可选值HTTP、HTTPS、GRPC,默认值HTTP;尚未支持GRPC HTTP
TLS *TLS Host的tls证书,用于Nginx验证请求来源是否合法
Proxy *Proxy 详细信息见Proxy文档
Cors *Cors 详细信息见Cors文档
Rules [HTTPRouteRule] 多组http路由
Options Options 详细信息见Options文档
TLS
  • Spec.Routes[0].TLS
字段 类型 必填 描述 示例
Secret string 存储tls证书的secret名称,需要和此CRD在同一个namespace下 secret-name
HTTPRouteRule
  • Spec.Routes[0].Rules[0]
字段 类型 必填 描述 示例
Path string 详情见Path /user
PathType string 路径匹配方式exact、prefix、regex,默认prefix exact
Rewrite string 路径重写,支持普通以及正则等 /abc
Proxy *Proxy 详细信息见Proxy文档
Cors *Cors 详细信息见Cors文档
RateLimit Ratelimit 详细信息见Ratelimit文档
Options Options 详细信息见Options文档
Backends [Backend] 详细信息见Backend文档
DefaultBackend *DefaultBackend 详细信息见DefaultBackend文档

Status

字段 类型 必填 描述 示例
Hostname string 该CRD资源的基本状态信息,由控制器填充

示例

apiVersion: proxy.bocloud.io/v1beta1
kind: HTTPRoute
metadata:
  name: httproute-sample
spec:
  ingressClassName: nginx
  routes:
    - host: ingress.demo.com
      tls:
        secret: tls-secret
      protocol: http
      rules:
        - path: /user
          rateLimit:
            connections: 3
            rpm: 3
            rps: 5
          pathType: exact
          cors:
            corsMaxAge: 10000
          backends:
            - name: service
              port: 80
        - path: /app
          rateLimit:
            connections: 3
            rpm: 3
            rps: 5
          pathType: exact
          backends:
            - name: service2
              port: 8080

---
apiVersion: v1
kind: Secret
metadata:
  name: tls-secret
  namespace: default
data:
  tls.crt: string
  tls.key: string
type: kubernetes.io/tls