本文介绍了使用阿里云容器服务部署运行 bookinfo 示例的过程。
前提条件
- 您已成功创建一个 Kubernetes 集群,参见创建Kubernetes 集群,且集群版本为 v1.12 及以上。
- 您已经创建一个命名空间,参见创建命名空间。
- 您已经成功部署 Istio,参见部署Istio。
- 您已经启用 Sidecar 自动注入功能,参见设置 Sidecar 自动注入。
Bookinfo 应用介绍
Bookinfo 是一个样例应用,用来演示多种 Istio 特性,它由四个单独的微服务构成:
productpage
:productpage
微服务会调用 details
和 reviews
两个微服务,用来生成页面。
details
:这个微服务包含了书籍的信息。
reviews
:这个微服务包含了书籍相关的评论。它还会调用 ratings
微服务。
ratings
:ratings
微服务中包含了由书籍评价组成的评级信息。
reviews
微服务有 3 个版本:
- v1 版本不会调用
ratings
服务。
- v2 版本会调用
ratings
服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
- v3 版本会调用
ratings
服务,并使用 1 到 5 个红色星形图标来显示评分信息。
下图展示了这个应用的端到端架构。

部署 Bookinfo 应用
本例中,您已经完成部署 Istio,并且 istio-test 命名空间中,开启 Sidecar 自动注入。
完成后,您可以看到 istio-test 命名空间下新增标签
istio-injection:enabled
。

您可以使用控制台分别部署 productpage,detail,rating 及 reviews 服务的两个版本(v1、v2)。
本例中以部署 productpage 服务为例进行介绍。
- 登录容器服务管理控制台。
- 在 Kubernetes 菜单下,单击左侧导航栏中的,然后单击页面右上角的创建。
- 设置应用名称、应用版本 、 集群、命名空间和副本数量,副本数量即应用包含的 Pod 数量。然后单击下一步 进入容器配置页面。
本例中使用 istio-test 命名空间。
- 设置容器配置。
设置镜像名称、镜像版本、所需资源,容器端口等配置信息。
说明
本示例中,界面参数取值参考如下:
- 镜像名称:您可以单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定。您还可以填写私有 registry。本例中为 docker.io/istio/example-bookinfo-productpage-v1 。
- 镜像版本:您可以单击选择镜像版本选择镜像的版本。若不指定,默认为 latest。本例中为 1.15.0。
- 所需资源:即为该应用预留资源额度,包括 CPU 和内存两种资源,即容器独占该资源,防止因资源不足而被其他服务或进程争占资源,导致应用不可用。本例中 CPU 为 0.25 Core,内存为
256 MiB。
- 端口映射:您需要添加主机端口和容器端口,支持 TCP/UDP 协议。本例中,容器端口为 9080,协议为TCP。
界面其他参数详细信息请参见镜像创建无状态Deployment应用。
- 完成容器配置后,单击下一步。
- 进行服务配置。
- 在服务栏单击创建,在弹出的对话框中进行配置。
- 名称:您可自主设置,默认为
applicationname-svc
。
- 类型:您可以从下面 3 种服务类型中进行选择。
- 虚拟集群 IP:即 ClusterIP,指通过集群的内部 IP 暴露服务,选择该项,服务只能够在集群内部可以访问。
- 节点端口:即 NodePort,通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个
ClusterIP 服务会自动创建。通过请求 <NodeIP>:<NodePort>
,可以从集群的外部访问一个 NodePort 服务。
- 负载均衡:即 LoadBalancer,是阿里云提供的负载均衡服务,可选择公网访问或内网访问。负载均衡可以路由到 NodePort 服务和 ClusterIP 服务。
- 端口映射:您需要添加服务端口和容器端口,支持 TCP/UDP 协议。
- 注解:为该服务添加一个注解(annotation),支持负载均衡配置参数,参见通过负载均衡(Server Load Balancer)访问服务。
- 标签:您可为该服务添加一个标签,标识该服务。
- 单击创建。
您可以参考上述步骤分别创建 details,ratings,reviews(v1)这三个服务。
创建完成后,等待所有的 service 和 pod 都已经正常启动。
创建服务网关
- 在 Kubernetes 菜单下, 单击左侧导航栏中的,进入服务网关页面。
- 选择所需的集群及命名空间后,单击右上角新建。
- 填写如下信息,单击创建,部署服务网关。
- 将上述服务绑定到 Bookinfo-gateway 网关,请参见绑定虚拟服务。
- 在 Kubernetes 菜单下, 单击左侧导航栏中的,可以看到虚拟服务(Virtual Service)列表。
说明 未绑定网关的虚拟服务在服务网关列会显示绑定按钮。
- 在目标虚拟服务的服务网关列单击绑定,弹出添加页面。
- 在服务网关中选择对应的网关名称,单击确定,即完成虚拟服务的绑定。
- 在服务网关列表中,在目标服务网关对应的服务列中单击 istio-ingressgateway,并输入 路由/productpage。
部署 reviews-v2 版本
- 在 Kubernetes 菜单下, 单击左侧导航栏中的,可以看到虚拟服务(Virtual Service)列表。
- 在目标服务的操作列单击管理,进入服务详情页面。
- 单击增加灰度版本。
- 进入创建应用界面。您可以根据需要配置界面参数。
- 在应用基本信息页面,填写应用版本和副本数量后,单击下一步。
- 在容器配置页面,设置镜像名称、镜像版本、所需资源,容器端口等配置信息后,单击下一步。
说明
本示例中,界面参数取值参考如下:
- 镜像名称:您可以单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定。您还可以填写私有 registry。本例中为 docker.io/istio/example-bookinfo-productpage-v2 。
- 镜像版本:您可以单击选择镜像版本选择镜像的版本。若不指定,默认为 latest。本例中为1.15.0。
- 所需资源:即为该应用预留资源额度,包括 CPU 和内存两种资源,即容器独占该资源,防止因资源不足而被其他服务或进程争占资源,导致应用不可用。本例中 CPU 为 0.25 Core,内存为
256 MiB。
- 端口映射:您需要添加主机端口和容器端口,支持 TCP/UDP 协议。本例中,容器端口为 9080,协议为 TCP。
界面其他参数详细信息请参见镜像创建无状态Deployment应用。
- 在灰度策略页面,策略类型选择基于流量比例发布,流量比例中,V2 流量比例设置为 50%后,单击创建。
- 待 pod 启动完成后,输入 路由/productpage,会看到 v2 版本的界面。
由于 v1、v2 流量比例各 50%,可能要多刷新几次界面。

执行结果
您可以使用压测工具(例如 siege )模拟多次访问,再通过 kiali 观察流量拓扑。
在部署 Istio 时已经默认安装了 kiali,您只需要新建一个 Ingress 就可以方便的进行访问。请参见通过界面创建路由(Ingress)。
说明 本例中,目标集群选择已部署 Istio 的集群,命名空间选择 istio-system。
创建完成后,您可以在路由列表中,看到 kiali 的访问地址。

单击 kiali 的访问地址,打开 Kiali 控制台,可以看到如下调用效果。