部署 Bookinfo 原生应用
目录
Bookinfo 原生应用概览部署 Bookinfo 原生应用前提条件操作步骤验证通过网关访问 Bookinfo 原生应用使用 Istio Gateway Injection 访问 Bookinfo 原生应用前提条件操作步骤验证使用 Gateway API 访问 Bookinfo 原生应用前提条件操作步骤验证Bookinfo 原生应用概览
要安装 bookinfo 示例应用,需要两个主要步骤:首先部署应用本身,然后设置一个网关,以便从集群外部访问它。
bookinfo 应用是用于探索 service mesh 功能的工具。它可以让你轻松验证 Web 浏览器请求是否能够正确地通过 mesh 路由到应用。
bookinfo 应用展示的是一本书的相关信息,类似于在线书店目录中的单个条目。它会显示一个包含图书描述、详细信息(例如 ISBN 和页数)以及客户评论的页面。
当通过 mesh 暴露时,bookinfo 应用的微服务行为由 mesh 配置控制。评论数据来自三个服务之一:reviews-v1、reviews-v2 或 reviews-v3。如果你在未定义 reviews virtual service 的情况下部署 bookinfo,mesh 会默认使用轮询策略将请求路由到这些服务。
通过创建 reviews virtual service,你可以定义自定义路由规则。例如,当用户已登录时,你可以配置 mesh 将请求路由到 reviews-v2 服务,这样会显示黑色星标评论。相反,对于未登录的用户,mesh 可以将请求路由到 reviews-v3,显示红色星标评论。
更多详细信息可参考上游 Istio 文档中的 Bookinfo Application。
部署 Bookinfo 原生应用
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio CNI。
- 已部署 Istio 控制平面。
操作步骤
-
使用以下命令创建一个名为
bookinfo的新 namespace: -
为
bookinfonamespace 启用 sidecar 注入。如果你的环境使用InPlace升级策略,请运行以下命令:NOTE如果你使用的是
RevisionBased升级策略,请执行以下命令:-
要查看你的
<revision-name>,请运行以下命令:示例输出:
-
使用 revision 名称为 namespace 打标签,以启用 sidecar 注入:
-
-
可选:如果你已经配置了
discoverySelectors,可以使用以下命令将 Istiodiscovery selector应用到bookinfonamespace:示例
discovery selector标签:istio-discovery=enabled -
通过执行以下命令应用 YAML 文件来部署
bookinfo应用:
验证
-
要确认
bookinfo服务可用,请运行以下命令:示例输出
-
要检查
bookinfopod 是否可用,请执行以下命令:示例输出
当
Ready列显示2/2时,表示 proxy sidecar 注入成功。请确保每个 pod 的Status列都显示Running。 -
通过向其
productpage发送请求来确认bookinfo应用正在运行。执行以下命令:示例输出
通过网关访问 Bookinfo 原生应用
Alauda Service Mesh v2 Operator 不会部署网关,因为网关不被视为控制平面的一部分。出于安全考虑,最佳实践是在与控制平面分开的 namespace 中部署 Ingress 和 Egress 网关。
部署网关有两种方法:使用 Gateway API 或 gateway injection technique。
使用 Istio Gateway Injection 访问 Bookinfo 原生应用
gateway injection technique 利用了与 Istio sidecar 注入相同的机制。它会从关联了 Service 资源的 Deployment 资源创建一个网关。随后可以将该 Service 暴露到 Alauda Container Platform 集群外部。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio 控制平面。
操作步骤
-
执行以下命令以创建
istio-ingressgateway部署和 service: -
通过运行以下命令,将
bookinfo应用配置为使用新创建的网关:NOTE此示例使用一个示例网关配置文件,通过 Gateway API 为
bookinfo应用设置网关注入。该文件必须应用到应用安装所在的同一个 namespace 中。 -
可选:修改 YAML 文件,以便根据 ingress 流量自动进行 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应用配置网关。该文件必须应用到应用的 namespace 中。 -
运行以下命令,确保 Gateway API service 已准备就绪并具有地址:
-
使用以下命令获取主机:
-
使用以下命令获取端口:
-
使用以下命令获取网关 URL:
INFO如果
$INGRESS_HOST是 IPv6 地址,则在构造 URL 时需要用方括号将其括起来。例如: -
运行以下命令获取 product page 的完整 URL:
验证
-
通过
curl命令确认 productpage 可访问:示例输出
-
确认可以在 Web 浏览器中访问 productpage。
在浏览器中打开
http://${GATEWAY_URL}/productpage,即可查看 Bookinfo 网页。当你多次刷新页面时,应会在
productpage中看到不同版本的评论,以轮询方式展示(红色星标、黑色星标、无星标),因为我们尚未使用 Istio 来控制版本路由。