2.5. 关于 Bookinfo 应用程序


安装 info 示例应用程序由两个主要任务组成:部署应用程序并创建网关,以便应用程序可以访问集群。

您可以使用 info 应用程序来探索服务网格功能。使用 bookinfo 应用程序,您可以轻松地确认来自网页浏览器通过网格的请求并访问应用程序。

info 应用显示有关书本的信息,类似于在线书店的单一目录条目。应用会显示一个页面,其中描述了书、列出书的详细信息(ISBN、页数和其他信息),以及图书评论。

info 应用通过网格公开,网格配置决定如何使用微服务提供请求。审查信息来自以下三个服务之一: review -v1reviews-v2review-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。

流程

  1. 在 OpenShift Container Platform web 控制台中进入 Home Projects 页面。
  2. 点击 Create Project
  3. Project name 字段中输入 info

    Display nameDescription 字段提供补充信息,且不是必需项。

  4. Create
  5. 输入以下命令将 Istio 发现选择器和注入标签应用到 info 命名空间:

    $ oc label namespace info istio-discovery=enabled istio-injection=enabled
    Copy to Clipboard Toggle word wrap
    注意

    在本例中,Istio 资源的名称 默认为。如果 Istio 资源名称不同,您必须将 istio.io/rev 标签设置为 Istio 资源的名称,而不是添加 istio-injection=enabled 标签。

  6. 输入以下命令应用 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
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令验证 info 服务是否可用:

    $ oc get services -n info
    Copy to Clipboard Toggle word wrap

    输出示例

    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 Toggle word wrap

  2. 运行以下命令验证 info pod 是否可用:

    $ oc get pods -n info
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                             READY   STATUS    RESTARTS   AGE
    details-v1-698d88b-km2jg         2/2     Running   0          66s
    productpage-v1-675fc69cf-cvxv9   2/2     Running   0          65s
    ratings-v1-6484c4d9bb-tpx7d      2/2     Running   0          65s
    reviews-v1-5b5d6494f4-wsrwp      2/2     Running   0          65s
    reviews-v2-5b667bcbf8-4lsfd      2/2     Running   0          65s
    reviews-v3-5b9bd44f4-44hr6       2/2     Running   0          65s
    Copy to Clipboard Toggle word wrap

    Ready 列显示 2/2 时,代理 sidecar 被成功注入。确认每个容器集的 Status 列中显示 Running

  3. 通过向 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>"
    Copy to Clipboard Toggle word wrap

2.5.2. 关于使用网关访问 Bookinfo 应用程序

Red Hat OpenShift Service Mesh Operator 不会部署网关。网关不是 control plane 的一部分。作为安全最佳实践,Ingress 和 Egress 网关应部署到与包含 control plane 的命名空间不同的命名空间中。

您可以使用网关 API 或网关注入方法部署网关。

网关注入使用与 Istio sidecar 注入相同的机制,从与 Service 资源配对的 Deployment 资源创建网关。Service 资源可以从 OpenShift Container Platform 集群外部访问。

先决条件

  • cluster-admin 用户身份登录到 OpenShift Container Platform Web 控制台。
  • 必须安装 Red Hat OpenShift Service Mesh Operator。
  • 必须部署 Istio 资源。

流程

  1. 运行以下命令来创建 istio-ingressgateway 部署和服务:

    $ oc apply -n info -f ingress-gateway.yaml
    Copy to Clipboard Toggle word wrap
    注意

    这个示例使用 Istio community 仓库中提供的 ingress-gateway.yaml 文件示例

  2. info 应用配置为使用新网关。运行以下命令来应用网关配置:

    $ 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 Toggle word wrap
    注意

    要使用 info 应用配置网关注入,本例使用示例网关配置文件,该文件必须应用到安装应用程序的命名空间中。

  3. 运行以下命令,使用路由向集群外部公开网关:

    $ oc expose service istio-ingressgateway -n info
    Copy to Clipboard Toggle word wrap
  4. 修改 YAML 文件,以便在入口流量增加时自动扩展 pod。

    配置示例

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      labels:
        istio: ingressgateway
        release: istio
      name: ingressgatewayhpa
      namespace: info
    spec:
      maxReplicas: 5 
    1
    
      metrics:
      - resource:
          name: cpu
          target:
            averageUtilization: 80
            type: Utilization
        type: Resource
      minReplicas: 2
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: istio-ingressgateway
    Copy to Clipboard Toggle word wrap

    1
    这个示例将最大副本设置为 5,最小副本设置为 2。它还会在利用率达到 80% 时创建另一个副本。
  5. 指定节点上必须运行的最小 pod 数量。

    配置示例

    apiVersion: policy/v1
    kind: PodDisruptionBudget
    metadata:
      labels:
        istio: ingressgateway
        release: istio
      name: ingressgatewaypdb
      namespace: info
    spec:
      minAvailable: 1 
    1
    
      selector:
        matchLabels:
          istio: ingressgateway
    Copy to Clipboard Toggle word wrap

    1
    本例确保当 pod 在新节点上重启时有一个副本正在运行。
  6. 运行以下命令,获取产品页面的网关主机名和 URL:

    $ HOST=$(oc get route istio-ingressgateway -n info -o jsonpath='{.spec.host}')
    Copy to Clipboard Toggle word wrap
  7. 运行以下命令,验证 productpage 是否可从网页浏览器访问:

    $ echo productpage URL: http://$HOST/productpage
    Copy to Clipboard Toggle word wrap

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 资源。

流程

  1. 运行以下命令,为 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 -; }
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,使用 GatewayHTTPRoute 资源创建和配置网关:

    $ 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 Toggle word wrap
    注意

    要使用网关 API 配置带有 info 应用程序的网关,本例使用了示例网关配置文件,该文件必须应用到安装应用程序的命名空间中。

  3. 确保网关 API 服务已就绪,并通过运行以下命令分配有地址:

    $ oc wait --for=condition=programmed gtw info-gateway -n bookinfo
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令来检索主机:

    $ export INGRESS_HOST=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.status.addresses[0].value}')
    Copy to Clipboard Toggle word wrap
  5. 运行以下命令来检索端口:

    $ export INGRESS_PORT=$(oc get gtw info-gateway -n bookinfo -o jsonpath='{.spec.listeners[?(@.name=="http")].port}')
    Copy to Clipboard Toggle word wrap
  6. 运行以下命令来检索网关 URL:

    $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
    Copy to Clipboard Toggle word wrap
  7. 运行以下命令,获取网关主机名和产品页面的 URL:

    $ echo "http://${GATEWAY_URL}/productpage"
    Copy to Clipboard Toggle word wrap

验证

  • 验证 productpage 是否可从网页浏览器访问。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat