2.5. 关于 Bookinfo 应用程序
安装 info
示例应用程序由两个主要任务组成:部署应用程序并创建网关,以便应用程序可以访问集群。
您可以使用 info
应用程序来探索服务网格功能。使用 bookinfo
应用程序,您可以轻松地确认来自网页浏览器通过网格的请求并访问应用程序。
info
应用显示有关书本的信息,类似于在线书店的单一目录条目。应用会显示一个页面,其中描述了书、列出书的详细信息(ISBN、页数和其他信息),以及图书评论。
info
应用通过网格公开,网格配置决定如何使用微服务提供请求。审查信息来自以下三个服务之一: review -v1
、reviews-v2
或 review-v3
。如果您在没有定义 review
虚拟服务的情况下部署 bookinfo
应用程序,则网格使用 round robin 规则将请求路由到服务。
通过部署 reviews
虚拟服务,您可以指定不同的行为。例如,您可以指定如果用户登录到 info
应用,则网格会将请求路由到 review-v2
服务,应用程序会显示带有黑色星的检查。如果用户没有登录到 bookinfo
应用程序,则网格将请求路由到 review-v3
服务,应用程序会显示带有红色星的评论。
如需更多信息,请参阅上游 Istio 文档中的 Bookinfo 应用程序。
2.5.1. 部署 Bookinfo 应用程序 复制链接链接已复制到粘贴板!
先决条件
- 您已在 OpenShift Container Platform 4.15 或更高版本上部署了集群。
-
以具有
cluster-admin
角色的用户身份登录到 OpenShift Container Platform Web 控制台。 - 您可以访问 OpenShift CLI (oc)。
- 已安装 Red Hat OpenShift Service Mesh Operator,创建 Istio 资源,Operator 已部署 Istio。
- 您已创建了 IstioCNI 资源,Operator 已部署必要的 IstioCNI pod。
流程
-
在 OpenShift Container Platform web 控制台中进入 Home
Projects 页面。 - 点击 Create Project。
在 Project name 字段中输入
info
。Display name 和 Description 字段提供补充信息,且不是必需项。
- 点 Create。
输入以下命令将 Istio 发现选择器和注入标签应用到
info
命名空间:oc label namespace info istio-discovery=enabled istio-injection=enabled
$ oc label namespace info istio-discovery=enabled istio-injection=enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在本例中,Istio 资源的名称
默认为
。如果 Istio 资源名称不同,您必须将istio.io/rev
标签设置为 Istio 资源的名称,而不是添加istio-injection=enabled
标签。输入以下命令应用
info
YAML 文件来部署bookinfo
应用程序:oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/platform/kube/bookinfo.yaml -n bookinfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证
info
服务是否可用:oc get services -n info
$ oc get services -n info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 172.30.137.21 <none> 9080/TCP 44s productpage ClusterIP 172.30.2.246 <none> 9080/TCP 43s ratings ClusterIP 172.30.33.85 <none> 9080/TCP 44s reviews ClusterIP 172.30.175.88 <none> 9080/TCP 44s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 172.30.137.21 <none> 9080/TCP 44s productpage ClusterIP 172.30.2.246 <none> 9080/TCP 43s ratings ClusterIP 172.30.33.85 <none> 9080/TCP 44s reviews ClusterIP 172.30.175.88 <none> 9080/TCP 44s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证
info
pod 是否可用:oc get pods -n info
$ oc get pods -n info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当
Ready
列显示2/2
时,代理 sidecar 被成功注入。确认每个容器集的Status
列中显示Running
。通过向
bookinfo
页面发送请求来验证info
应用程序是否正在运行。运行以下命令:oc exec "$(oc get pod -l app=ratings -n info -o jsonpath='{.items[0].metadata.name}')" -c ratings -n bookinfo -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
$ oc exec "$(oc get pod -l app=ratings -n info -o jsonpath='{.items[0].metadata.name}')" -c ratings -n bookinfo -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.2. 关于使用网关访问 Bookinfo 应用程序 复制链接链接已复制到粘贴板!
Red Hat OpenShift Service Mesh Operator 不会部署网关。网关不是 control plane 的一部分。作为安全最佳实践,Ingress 和 Egress 网关应部署到与包含 control plane 的命名空间不同的命名空间中。
您可以使用网关 API 或网关注入方法部署网关。
2.5.3. 使用 Istio 网关注入访问 Bookinfo 应用程序 复制链接链接已复制到粘贴板!
网关注入使用与 Istio sidecar 注入相同的机制,从与 Service
资源配对的 Deployment
资源创建网关。Service
资源可以从 OpenShift Container Platform 集群外部访问。
先决条件
-
以
cluster-admin
用户身份登录到 OpenShift Container Platform Web 控制台。 - 必须安装 Red Hat OpenShift Service Mesh Operator。
- 必须部署 Istio 资源。
流程
运行以下命令来创建
istio-ingressgateway
部署和服务:oc apply -n info -f ingress-gateway.yaml
$ oc apply -n info -f ingress-gateway.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意这个示例使用 Istio community 仓库中提供的
ingress-gateway.yaml
文件示例。将
info
应用配置为使用新网关。运行以下命令来应用网关配置:oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/networking/bookinfo-gateway.yaml -n bookinfo
$ oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/networking/bookinfo-gateway.yaml -n bookinfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要使用
info
应用配置网关注入,本例使用示例网关配置文件,该文件必须应用到安装应用程序的命名空间中。运行以下命令,使用路由向集群外部公开网关:
oc expose service istio-ingressgateway -n info
$ oc expose service istio-ingressgateway -n info
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改 YAML 文件,以便在入口流量增加时自动扩展 pod。
配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 这个示例将最大副本设置为
5
,最小副本设置为2
。它还会在利用率达到 80% 时创建另一个副本。
指定节点上必须运行的最小 pod 数量。
配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 本例确保当 pod 在新节点上重启时有一个副本正在运行。
运行以下命令,获取产品页面的网关主机名和 URL:
HOST=$(oc get route istio-ingressgateway -n info -o jsonpath='{.spec.host}')
$ HOST=$(oc get route istio-ingressgateway -n info -o jsonpath='{.spec.host}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
productpage
是否可从网页浏览器访问:echo productpage URL: http://$HOST/productpage
$ echo productpage URL: http://$HOST/productpage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.4. 使用网关 API 访问 Bookinfo 应用程序 复制链接链接已复制到粘贴板!
Kubernetes 网关 API 通过创建网关资源来部署 网关
。在 OpenShift Container Platform 4.15 及更新的版本中,Red Hat OpenShift Service Mesh 实现 Gateway API 自定义资源定义(CRD)。但是,在 OpenShift Container Platform 4.18 及更早版本中,默认情况下不安装 CRD。因此,在 OpenShift Container Platform 4.15 到 4.18 中,您必须手动安装 CRD。从 OpenShift Container Platform 4.19 开始,这些 CRD 会被自动安装和管理,您无法创建、更新或删除它们。
有关在 OpenShift Container Platform 4.19 及之后的版本中为 Ingress 启用网关 API 的详情,请参阅 OpenShift Container Platform 文档中的"配置集群流量"。
红帽提供对将 Kubernetes 网关 API 与 Red Hat OpenShift Service Mesh 搭配使用的支持。红帽不提供对 Kubernetes 网关 API 自定义资源定义(CRD)的支持。在此过程中,仅显示使用社区网关 API CRD 进行演示。
先决条件
-
以
cluster-admin
用户身份登录到 OpenShift Container Platform Web 控制台。 - 必须安装 Red Hat OpenShift Service Mesh Operator。
- 必须部署 Istio 资源。
流程
运行以下命令,为 OpenShift Container Platform 4.18 及更早版本启用 Gateway API CRD:
oc get crd gateways.gateway.networking.k8s.io &> /dev/null || { oc kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.0.0" | oc apply -f -; }
$ oc get crd gateways.gateway.networking.k8s.io &> /dev/null || { oc kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v1.0.0" | oc apply -f -; }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用
Gateway
和HTTPRoute
资源创建和配置网关:oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/gateway-api/bookinfo-gateway.yaml -n bookinfo
$ oc apply -f https://raw.githubusercontent.com/openshift-service-mesh/istio/release-1.24/samples/info/gateway-api/bookinfo-gateway.yaml -n bookinfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要使用网关 API 配置带有
info
应用程序的网关,本例使用了示例网关配置文件,该文件必须应用到安装应用程序的命名空间中。确保网关 API 服务已就绪,并通过运行以下命令分配有地址:
oc wait --for=condition=programmed gtw info-gateway -n bookinfo
$ oc wait --for=condition=programmed gtw info-gateway -n bookinfo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来检索主机:
export INGRESS_HOST=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.status.addresses[0].value}')
$ export INGRESS_HOST=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.status.addresses[0].value}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来检索端口:
export INGRESS_PORT=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.spec.listeners[?(@.name=="http")].port}')
$ export INGRESS_PORT=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.spec.listeners[?(@.name=="http")].port}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来检索网关 URL:
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,获取网关主机名和产品页面的 URL:
echo "http://${GATEWAY_URL}/productpage"
$ echo "http://${GATEWAY_URL}/productpage"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 验证 productpage 是否可从网页浏览器访问。