HTTP 查询参数匹配
原文:https://gateway-api.sigs.k8s.io/guides/user-guides/http-query-param-matching/
HTTPRoute 资源 可以基于查询参数对请求进行匹配。本指南展示如何使用该功能。
基于单个查询参数匹配
下面这条 HTTPRoute 会根据 animal 查询参数的值把流量分配到两个后端:
yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: query-param-matching
namespace: gateway-conformance-infra
spec:
parentRefs:
- name: same-namespace
rules:
- matches:
- queryParams:
- name: animal
value: whale
backendRefs:
- name: infra-backend-v1
port: 8080
- matches:
- queryParams:
- name: animal
value: dolphin
backendRefs:
- name: infra-backend-v2
port: 8080效果:
- 对
/且查询参数animal=whale的请求,会被路由到infra-backend-v1。 - 对
/且查询参数animal=dolphin的请求,会被路由到infra-backend-v2。
基于多个查询参数匹配
一条规则也可以匹配多个查询参数。下面的规则在查询参数同时为 animal=dolphin 且 color=blue 时,把流量路由到 infra-backend-v3:
yaml
- matches:
- queryParams:
- name: animal
value: dolphin
- name: color
value: blue
backendRefs:
- name: infra-backend-v3
port: 8080多个 matches 之间的"或"语义
如果一条规则有多个 matches,只要请求满足其中任意一个,就会被路由到对应后端。下面的规则会在以下任一条件成立时把流量路由到 infra-backend-v3:
- 查询参数
animal=dolphin且color=blue; - 或 查询参数
ANIMAL=Whale。
yaml
- matches:
- queryParams:
- name: animal
value: dolphin
- name: color
value: blue
- queryParams:
- name: ANIMAL
value: Whale
backendRefs:
- name: infra-backend-v3
port: 8080与其他匹配类型组合
查询参数匹配可以与路径、Header 等其他匹配类型组合使用。下面的规则演示了这种组合:
yaml
- matches:
- path:
type: PathPrefix
value: /path1
queryParams:
- name: animal
value: whale
backendRefs:
- name: infra-backend-v1
port: 8080
- matches:
- headers:
- name: version
value: one
queryParams:
- name: animal
value: whale
backendRefs:
- name: infra-backend-v2
port: 8080
- matches:
- path:
type: PathPrefix
value: /path2
headers:
- name: version
value: two
queryParams:
- name: animal
value: whale
backendRefs:
- name: infra-backend-v3
port: 8080