部署 Bookinfo Application
目录
Bookinfo Application 概述部署 Bookinfo Application前提条件操作步骤验证通过 Gateway 访问 Bookinfo Application使用 Istio Gateway 注入访问 Bookinfo Application前提条件操作步骤验证使用 Gateway API 访问 Bookinfo Application前提条件操作步骤验证删除 Bookinfo ApplicationBookinfo Application 概述
要安装 bookinfo 示例应用程序,需要两个主要步骤:首先部署应用程序本身,其次设置一个 gateway 以便从集群外部访问它。
bookinfo application 是用于探索 service mesh 功能的工具。它可以让你轻松验证 Web 浏览器请求是否正确地通过 mesh 路由到应用程序。
bookinfo application 展示一本书的相关信息,类似于在线书店目录中的单个条目。它会显示一个包含书籍描述、详细信息(例如 ISBN 和页数)以及客户评论的页面。
当通过 mesh 暴露时,bookinfo application 的微服务行为由 mesh 配置控制。评论数据来自三个服务之一:reviews-v1、reviews-v2 或 reviews-v3。如果你在未定义 reviews virtual service 的情况下部署 bookinfo,mesh 会默认使用 round-robin 策略将请求路由到这些服务。
通过创建 reviews virtual service,你可以定义自定义路由规则。例如,你可以将 mesh 配置为在用户已登录时将请求转发到 reviews-v2 服务,这样会显示黑色星标的评论。相反,对于未登录用户,mesh 可以将请求路由到 reviews-v3,显示红色星标的评论。
更多详细信息可参考上游 Istio 文档中的 Bookinfo Application。
部署 Bookinfo Application
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio CNI。
- 已部署 Istio control plane。
操作步骤
-
使用以下命令创建一个名为
bookinfo的新 namespace: -
为
bookinfonamespace 启用 sidecar 注入。如果你的环境使用InPlace升级策略,请运行以下命令:NOTE如果你使用的是
RevisionBased升级策略,请执行以下命令:-
要获取
<revision-name>,请运行以下命令:示例输出:
-
使用 revision 名称为 namespace 打标签,以启用 sidecar 注入:
-
-
可选 :如果你已经配置了
discoverySelectors,请使用以下命令将 Istiodiscovery selector应用到bookinfonamespace:示例
discovery selector标签:istio-discovery=enabled -
通过执行以下命令应用其 YAML 文件,部署
bookinfoapplication:
验证
-
要确认
bookinfoservice 可用,请运行以下命令:示例输出
-
要检查
bookinfopod 是否可用,请执行以下命令:示例输出
当
Ready列显示2/2时,表示 proxy sidecar 注入成功。确保每个 pod 的Status列都显示Running。 -
通过向其
product page发送请求,确认bookinfoapplication 正在运行。执行以下命令:示例输出
通过 Gateway 访问 Bookinfo Application
由于 gateway 不被视为 control plane 的一部分,因此 Alauda Service Mesh v2 Operator 不会部署它们。出于安全考虑,最佳实践是将 Ingress 和 Egress gateway 部署在与 control plane 不同的 namespace 中。
部署 gateway 有两种方法:使用 Gateway API 或 gateway 注入技术。
使用 Istio Gateway 注入访问 Bookinfo Application
gateway 注入技术利用了与 Istio sidecar 注入相同的机制。它会从与 Service 资源关联的 Deployment 资源创建一个 gateway。随后可以将该 Service 暴露到 Alauda Container Platform 集群外部。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio control plane。
操作步骤
-
执行以下命令创建
istio-ingressgatewaydeployment 和 service: -
通过运行以下命令,将
bookinfoapplication 配置为使用新创建的 gateway:NOTE此示例使用一个示例 gateway 配置文件为
bookinfoapplication 设置 gateway 注入。该文件必须应用到安装应用程序的同一 namespace 中。 -
可选 :修改 YAML 文件,以根据 ingress 流量实现自动 pod 扩缩容。
示例配置
- 在此示例中,最大副本数设置为
5,最小副本数设置为2。当 CPU 利用率达到 80% 时,会创建一个新副本。
- 在此示例中,最大副本数设置为
-
可选 :定义节点上应运行的最小 pod 数量。
示例配置
- 此示例配置可确保当某个 pod 在不同节点上重启时,至少有一个副本处于运行状态。
验证
你将通过刚刚部署的 gateway 连接到 Bookinfo productpage service。要访问该 gateway,需要使用 kubectl port-forward 命令:
- 如果你在本地工作站上运行该命令,请在浏览器中打开
http://localhost:9080/productpage。 - 如果你在远程 IPv4 主机上运行该命令,并使用了
--address "0.0.0.0",请将localhost替换为远程主机的 IP 或主机名(例如http://<REMOTE_HOST_IP>:9080/productpage) - 如果你在远程 IPv6 主机上运行该命令,并使用了
--address "::",请将localhost替换为远程主机的 IP 或主机名(例如http://[<REMOTE_HOST_IP>]:9080/productpage)
当你多次刷新页面时,应会看到 productpage 中显示不同版本的 reviews,呈现 round robin 方式(红色星标、黑色星标、无星标),因为我们尚未使用 Istio 来控制版本路由。
使用 Gateway API 访问 Bookinfo Application
使用 Kubernetes Gateway API 时,gateway 通过创建 Gateway 资源进行部署。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio control plane。
- 你的 Kubernetes 集群支持外部负载均衡器(即
LoadBalancer类型的 Service)
操作步骤
-
通过执行以下命令,使用
Gateway和HTTPRoute资源创建并配置 gateway:NOTE此示例使用一个示例 gateway 配置文件,通过 Gateway API 为
bookinfoapplication 配置 gateway。该文件必须应用到应用程序的 namespace 中。 -
通过运行以下命令,确保 Gateway API service 已就绪并具有地址:
-
使用以下命令获取 host:
-
使用以下命令获取 port:
-
使用以下命令获取 gateway URL:
INFO如果
$INGRESS_HOST是 IPv6 地址,在构造 URL 时请将其括在方括号中。例如: -
通过运行以下命令获取 product page 的完整 URL:
验证
-
通过
curl命令确认 productpage 可访问:示例输出
-
确认可以在 Web 浏览器中访问 productpage。
在浏览器中访问
http://${GATEWAY_URL}/productpage,查看 Bookinfo Web 页面。当你多次刷新页面时,应会看到
productpage中显示不同版本的 reviews,呈现 round robin 方式(红色星标、黑色星标、无星标),因为我们尚未使用 Istio 来控制版本路由。
删除 Bookinfo Application
在完成对 Bookinfo application 的探索后,请通过删除 bookinfo namespace 来移除应用程序及其所有关联的 gateway 资源: