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