匹配精确的字符串
prefix: "value"
只匹配前缀regex:"value"
根据 ECMAscript 风格的正则进行匹配https://dev.example.com/v1/api
。为了匹配该请求的 URI,我们会这样写: http: - match:- uri:prefix: /v1
上述片段将匹配传入的请求,并且请求将被路由到该路由中定义的目的地 。另一个例子是使用正则并在头上进行匹配 。
http: - match:- headers:user-agent:regex: '.*Firefox.*'
上述匹配将匹配任何用户代理头与 Regex 匹配的请求 。5.2 重定向和重写请求在头信息和其他请求属性上进行匹配是有用的,但有时我们可能需要通过请求 URI 中的值来匹配请求 。
例如,让我们考虑这样一种情况:传入的请求使用
/v1/api
路径,而我们想把请求路由到 /v2/api
端点 。这样做的方法是重写所有传入的请求和与
/v1/api
匹配的 authority/host headers 到 /v2/api
。例如:
... http:- match:- uri:prefix: /v1/apirewrite:uri: /v2/apiroute:- destination:host: customers.default.svc.cluster.local ...
即使目标服务不在 /v1/api
端点上监听,Envoy 也会将请求重写到 /v2/api
。我们还可以选择将请求重定向或转发到一个完全不同的服务 。下面是我们如何在头信息上进行匹配,然后将请求重定向到另一个服务:
... http:- match:- headers:my-header:exact: helloredirect:uri: /helloauthority: my-service.default.svc.cluster.local:8000 ...
redirect
和 destination
字段是相互排斥的 。如果我们使用 redirect
,就不需要设置 destination
。5.3 AND 和 OR 语义在进行匹配时,我们可以使用 AND 和 OR 两种语义 。让我们看一下下面的片段:
... http:- match:- uri:prefix: /v1headers:my-header:exact: hello ...
上面的片段使用的是 AND 语义 。这意味着 URI 前缀需要与 /v1
相匹配,并且头信息 my-header
有一个确切的值 hello
。要使用 OR 语义,我们可以添加另一个
match
项,像这样: ... http:- match:- uri:prefix: /v1...- match:- headers:my-header:exact: hello ...
在上面的例子中,将首先对 URI 前缀进行匹配,如果匹配,请求将被路由到目的地 。如果第一个不匹配,算法会转移到第二个,并尝试匹配头 。如果我们省略路由上的匹配字段,它将总是评估为 true
。六.实战:简单流量路由6.1 简单流量路由我们将学习如何使用权重在不同的服务版本之间路由流量 。然后,我们将部署 Customers 服务版本 v2,并使用子集在这两个版本之间分配流量 。
让我们从部署 Gateway 开始:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata:name: gateway spec:selector:istio: ingressgatewayservers:- port:number: 80name: httpprotocol: HTTPhosts:- '*'
将上述 YAML 保存为 gateway.yaml
,并使用 kubectl apply -f gateway.yaml
部署 Gateway 。接下来,我们将创建 Web Frontend 和 Customers 服务的部署以及相应的 Kubernetes 服务 。让我们首先从
web-frontend
开始: apiVersion: apps/v1 kind: Deployment metadata:name: web-frontendlabels:app: web-frontend spec:replicas: 1selector:matchLabels:app: web-frontendtemplate:metadata:labels:app: web-frontendversion: v1spec:containers:- image: gcr.io/tetratelabs/web-frontend:1.0.0imagePullPolicy: Alwaysname: webports:- containerPort: 8080env:- name: CUSTOMER_SERVICE_URLvalue: 'http://customers.default.svc.cluster.local' --- kind: Service apiVersion: v1 metadata:name: web-frontendlabels:app: web-frontend spec:selector:app: web-frontendports:- port: 80name: httptargetPort: 8080
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 破壁机玉米汁怎么榨才好喝
- 五行穿衣指南2023年9月24日 2023年穿衣五行颜色
- 玻璃自爆没掉下来怎么处理
- 2023年11月24日五行穿衣配色 今日幸运颜色讲究
- 2023年11月25日五行穿衣分享 穿什么颜色衣服好
- 2023年11月26日五行穿衣颜色搭配 今日招桃花幸运颜色
- 2023年11月27日五行穿衣颜色搭配 今日幸运颜色讲究
- 2023年11月28日五行穿衣配色 分享好运色穿衣搭配
- 2023年11月19日五行穿衣颜色搭配 今日幸运颜色查询
- 2023年11月20日五行穿衣查询 今日招桃花幸运颜色