13.2 URL重定向

上一章

13.4 TCP路由

下一章

更多图书

13.3 URL重写

URL重写(Rewrite)是一种在请求真正发送到后端服务之前改写请求URI的技术。

服务service-go配置URL重写示例如下:


1 apiVersion: networking.istio.io/v1alpha3
 2 kind: DestinationRule
 3 metadata:
 4   name: service-go
 5 spec:
 6   host: service-go
 7   subsets:
 8   - name: v1
 9     labels:
10       version: v1
11   - name: v2
12     labels:
13       version: v2
14 ---
15 apiVersion: networking.istio.io/v1alpha3
16 kind: VirtualService
17 metadata:
18   name: service-go-rewrite
19 spec:
20   hosts:
21   - service-go
22   http:
23   - match:
24     - uri:
25         exact: /v1/env
26     rewrite:
27       uri: /env
28     route:
29     - destination:
30         host: service-go
31         subset: v1
32   - route:
33     - destination:
34         host: service-go
35         subset: v2

第15~35行定义的VirtualService表示,当请求服务service-go的/v1/env链接时,在转发到后端服务之前重写为访问后端服务的/env链接。

【实验】

1)创建测试Pod:


$ kubectl apply -f kubernetes/dns-test.yaml

2)创建service-go服务的rewrite规则:


$ kubectl apply -f istio/miscellaneous/virtual-service-go-rewrite.yaml

3)服务访问测试:


$ kubectl exec dns-test -c dns-test -- curl -s http://service-go/v1/env
{"message":"go v1"}
$ kubectl exec dns-test -c dns-test -- curl -s http://service-go/env
{"message":"go v2"}

从上面的请求测试可以看出,当访问service-go服务的/v1/env链接时,链接被重写为/env,并把请求转发到了service-go服务的v1版本,当访问service-go服务的其他链接时,把请求转发到了service-go服务的v2版本。

4)清理:


$ kubectl delete -f kubernetes/dns-test.yaml
$ kubectl delete -f istio/miscellaneous/virtual-service-go-rewrite.yaml