7.2 管理集群的入口流量

上一章

7.4 根据服务版本权重拆分流量

下一章

更多图书

7.3 把请求路由到服务的指定版本

当服务有多个版本,而我们只希望把流量全部转发到某个特定版本,这时候可以使用如下的方式配置路由规则:


1 apiVersion: networking.istio.io/v1alpha3
 2 kind: DestinationRule
 3 metadata:
 4   name: service-lua
 5 spec:
 6   host: service-lua
 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-lua
19 spec:
20   hosts:
21   - service-lua
22   http:
23   - route:
24     - destination:
25         host: service-lua
26         subset: v1

第1~13行定义了名为service-lua的DestinationRule,version标签用于区分service-lua服务的实例版本,host字段表示要访问的后端的服务名称,一般为Kubernetes中定义的Service名称。字段host的值完整地址为service-lua.default.svc.cluster.local,当路由规则配置与要请求的服务在同一个命名空间时,可以只简写成Service的名称。

第15~26行定义名为service-lua的VirtualService,表示对service-lua服务的所有请求转发到v1版本,此处的v1为DestinationRule中定义的名为v1的subset,hosts字段表示接收请求的域名,一般为Kubernetes中定义的Service名称。host字段的值与对应DestinationRule中的host字段值保持一致。

【实验】

1)创建Gateway和service-js的路由规则:


$ kubectl apply -f istio/route/gateway-js-v1.yaml

2)创建service-lua的指定版本路由规则:


$ kubectl apply -f istio/route/virtual-service-lua-v1.yaml

3)浏览器访问。

此时打开浏览器访问http://11.11.11.112:31380/ ,并多次点击“发射”,你会看到service-lua服务只会请求到v1版本。

4)清理:


$ kubectl delete -f istio/route/gateway-js-v1.yaml 
$ kubectl delete -f istio/route/virtual-service-lua-v1.yaml