URL重定向(Redirect)也称为URL转发,是一种当实际资源,如单个页面、表单或者整个Web应用,被迁移到新的URL时,保持(原有)链接可用的技术。一般情况下,服务会返回一个重定向响应,响应码一般为301或者302,重定向的URL放在响应头的Location字段中。
Istio提供的URL重定向功能,会返回一个响应码为301的重定向响应。
服务service-go配置URL重定向示例如下:
1 apiVersion: networking.istio.io/v1alpha3 2 kind: VirtualService 3 metadata: 4 name: service-go-redirect 5 spec: 6 hosts: 7 - service-go 8 http: 9 - match: 10 - uri: 11 exact: /v1/env 12 redirect: 13 uri: /env 14 authority: service-go 15 - route: 16 - destination: 17 host: service-go 18 subset: v1 19 --- 20 apiVersion: networking.istio.io/v1alpha3 21 kind: DestinationRule 22 metadata: 23 name: service-go 24 spec: 25 host: service-go 26 subsets: 27 - name: v1 28 labels: 29 version: v1 30 - name: v2 31 labels: 32 version: v2
第1~18行VirtualService的定义表明,当访问服务service-go的/v1/env链接时,会重定向到服务service-go的/env链接。
【实验】
1)创建测试Pod:
$ kubectl apply -f kubernetes/dns-test.yaml
2)创建service-go服务的redirect规则:
$ kubectl apply -f istio/miscellaneous/virtual-service-go-redirect.yaml
3)服务访问测试:
$ kubectl exec dns-test -c dns-test -- curl -sI http://service-go/v1/env HTTP/1.1 301 Moved Permanently location: http://service-go/env date: Sat, 19 Jan 2019 06:01:33 GMT server: envoy transfer-encoding: chunked
从上面的请求测试可以看出,当访问service-go服务的/v1/env链接时,链接被重定向为/env,重定向后的/env请求被转发到了service-go服务的v1版本。
4)清理:
$ kubectl delete -f kubernetes/dns-test.yaml $ kubectl delete -f istio/miscellaneous/virtual-service-go-redirect.yaml