部署示例应用 Bookinfo

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

目录

准备项目和命名空间

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

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

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

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

您可以按照以下说明准备项目和命名空间:

  1. 参考创建项目,在平台上创建包含关联集群c1c2的项目。
  1. 参考创建命名空间,在集群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,在应用 Marketplace中搜索 Bookinfo,下载提供的产品文件到本地。

    TIP

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

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

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

    解压后,您将获得以下文件:

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

    NOTE

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

    docker login <Harbor address>
    NOTE

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

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

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

  5. 依次执行以下命令。

    这些命令执行 docker_script.sh 脚本,完成镜像打标签、上传到 Harbor 项目,并修改 bookinfo.yaml 文件中的镜像地址。

    chmod +x docker_script.sh
    ./docker_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 应用的服务 productpagedetailsreviewsratings服务网格治理模式添加到 Service Mesh 平台。添加服务时,平台会自动向服务注入 Sidecar。

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

步骤

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

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

  3. 点击添加服务,选择服务网格治理模式

  4. 配置相关参数,点击创建

    NOTE

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

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

通过 Ingress Gateway 访问 Bookinfo 应用

步骤

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

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

  • Ingress Gateway

    • 内部路由类型LoadBalancer

    • 端口包含 HTTP 协议端口。

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

  • 路由配置路由目标选择集群 c1 中命名空间 ns1内部路由 productpage,端口9080

访问验证

点击路由配置中的外部访问地址,在打开页面左下角选择模拟用户类型(普通用户/测试用户),即可访问 productpage 服务,并看到 productpage 服务调用的 reviews 服务版本显示的评分信息。

服务调用拓扑如下所示。