kiali作为Istio的可观测工具,可以认为是Istio的UI,可以展现服务的网络拓扑、服务的容错情况(超时、重试、短路等)、分布式跟踪(通过Jaeger Tracing)等。 本文将结合Istio自带的Bookinfo应用体验一下Kiali。

1.bookinfo示例应用

具体Bookinfo应用的部署请查看Bookinfo Application,在将Bookinfo应用部署到Kubernetes集群后,创建Istio Gateway和VirtualService将Bookinfo应用暴露到集群外部。

查看一下samples/bookinfo/networking/bookinfo-gateway.yaml,修改如下:

 1apiVersion: networking.istio.io/v1alpha3
 2kind: Gateway
 3metadata:
 4  name: bookinfo-gateway
 5spec:
 6  selector:
 7    istio: ingressgateway # use istio default controller
 8  servers:
 9  - port:
10      number: 80
11      name: http
12      protocol: HTTP
13    hosts:
14    - bookinfo.frognew.com
15---
16apiVersion: networking.istio.io/v1alpha3
17kind: VirtualService
18metadata:
19  name: bookinfo
20spec:
21  hosts:
22  - bookinfo.frognew.com
23  gateways:
24  - bookinfo-gateway
25  http:
26  - match:
27    - uri:
28        exact: /productpage
29    - uri:
30        exact: /login
31    - uri:
32        exact: /logout
33    - uri:
34        prefix: /api/v1/products
35    route:
36    - destination:
37        host: productpage
38        port:
39          number: 9080

创建bookinfo的gateway和virtualservice:

1kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

使用http://bookinfo.frognew.com/productpage即可访问bookinfo应用。

2.展示服务拓扑

Kiali中的Graph可以展现服务拓扑图,显示界面十分漂亮。随机快速刷新多次http://bookinfo.frognew.com/productpage页面,在Kiali中查看服务拓扑图如下:

kiali-graph-1.jpg

Productpage服务轮询访问Review服务的v1、v2、v3三个版本,该页面上的Book Reviews内容区的随机会出现“红色的五颗小星星”、“黑色的五颗小星星”、“没有小星星”,分别对应v3、v2、v1。 这是因为我们配置请求路由,istio会以round robin的形式将请求路由到服务的所有可用版本上。

接下来,我们为Review服务配置请求路由,这个我们前面已经试验过,详见Istio 1.0学习笔记(三):使用Istio对服务进行流量管理 - 配置请求路由。这里再次实践,体验kiali对服务请求路由和流量的可视化展现。

创建istio-1.0.5/samples/bookinfo/networking/destination-rule-reviews.yaml中定义的reviews服务的DestinationRule:

 1apiVersion: networking.istio.io/v1alpha3
 2kind: DestinationRule
 3metadata:
 4  name: reviews
 5spec:
 6  host: reviews
 7  trafficPolicy:
 8    loadBalancer:
 9      simple: RANDOM
10  subsets:
11  - name: v1
12    labels:
13      version: v1
14  - name: v2
15    labels:
16      version: v2
17  - name: v3
18    labels:
19      version: v3

创建istio-1.0.5/samples/bookinfo/networking/virtual-service-reviews-80-20.yaml中定义的VirtualService:

 1apiVersion: networking.istio.io/v1alpha3
 2kind: VirtualService
 3metadata:
 4  name: reviews
 5spec:
 6  hosts:
 7    - reviews
 8  http:
 9  - route:
10    - destination:
11        host: reviews
12        subset: v1
13      weight: 80
14    - destination:
15        host: reviews
16        subset: v2
17      weight: 20

这个VirtualService的定义将Productpage请求Review服务的流量以8:2的比率路由到v1和v2版本。

1kubectl create -f virtual-service-reviews-80-20.yaml
2virtualservice.networking.istio.io/reviews created

多次刷新http://bookinfo.frognew.com/productpage页面,Productpage服务大约按8:2的比例访问Review服务的v1、v2两个版本,页面上“没有小星星”和“黑色的五颗小星星”大致按8:2的比例出现。在kiali中查看如下:

kiali-graph-2.jpg

参考