本文介绍了使用阿里云容器服务部署运行bookinfo示例的过程。

前提条件

Bookinfo应用介绍

Bookinfo是一个样例应用,用来演示多种 Istio 特性,它由四个单独的微服务构成:

  • productpageproductpage 微服务会调用 detailsreviews 两个微服务,用来生成页面。
  • details :这个微服务包含了书籍的信息。
  • reviews :这个微服务包含了书籍相关的评论。它还会调用ratings 微服务。
  • ratingsratings 微服务中包含了由书籍评价组成的评级信息。

reviews 微服务有 3 个版本:

  • v1 版本不会调用 ratings 服务。
  • v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
  • v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。
下图展示了这个应用的端到端架构。
架构图

部署Bookinfo应用

本例中,您已经完成部署Istio,并且istio-test命名空间中,开启Sidecar自动注入。

完成后,您可以看到istio-test命名空间下新增标签istio-injection:enabled
部署Istio

您可以使用控制台分别部署productpage,detail,rating及reviews服务的两个版本(v1、v2)。

本例中以部署productpage服务为例进行介绍。

  1. 登录容器服务管理控制台
  2. 在Kubernetes菜单下,单击左侧导航栏中的服务网格 > 虚拟服务,然后单击页面右上角的创建
  3. 设置应用名称应用版本 集群命名空间副本数量,副本数量即应用包含的Pod数量。然后单击下一步 进入容器配置页面。
    本例中使用 istio-test 命名空间。

    配置应用基本信息
  4. 设置容器配置。
    设置镜像名称、镜像版本、所需资源,容器端口等配置信息。
    容器设置
    说明
    本示例中,界面参数取值参考如下:
    • 镜像名称:您可以单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定。您还可以填写私有 registry。本例中为docker.io/istio/example-bookinfo-productpage-v1
    • 镜像版本:您可以单击选择镜像版本选择镜像的版本。若不指定,默认为 latest。本例中为1.15.0
    • 所需资源:即为该应用预留资源额度,包括 CPU 和 内存两种资源,即容器独占该资源,防止因资源不足而被其他服务或进程争占资源,导致应用不可用。本例中CPU为0.25Core,内存为256MiB。
    • 端口映射:您需要添加主机端口和容器端口,支持 TCP/UDP 协议。本例中,容器端口为9080,协议为TCP。
    界面其他参数详细信息请参见镜像创建无状态Deployment应用
  5. 完成容器配置后,单击下一步
  6. 进行服务配置。
    1. 在服务栏单击创建,在弹出的对话框中进行配置。

      服务配置
      • 名称:您可自主设置,默认为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)访问服务
      • 标签:您可为该服务添加一个标签,标识该服务。
    2. 单击创建

      创建完成

您可以参考上述步骤分别创建details,ratings,reviews(v1)这三个服务。

创建完成后,等待所有的service和 pod 都已经正常启动。

创建服务网关

  1. 在 Kubernetes 菜单下, 单击左侧导航栏中的服务网格 > 服务网关,进入服务网关页面。
  2. 选择所需的集群及命名空间后,单击右上角新建
  3. 填写如下信息,单击创建,部署服务网关。

    部署服务网关
    参数说明:
    • 名称:新创建的服务网关的名称。
    • 服务网关:服务代理网关。默认为istio-ingressgateway。代理网关必须和新创建的网关部署在同一命名空间。
    • 端口配置:单击添加,可以增加多个端口的配置。
      • 名称:端口的名称
      • 协议:HTTP/TCP
      • 端口:1-65535
      • Host:支持多个host
    创建完成后,您可以在服务网关列表中,看到新创建的服务网关。
    服务网关
  4. 将上述服务绑定到Bookinfo-gateway网关,请参见绑定虚拟服务
    1. 在 Kubernetes 菜单下, 单击左侧导航栏中的服务网格 > 虚拟服务,可以看到虚拟服务(Virtual Service)列表。

      虚拟服务列表
      说明 未绑定网关的虚拟服务在服务网关列会显示绑定按钮。
    2. 在目标虚拟服务的服务网关列单击绑定,弹出添加页面。

      绑定服务网关
    3. 在服务网关中选择对应的网关名称,单击确定,即完成虚拟服务的绑定。
  5. 服务网关列表中,在目标服务网关对应的服务列中单击istio-ingressgateway,并输入路由/productpage

    服务网关
    可以看到如下页面。
    bookinfo示例

部署reviews-v2 版本

  1. 在 Kubernetes 菜单下, 单击左侧导航栏中的服务网格 > 虚拟服务,可以看到虚拟服务(Virtual Service)列表。
  2. 在目标服务的操作列单击管理,进入服务详情页面。

    管理服务
  3. 单击增加灰度版本

    增加灰度版本
  4. 进入创建应用界面。您可以根据需要配置界面参数。
    1. 应用基本信息页面,填写应用版本副本数量后,单击下一步
    2. 容器配置页面,设置镜像名称、镜像版本、所需资源,容器端口等配置信息后,单击下一步

      容器配置
      说明
      本示例中,界面参数取值参考如下:
      • 镜像名称:您可以单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定。您还可以填写私有 registry。本例中为docker.io/istio/example-bookinfo-productpage-v2
      • 镜像版本:您可以单击选择镜像版本选择镜像的版本。若不指定,默认为 latest。本例中为1.15.0
      • 所需资源:即为该应用预留资源额度,包括 CPU 和 内存两种资源,即容器独占该资源,防止因资源不足而被其他服务或进程争占资源,导致应用不可用。本例中CPU为0.25Core,内存为256MiB。
      • 端口映射:您需要添加主机端口和容器端口,支持 TCP/UDP 协议。本例中,容器端口为9080,协议为TCP。
      界面其他参数详细信息请参见镜像创建无状态Deployment应用
    3. 灰度策略页面,策略类型选择基于流量比例发布,流量比例中,V2流量比例设置为50%后,单击创建
  5. 待pod启动完成后,输入路由/productpage,会看到v2版本的界面。
    由于v1、v2流量比例各50%,可能要多刷新几次界面。
    bookinfo-sample

执行结果

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