部署示例应用 Bookinfo

参考本文档,在服务网格中跨多个集群、以相同命名空间部署 Bookinfo 应用,以验证多集群服务网格的能力。

准备项目和命名空间

为部署该应用准备项目和命名空间,配置要求如下:

  • 所有集群必须作为 关联集群 与平台现有项目关联。

  • 用于部署应用的同名命名空间必须存在于所有集群中。

    注意:基于多集群服务网格的跨地域灾备或负载均衡,只能在服务网格内各集群中相同命名空间下的同名服务之间发生。

你可以按照以下步骤准备项目和命名空间:

  1. 参考 创建项目,在平台上创建一个包含 关联集群 c1c2 的项目。

  2. 参考 创建命名空间,在集群 c1c2 中创建同名命名空间 ns1

在多个集群中部署 Bookinfo 应用

在集群 c1c2 中的同名命名空间 ns1 下部署 Bookinfo 应用。

前提条件

你已经有一个平台可访问的镜像仓库,并且可以向该仓库推送镜像。

NOTE

本文档以 Harbor 为例。你需要在 Harbor 中准备一个用于上传镜像的项目(访问级别设为 public),并将该项目分配给平台上为 Bookinfo 准备的项目使用。你可以在平台上部署或集成镜像管理工具 Harbor,并将 Harbor 中用于上传镜像的项目分配给平台上为 Bookinfo 准备的项目。

应用简介

Bookinfo 是 Istio 提供的一个示例应用,模拟了一个在线书店。它由四个独立的服务组成,共同提供查看书籍描述、书籍详情(ISBN、页数等)以及书评的功能。

组成 Bookinfo 的服务如下:

服务名称描述
productpage调用 details 和 reviews 服务生成页面。
details包含书籍信息。
reviews包含书评信息,并调用 ratings 服务。

reviews 服务有三个版本:
v1:不调用 ratings 服务。
v2:调用 ratings 服务,并显示 1 到 5 颗星的评分
v3:调用 ratings 服务,并显示 1 到 5 颗星的评分
提示:默认部署 v2 版本。
ratings包含由书评计算得出的评分信息。

Bookinfo 的端到端架构如下所示。

准备镜像和 YAML 文件

在平台上部署 Bookinfo 应用之前,需要从 Customer Portal 系统下载部署 Bookinfo 应用所需的镜像和 YAML 文件。

通过执行脚本,对镜像打标签并将其上传到平台可访问的镜像仓库,同时修改 YAML 文件中的镜像地址。确保平台在部署应用时能够顺利拉取所需镜像。

步骤

  1. 登录 Customer Portal,在 Application Marketplace 中搜索 Bookinfo,并将提供的 product 文件下载到本地。

    TIP

    如需访问 Customer Portal 系统,请联系技术支持。

  2. 打开本地终端,执行以下命令解压下载的文件并加载镜像。

    unzip <file_name>.zip
    crictl load -i images.tar
    NOTE

    解压后,将得到以下文件:

    • images.tar:Bookinfo 的镜像包。
    • bookinfo.yaml:Bookinfo 的 YAML 文件。
    • crictl_script.sh:用于给镜像打标签、上传镜像以及修改 YAML 文件中镜像地址的脚本。
  3. 执行以下命令登录平台可访问的镜像仓库。

    NOTE

    请将 <Harbor address> 替换为平台上 Harbor 的实际可访问地址,例如:registry-harbor.example.com

    crictl login <Harbor address>
    NOTE

    在输入用户名和密码后,如果收到以下错误,请修改 container runtime 配置,将 Harbor 地址添加到 insecure-registries,然后重新执行登录命令。

    Error response from daemon: Get "https://<Harbor address>/v2/": http: server gave HTTP response to HTTPS client
  4. 修改 crictl_script.sh 脚本文件。

    <Harbor address> 替换为你要上传镜像的 Harbor 项目地址,例如:registry-harbor.example.com/bookinfo

  5. 按顺序执行以下命令。

    以下命令会执行 crictl_script.sh 脚本,对镜像打标签、将镜像上传到 Harbor 项目,并修改 bookinfo.yaml 文件中的镜像地址。

    chmod +x crictl_script.sh
    ./crictl_script.sh

一键部署应用

Container Platform 平台中,使用 YAML 在集群 c1c2 的命名空间 ns1 中创建一个 原生应用,以部署 Bookinfo 应用。

步骤

  1. 在顶部导航栏,单击产品视图切换器切换到 Container Platform,并进入集群 c1 下的命名空间 ns1

  2. 在左侧导航栏,单击 应用管理 > 原生应用

  3. 单击 创建原生应用,并选择 使用 YAML 一键创建

  4. 输入应用名称,在 YAML 编辑器中单击 导入,选择 bookinfo.yaml,然后单击 创建

  5. 重复以上步骤,在集群 c2 的命名空间 ns1 中部署 Bookinfo 应用。

为应用服务注入 Sidecar

Service Mesh 平台中,将构成 Bookinfo 应用的服务 productpagedetailsreviewsratingsService Mesh 治理模式 添加到 Service Mesh 平台中。添加服务时,平台会自动为这些服务注入 Sidecar。

注入 Sidecar 后,Bookinfo 的架构如下所示。

步骤

  1. 在顶部导航栏,单击产品视图切换器切换到 Service Mesh

  2. 在左侧导航栏,单击 服务列表

  3. 单击 添加服务,并选择 Service Mesh 治理模式

  4. 配置相关参数,然后单击 创建

    NOTE

    除非另有说明,请选择 Deployment,并使用界面上的默认参数值。

    • 重复以上步骤,将服务 productpagedetailsreviewsratings 添加到集群 c1c2 的命名空间 ns1 中的平台。

通过 Ingress Gateway 访问 Bookinfo 应用

步骤

参考 使用 Ingress Gateway,在集群 c1 中部署 ingress gateway,并创建 gateway 配置和路由配置,以通过浏览器访问在该集群中部署的 Bookinfo 应用。

根据需要配置相关参数,其余参数按需配置。

  • Ingress Gateway

    • 内部路由类型LoadBalancer

    • 端口包含 HTTP 协议端口。

  • Gateway 配置:选择带有 HTTP 协议的端口。

  • 路由配置路由目标 选择 cluster c1 中的命名空间 ns1internal routing productpage,以及端口 9080

访问验证

单击路由配置中的 External Access Address,在打开页面的左下角选择模拟用户类型(Normal user/Test user),然后即可访问 productpage 服务,并查看由 productpage 服务调用的 reviews 服务版本所显示的评分信息。

服务调用拓扑如下所示。