天天看点

Istio - TrafficeManagement - Match

在Route中最重要的字段是条件字段Match,为一个MatchRequest类型的数组,表示请求满足条件,支持将HTTP属性如uri、scheme、method、authority、port等作为条件来匹配请求。

一个URL的完整格式是:URI=scheme:[//authority]path[?query][#fragment]

实际上authority的标准定义是:authority=[userinfo@]host[:port]

## authority

1. uri、scheme、method、authority:4个字段都是StringMatch类型,在匹配请求时都支持exact、prefix和regex三种模式的匹配

2. headers:匹配请求中的Header,是一个map类型。map的key是字符串类型,value是StringMatch类型。即对于每一个Header的值,都可以使用精确、前缀和正则三种方式进行匹配。

3. port:表示请求服务的端口。大部分服务只开放一个端口,这也是在微服务中推荐的做法,在这种场景下可以不指定port。

4. sourceLabels:是一个map类型的键值对,表示请求来源负载匹配标签。这在很多情况有用,可以对一组服务都打一个相同的标签,然后使用sourceLabels字段对这些服务实施相同的流量规则。在Kubernetes平台上,这里的Label就是Pod上的标签。

5. gateway:表示规则应用的Gateway名称,语义同VirtualService 上面的gateway定义,是一个更细的Match条件,会覆盖在VirtualService上配置的gateway。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata: 
  name: web-vs
  namespace: demo
spec:
  hosts:
  - "*"
  gateways:
  - web-gateway
  http:
  - match:
    - headers:
         location:
  exact: hongkong
      uri:
        prefix: /test
    - uri:
        prefix: /api/health
    route: 
    - destination:
        host: httpd-service      

# 匹配到header的location是hongkong并且请求 /test,或者uri 为 /api/health 开头的请求

继续阅读