部署 Bookinfo 应用
目录
Bookinfo 应用概述部署 Bookinfo 应用前提条件操作步骤验证通过网关访问 Bookinfo 应用使用 Istio 网关注入访问 Bookinfo 应用前提条件操作步骤验证使用 Gateway API 访问 Bookinfo 应用前提条件操作步骤验证移除 Bookinfo 应用Bookinfo 应用概述
要安装 bookinfo 示例应用,需要完成两个主要步骤:首先部署应用本身,然后设置网关,使其可从集群外部访问。
bookinfo 应用可用于探索 service mesh 的功能。借助它,您可以轻松验证 Web 浏览器请求是否通过网格正确路由到应用。
bookinfo 应用展示有关一本书的信息,类似于在线书店目录中的单个条目。它会显示包含书籍描述、详细信息(例如 ISBN 和页数)以及客户评论的页面。
通过网格公开后,bookinfo 应用的微服务行为由网格配置控制。评论数据来自以下三个服务之一:reviews-v1、reviews-v2 或 reviews-v3。如果部署 bookinfo 时未定义 reviews 虚拟服务,网格将默认采用 round-robin 策略向这些服务路由请求。
通过创建 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服务可用:示例输出
-
执行以下命令,检查
bookinfopod 是否可用:示例输出
当
Ready列显示2/2时,表示 proxy 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 Container Platform 集群外部。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio 控制平面。
操作步骤
-
执行以下命令,创建
istio-ingressgatewaydeployment 和 service: -
运行以下命令,将
bookinfo应用配置为使用新创建的网关:NOTE此示例使用网关配置示例文件,为
bookinfo应用设置网关注入。该文件必须应用在安装应用的同一命名空间中。 -
可选:修改 YAML 文件,根据 ingress 流量自动扩展 pod。
配置示例
- 在此示例中,最大 Replica 数设置为
5,最小 Replica 数设置为2。CPU 利用率达到 80% 时会创建新的 Replica。
- 在此示例中,最大 Replica 数设置为
-
可选:定义节点上应运行的最少 pod 数量。
配置示例
- 此示例配置确保 pod 在其他节点上重启时至少有一个 Replica 正在运行。
验证
您将通过刚刚配置的网关连接到 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 中显示不同版本的评论,以 round-robin 方式呈现(红色星标、黑色星标、无星标),因为我们尚未使用 Istio 控制版本路由。
使用 Gateway API 访问 Bookinfo 应用
借助 Kubernetes Gateway API,可以通过创建 Gateway 资源来部署网关。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio 控制平面。
- 您的 Kubernetes 集群支持外部负载均衡器(即类型为
LoadBalancer的 Service)。
操作步骤
-
将
istio网关类 overlay 添加到Istio资源,使网关 pod 能够被接纳到Restrictedbookinfo命名空间中:有关更多信息,请参阅 Pod Security Admission。
-
执行以下命令,使用
Gateway和HTTPRoute资源创建并配置网关:NOTE此示例使用网关配置示例文件,通过 Gateway API 为
bookinfo应用配置网关。该文件必须应用在应用所在的命名空间中。 -
运行以下命令,确保 Gateway API service 已就绪并具有地址:
-
使用以下命令获取主机:
-
使用以下命令获取端口:
-
使用以下命令获取网关 URL:
INFO如果
$INGRESS_HOST是 IPv6 地址,则构建 URL 时请将其括在方括号中。例如: -
运行以下命令获取 product page 的完整 URL:
验证
-
使用
curl命令确认 productpage 可访问:示例输出
-
在 Web 浏览器中确认 productpage 可访问。
在浏览器中打开
http://${GATEWAY_URL}/productpage,查看 Bookinfo Web 页面。多次刷新页面时,您应该会看到
productpage中显示不同版本的评论,以 round-robin 方式呈现(红色星标、黑色星标、无星标),因为我们尚未使用 Istio 控制版本路由。
移除 Bookinfo 应用
完成对 Bookinfo 应用的探索后,请删除 bookinfo 命名空间,以移除该应用及其所有关联的网关资源: