Skip to content

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

基于 MIT 协议发布