istio"/>
istio
在前面我们成功搭建并部署了 Istio 及其其 Bookinfo 示例应用:
目前搭建 Bookinfo 应用我们只用到了下面两个资源文件:
samples/bookinfo/platform/kube/bookinfo.yaml
samples/bookinfo/networking/bookinfo-gateway.yaml
前者就是通常的 Kubernetes 定义的 Deployment 和 Service 的资源清单文件,只是对定义的 Pod 注入了 sidecar 代理,后者定义了这个应用的外部访问入口gateway,以及应用内部 productpage 服务的 VirtualService
规则,而其他内部服务的访问规则还没有被定义。
现在访问应用界面并刷新,会看到 Reviews 有时不会显示评分,有时候会显示不同样式的评分,这是因为后面有3个不同的 Reviews 服务版本,而没有配置该服务的路由规则 route rule
的情况下,该服务的几个实例会被随机访问到,有的版本服务会进一步调用 Ratings 服务,有的不会。
到这里我们已经接触到了 Istio 中两个非常重要的流量管理的资源对象了:
VirtualService 是用来在 Istio 中定义路由规则,控制流量路由到服务上的各种行为。
Gateway 我为 HTTP/TCP 流量配置负载均衡器的。
-
不同服务版本访问规则
对 Reviews 服务添加一条路由规则,启用 samples/bookinfo/networking/virtual-service-reviews-v3.yaml
定义的 VirtualService 规则,内容如下:
[root@master istio-1.9.1]# cat samples/bookinfo/networking/virtual-service-reviews-v3.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: reviews
spec:hosts:- reviewshttp:- route:- destination:host: reviewssubset: v3
这样,所有访问 reviews 服务的流量就会被引导到 reviews 服务对应的 subset 为 v3 的 Pod 中。启用这条规则:
[root@master istio-1.9.1]# kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-v3.yaml
virtualserviceworking.istio.io/reviews created
[root@master istio-1.9.1]# kubectl get virtualservices
NAME GATEWAYS HOSTS AGE
bookinfo ["bookinfo-gateway"] ["*"] 6d22h
reviews ["reviews"] 13s
我们可以看到 reviews 的 VirtualService
已经创建成功了,此时我们去刷新应用的页面,发现访问 Reviews 失败了:
这是因为我们还没有创建 DestinationRule 对象,DestinationRule 对象是 VirtualService 路由生效后,用来将 VirtualService 中指定的 subset 与对应的 Pod 关联起来
更多推荐
istio
发布评论