部署 Bookinfo 原生应用
目录
Bookinfo 原生应用概述部署 Bookinfo 原生应用先决条件操作步骤验证通过 Gateway 访问 Bookinfo 原生应用使用 Istio Gateway 注入访问 Bookinfo 原生应用先决条件操作步骤验证使用 Gateway API 访问 Bookinfo 原生应用先决条件操作步骤验证删除 Bookinfo 原生应用Bookinfo 原生应用概述
要安装 bookinfo 示例原生应用,需要两个主要步骤:首先部署原生应用本身,其次设置网关,以使其可从集群外部访问。
bookinfo 原生应用是用于探索 service mesh 功能的工具。它可帮助您轻松验证 Web 浏览器请求是否已正确通过 mesh 路由到该原生应用。
bookinfo 原生应用展示一本书的信息,类似于在线书店目录中的单个条目。它显示一个页面,其中包含书籍描述、详细信息(例如 ISBN 和页数)以及客户评论。
当通过 mesh 暴露时,bookinfo 原生应用的微服务行为由 mesh 配置控制。评论数据来自三个服务之一:reviews-v1、reviews-v2 或 reviews-v3。如果您部署 bookinfo 时未定义 reviews virtual service,mesh 默认会采用 round-robin 策略将请求路由到这些服务。
通过创建 reviews virtual service,您可以定义自定义路由规则。例如,您可以将 mesh 配置为在用户已登录时将请求定向到 reviews-v2 服务,从而显示带黑色星标的评论。相反,对于未登录的用户,mesh 可以将请求路由到 reviews-v3,显示带红色星标的评论。
更多详细信息可参阅上游 Istio 文档中的 Bookinfo 原生应用。
部署 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原生应用:
验证
-
要确认
bookinfoservice 可用,请运行此命令:示例输出
-
要检查
bookinfopod 是否可用,请执行以下命令:示例输出
当
Ready列显示2/2时,表示 proxy sidecar 注入成功。请确保每个 pod 的Status列显示Running。 -
通过向其
product page发送请求来确认bookinfo原生应用正在运行。执行此命令:示例输出
通过 Gateway 访问 Bookinfo 原生应用
Alauda Service Mesh v2 Operator 不会部署 Gateway,因为它们不被视为控制平面的一部分。出于安全考虑,最佳实践是将 Ingress 和 Egress gateway 部署在与控制平面不同的命名空间中。
部署 gateway 有两种方式:使用 Gateway API 或 gateway 注入技术。
使用 Istio Gateway 注入访问 Bookinfo 原生应用
gateway 注入技术利用了与 Istio sidecar 注入相同的机制。它基于一个与 Service 资源关联的 Deployment 资源创建 gateway。随后,此 Service 可在 Alauda Container Platform 集群外部暴露。
先决条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio 控制平面。
操作步骤
-
执行以下命令以创建
istio-ingressgatewaydeployment 和 service: -
通过运行此命令,将
bookinfo原生应用配置为使用新创建的 gateway:NOTE此示例使用一个示例 gateway 配置文件,通过 Gateway 注入为
bookinfo原生应用设置 gateway。该文件必须应用于安装原生应用的同一命名空间中。 -
可选:修改 YAML 文件,以便根据 ingress 流量实现 pod 自动扩缩容。
示例配置
- 在此示例中,最大 replica 数设置为
5,最小为2。当 CPU 利用率达到 80% 时,将创建新的 replica。
- 在此示例中,最大 replica 数设置为
-
可选:定义应在节点上运行的 pod 最小数量。
示例配置
- 此示例配置可确保当 pod 在不同节点上重启时,至少有一个 replica 处于运行状态。
验证
您将通过刚刚配置的 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 中看到以 round robin 方式显示的不同版本评论(红色星标、黑色星标、无星标),因为我们尚未使用 Istio 来控制版本路由。
使用 Gateway API 访问 Bookinfo 原生应用
使用 Kubernetes Gateway API 时,gateway 是通过创建 Gateway 资源来部署的。
先决条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio 控制平面。
- 您的 Kubernetes 集群支持外部负载均衡器(即
LoadBalancer类型的 Service)
操作步骤
-
通过执行以下命令,使用
Gateway和HTTPRoute资源创建并配置 gateway:NOTE此示例使用一个示例 gateway 配置文件,通过 Gateway API 为
bookinfo原生应用配置 gateway。该文件必须应用于原生应用所在的命名空间中。 -
通过运行以下命令,确保 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中看到以 round robin 方式显示的不同版本评论(红色星标、黑色星标、无星标),因为我们尚未使用 Istio 来控制版本路由。
删除 Bookinfo 原生应用
当您完成对 Bookinfo 原生应用的探索后,通过删除 bookinfo 命名空间来移除原生应用及其所有关联的 gateway 资源: