部署 Bookinfo 应用程序
目录
Bookinfo 应用程序概述部署 Bookinfo 应用程序前提条件操作步骤验证通过网关访问 Bookinfo 应用程序使用 Istio 网关注入访问 Bookinfo 应用程序前提条件操作步骤验证使用 Gateway API 访问 Bookinfo 应用程序前提条件操作步骤验证Bookinfo 应用程序概述
要安装 bookinfo 示例应用程序,需要两个主要步骤:首先部署应用程序本身,其次设置一个网关以便从集群外部访问。
bookinfo 应用程序是一个用于探索服务网格功能的工具。它允许您轻松验证 Web 浏览器请求是否正确通过网格路由到应用程序。
bookinfo 应用程序展示一本书的信息,类似于在线书店目录中的单个条目。它显示包含书籍描述、详细信息(如 ISBN 和页数)以及客户评论的页面。
通过网格暴露时,bookinfo 应用程序的微服务行为由网格配置控制。评论数据来自三个服务之一:reviews-v1、reviews-v2 或 reviews-v3。如果您部署 bookinfo 时没有定义 reviews 虚拟服务,网格默认采用轮询策略将请求路由到这些服务。
通过创建 reviews 虚拟服务,您可以定义自定义路由规则。例如,您可以配置网格在用户登录时将请求路由到 reviews-v2 服务,显示带黑色星星的评论;而对于未登录用户,网格则将请求路由到 reviews-v3,显示带红色星星的评论。
更多详情请参阅上游 Istio 文档中的 Bookinfo Application。
部署 Bookinfo 应用程序
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio CNI。
- 已部署 Istio 控制平面。
操作步骤
-
使用以下命令创建一个名为
bookinfo的新命名空间: -
为
bookinfo命名空间启用 sidecar 注入。如果您的环境使用InPlace升级策略,执行以下命令:NOTE如果您使用的是
RevisionBased升级策略,请执行以下命令:-
运行以下命令以查询您的
<revision-name>:示例输出:
-
使用查询到的 revision 名称为命名空间打标签以启用 sidecar 注入:
-
-
可选:如果您已配置
discoverySelectors,请使用以下命令将 Istiodiscovery selector应用到bookinfo命名空间:示例
discovery selector标签:istio-discovery=enabled -
通过应用 YAML 文件部署
bookinfo应用程序,执行以下命令:
验证
-
运行以下命令确认
bookinfo服务是否可用:示例输出
-
运行以下命令检查
bookinfopods 是否可用:示例输出
当
Ready列显示为2/2时,表示代理 sidecar 注入成功。确保每个 pod 的Status列显示为Running。 -
通过向
product page发送请求确认bookinfo应用程序正在运行。执行以下命令:示例输出
通过网关访问 Bookinfo 应用程序
Alauda Service Mesh v2 Operator 不会部署网关,因为网关不被视为控制平面的一部分。出于安全考虑,最佳实践是在与控制平面不同的命名空间中部署 Ingress 和 Egress 网关。
部署网关有两种方法:使用 Gateway API 或 网关注入技术。
使用 Istio 网关注入访问 Bookinfo 应用程序
网关注入技术利用与 Istio sidecar 注入相同的机制。它通过与 Service 资源关联的 Deployment 资源创建网关。然后,该 Service 可以暴露到 Alauda 容器平台集群外部。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio 控制平面。
操作步骤
-
执行以下命令创建
istio-ingressgateway部署和服务: -
通过运行以下命令配置
bookinfo应用程序使用新创建的网关:NOTE本示例使用一个示例网关配置文件为
bookinfo应用程序设置网关注入。该文件必须应用于应用程序安装的同一命名空间。 -
可选:修改 YAML 文件以根据入口流量自动扩缩 Pod。
示例配置
- 在此示例中,最大副本数设置为
5,最小副本数为2。当 CPU 利用率达到 80% 时,会创建新的副本。
- 在此示例中,最大副本数设置为
-
可选:定义节点上应运行的最小 Pod 数量。
示例配置
- 此示例配置确保在 Pod 在不同节点重启时,至少有一个副本在运行。
验证
您将通过刚刚配置的网关连接到 Bookinfo 的 productpage 服务。要访问网关,需要使用 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 中显示的不同版本的评论,呈现轮询风格(红星、黑星、无星),因为我们尚未使用 Istio 控制版本路由。
使用 Gateway API 访问 Bookinfo 应用程序
通过 Kubernetes Gateway API,网关通过创建 Gateway 资源进行部署。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio 控制平面。
- 您的 Kubernetes 集群支持外部负载均衡器(即类型为
LoadBalancer的 Service)。
操作步骤
-
通过执行以下命令创建并配置
Gateway和HTTPRoute资源:NOTE本示例使用一个示例网关配置文件通过 Gateway API 为
bookinfo应用程序配置网关。该文件必须应用于应用程序的命名空间。 -
运行以下命令确保 Gateway API 服务已就绪并具有地址:
-
使用以下命令获取主机地址:
-
使用以下命令获取端口号:
-
使用以下命令获取网关 URL:
INFO如果
$INGRESS_HOST是 IPv6 地址,构造 URL 时请用方括号括起来。例如: -
运行以下命令获取 product page 的完整 URL:
验证
-
使用
curl命令确认 productpage 可访问:示例输出
-
在 Web 浏览器中确认 productpage 可访问。
在浏览器中访问
http://${GATEWAY_URL}/productpage查看 Bookinfo 网页。刷新页面多次,您应该会看到
productpage中显示的不同版本的评论,呈现轮询风格(红星、黑星、无星),因为我们尚未使用 Istio 控制版本路由。