一、BookInfo架构图
Istio官方本身提供了一个很好的例子,叫"BookInfo",是由前端Python以及后端Java组成的,系统之间的调用使用的是HTTP,可以发现的是每个pod都被安置了一个名称为 Envoy的网关,该Envoy sidecar用于拦截对服务的入站和出站。
二、搭建BookInfo
2.1 创建虚拟服务
2.1.1 应用基本信息
- 服务网格 > 虚拟服务,然后单击页面右上角的创建
2.1.2 容器配置
- 以productpage为例,配置镜像名称和tag
2.1.3 创建服务
- 采用集群的内部 IP 暴露服务,选择该项,服务只能够在集群内部可以访问,暴露容器内的9080端口,在集群内部就可以通过productpage:9080访问到后端pod
2.1.4 完成虚拟服务创建
下图可以看出,deployment,service,destinationRule,VirtualService已经创建完成了
2.1.5 创建其他虚拟服务
可以参考上述步骤分别创建 details,ratings,reviews(v1)这三个服务。
创建完成后,等待所有的 service 和 pod 都已经正常启动,已经创建好的虚拟服务如下图
2.2 创建服务网关
2.2.1 创建服务网关配置
- 定义服务网关名称
- 服务网关:服务代理网关。默认为istio-ingressgateway
- 端口配置:协议为HTTP,暴露服务端口80,支持多个Host
2.2.2 完成创建
- 创建完成后,您可以在服务网关列表中,看到新创建的服务网关
2.3 服务网关绑定虚拟服务
- 单击左侧导航栏中的服务网格 > 虚拟服务,可以看到虚拟服务(Virtual Service)列表
- 在目标虚拟服务的服务网关列单击绑定,弹出添加页面
- 在服务网关列表中,在目标服务网关对应的服务列中单击 istio-ingressgateway,并输入 路由/productpage
可以看到如下页面
2.4 部署 reviews-v2 版本
- 单击左侧导航栏中的服务网格 > 虚拟服务,可以看到虚拟服务(Virtual Service)列表。
- 单击reviews管理
- 添加灰度版本,目前阿里云只支持两个灰度版本的添加
- 待 pod 启动完成后,输入 路由/productpage,会看到 v2 版本的界面。
- 由于 v1、v2 流量比例各 50%,可能要多刷新几次界面,可以发现版本在v1和v2之间切换,各占50%
三、通过kiali查看BookInfo调用关系
整个BookInfo的系统在Istio中的调用主要是,在地址栏输入47.113.18.247/productpage,通过47.113.18.247找到了istio的入口网关服务,然后通过productpage找到关联了网关服务的虚拟服务productpage,虚拟服务通过DestinationRule将流量转发到后端服务,后端服务再将流量转发到真正提供服务的容器
下图展示了 kiali 中显示的 Bookinfo 示例的服务拓扑图
参考地址:https://help.aliyun.com/document_detail/128548.html?spm=a2c4g.11186623.6.808.4adf2f21eJRzMu