13.1 CORS

上一章

13.3 URL重写

下一章

更多图书

13.2 URL重定向

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