1.9. 在服务网格中添加服务

安装 Operators 和 ServiceMeshControlPlane 资源后,通过创建一个 ServiceMeshMemberRoll 资源并指定您的内容所在的命名空间,将应用程序、工作负载或服务添加到网格中。如果您已经有一个要添加到 ServiceMeshMemberRoll 资源的应用程序、工作负载或服务,请使用以下步骤。或者,要安装一个名为 Bookinfo 的示例应用程序并将其添加到 ServiceMeshMemberRoll 资源中,请跳至教程来安装 Bookinfo 示例应用程序,以查看应用程序如何在 Red Hat OpenShift Service Mesh 中工作。

ServiceMeshMemberRoll 资源中列出的项目是由 ServiceMeshControlPlane 资源管理的应用程序和工作流。control plane(包括 Service Mesh Operator、Istiod 和 ServiceMeshControlPlane )以及 data plane(包括应用程序和 Envoy 代理)必须位于不同的命名空间中。

注意

将命名空间添加到 ServiceMeshMemberRoll 后,服务网格外的调用者将无法访问该命名空间中的服务或 pod。

1.9.1. 创建 Red Hat OpenShift Service Mesh member roll

ServiceMeshMemberRoll 列出属于 Service Mesh control plane 的项目。只有 ServiceMeshMemberRoll 中列出的项目会受到 control plane 的影响。在将项目添加到特定 control plane 部署的 member roll 之前,项目不属于服务网格。

您必须在 ServiceMeshControlPlane 所在的同一个项目中创建一个名为 defaultServiceMeshMemberRoll 资源,如 istio-system

1.9.1.1. 从 Web 控制台创建 member roll

您可从 web 控制台在 Service Mesh member roll 中添加一个或多个项目。在本例中,istio-system 是 Service Mesh control plane 项目的名称。

前提条件

  • 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
  • 要添加到服务网格的现存项目列表。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 如果您还没有网格服务,或者您从头开始,请为您的应用程序创建一个项目。它必须与安装 Service Mesh control plane 的项目不同。

    1. 浏览至 HomeProject
    2. Name 字段中输入一个名称。
    3. Create
  3. 导航到 OperatorsInstalled Operators
  4. Project 菜单,从列表中选择部署 ServiceMeshControlPlane 资源的项目,如 istio-system
  5. 点 Red Hat OpenShift Service Mesh Operator。
  6. Istio Service Mesh Member Roll 选项卡。
  7. Create ServiceMeshMemberRoll
  8. 单击 Members,然后在 Value 字段中输入项目名称。您可以添加多个项目,但每个项目只能属于一个 ServiceMeshMemberRoll 资源。
  9. Create

1.9.1.2. 通过 CLI 创建 member roll

您可以使用命令行将项目添加到 ServiceMeshMemberRoll 中。

前提条件

  • 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
  • 要添加到服务网格的项目列表。
  • 访问 OpenShift CLI(oc)。

流程

  1. 登录 OpenShift Container Platform CLI。

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 如果您还没有网格服务,或者您从头开始,请为您的应用程序创建一个项目。它必须与安装 Service Mesh control plane 的项目不同。

    $ oc new-project <your-project>
  3. 要添加项目作为成员,请修改以下示例 YAML:您可以添加多个项目,但每个项目只能属于一个 ServiceMeshMemberRoll 资源。在本例中,istio-system 是 Service Mesh control plane 项目的名称。

    servicemeshmemberroll-default.yaml 示例

    apiVersion: maistra.io/v1
    kind: ServiceMeshMemberRoll
    metadata:
      name: default
      namespace: istio-system
    spec:
      members:
        # a list of projects joined into the service mesh
        - your-project-name
        - another-project-name

  4. 运行以下命令,在 istio-system 命名空间中上传并创建 ServiceMeshMemberRoll 资源。

    $ oc create -n istio-system -f servicemeshmemberroll-default.yaml
  5. 运行以下命令,以验证 ServiceMeshMemberRoll 是否已成功创建。

    $ oc get smmr -n istio-system default

    STATUS 列为 Configured 时,安装成功完成。

1.9.2. 为服务网格添加或删除项目

您可以使用 web 控制台从现有 Service Mesh ServiceMeshMemberRoll 资源中添加或删除项目。

  • 您可以添加多个项目,但每个项目只能属于一个 ServiceMeshMemberRoll 资源。
  • 当它对应的 ServiceMeshControlPlane 资源被删除后,ServiceMeshMemberRoll 资源也会被删除。

1.9.2.1. 使用 Web 控制台从 member roll 中添加或删除项目

前提条件

  • 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
  • 现有 ServiceMeshMemberRoll 资源
  • 带有 ServiceMeshMemberRoll 资源的项目名称 。
  • 您要为网格添加或删除的项目的名称。

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 导航到 OperatorsInstalled Operators
  3. Project 菜单,从列表中选择部署 ServiceMeshControlPlane 资源的项目,如 istio-system
  4. 点 Red Hat OpenShift Service Mesh Operator。
  5. Istio Service Mesh Member Roll 选项卡。
  6. default 链接。
  7. 点 YAML 标签。
  8. 修改 YAML 以添加或删除作为成员的项目。您可以添加多个项目,但每个项目只能属于一个 ServiceMeshMemberRoll 资源。
  9. Save
  10. Reload

1.9.2.2. 使用 CLI 从 member roll 添加或删除项目

您可以使用命令行修改现有 Service Mesh member roll。

先决条件

  • 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
  • 现有 ServiceMeshMemberRoll 资源
  • 带有 ServiceMeshMemberRoll 资源的项目名称 。
  • 您要为网格添加或删除的项目的名称。
  • 访问 OpenShift CLI(oc)。

流程

  1. 登录 OpenShift Container Platform CLI。
  2. 编辑 ServiceMeshMemberRoll 资源。

    $ oc edit smmr -n <controlplane-namespace>
  3. 修改 YAML 以添加或删除作为成员的项目。您可以添加多个项目,但每个项目只能属于一个 ServiceMeshMemberRoll 资源。

    servicemeshmemberroll-default.yaml 示例

    apiVersion: maistra.io/v1
    kind: ServiceMeshMemberRoll
    metadata:
      name: default
      namespace: istio-system #control plane project
    spec:
      members:
        # a list of projects joined into the service mesh
        - your-project-name
        - another-project-name

1.9.3. Bookinfo 示例应用程序

您可以使用 Bookinfo 示例应用程序来测试 OpenShift Container Platform 中的 Red Hat OpenShift Service Mesh 2.3.2 安装。

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

Bookinfo 应用程序由这些微服务组成:

  • productpage 微服务调用 detailsreviews 微服务来产生页面信息。
  • details 微服务包括了书的信息。
  • review 微服务包括了书的评论。它同时还会调用 ratings 微服务。
  • ratings微服务包括了带有对本书的评论信息的评分信息。

reviews 微服务有三个版本:

  • 版本 v1 不调用 ratings 服务。
  • 版本 v2 调用 ratings 服务,并以一到五个黑色星来代表对本书的评分。
  • 版本 v3 调用 ratings 服务,并以一到五个红色星来代表对本书的评分。

1.9.3.1. 安装 Bookinfo 应用程序

本教程介绍了如何创建项目、将 Bookinfo 应用程序部署到该项目并在 Service Mesh 中查看正在运行的应用程序来创建示例应用程序。

先决条件

  • 安装了 OpenShift Container Platform 4.1 或更高版本。
  • 安装了 Red Hat OpenShift Service Mesh 2.3.2。
  • 访问 OpenShift CLI(oc)。
  • 具有 cluster-admin 角色的帐户。
注意

Bookinfo 示例应用程序不能安装在 IBM Z 和 IBM Power Systems 上。

注意

本节中的命令假设 Service Mesh control plane 项目为 istio-system。如果在另一个命名空间中安装了 control plane,在运行前编辑每个命令。

流程

  1. 以具有 cluster-admin 权限的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。
  2. HomeProjects
  3. 点击 Create Project
  4. Project Name 中输入 info,输入 Display NameDescription,然后点 Create

    • 或者,也可以通过 CLI 运行这个命令来创建 info 项目。

      $ oc new-project info
  5. OperatorsInstalled Operators
  6. Project 菜单,使用 Service Mesh control plane 命名空间。在这个示例中,使用 istio-system
  7. Red Hat OpenShift Service Mesh Operator。
  8. Istio Service Mesh Member Roll 选项卡。

    1. 如果您已经创建了 Istio Service Mesh Member Roll,请名称,然后点击 YAML 标签来打开 YAML 编辑器。
    2. 如果您还没有创建 ServiceMeshMemberRoll,点 Create ServiceMeshMemberRoll
  9. 单击 Members,然后在 Value 字段中输入项目名称。
  10. Create 保存更新的 Service Mesh Member Roll。

    1. 或者,将以下示例保存到 YAML 文件中。

      Bookinfo ServiceMeshMemberRoll 示例 servicemeshmemberroll-default.yaml

      apiVersion: maistra.io/v1
      kind: ServiceMeshMemberRoll
      metadata:
        name: default
      spec:
        members:
        - info

    2. 运行以下命令上传该文件,并在 istio-system 命名空间中创建 ServiceMeshMemberRoll 资源。在本例中,istio-system 是 Service Mesh control plane 项目的名称。

      $ oc create -n istio-system -f servicemeshmemberroll-default.yaml
  11. 运行以下命令,以验证 ServiceMeshMemberRoll 是否已成功创建。

    $ oc get smmr -n istio-system -o wide

    STATUS 列为 Configured 时,安装成功完成。

    NAME      READY   STATUS       AGE   MEMBERS
    default   1/1     Configured   70s   ["info"]
  12. 在 CLI 中,通过应用 bookinfo.yaml 文件在 `info` 项目中部署 Bookinfo:

    $ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.3/samples/bookinfo/platform/kube/bookinfo.yaml

    您应该看到类似如下的输出:

    service/details created
    serviceaccount/info-details created
    deployment.apps/details-v1 created
    service/ratings created
    serviceaccount/info-ratings created
    deployment.apps/ratings-v1 created
    service/reviews created
    serviceaccount/info-reviews created
    deployment.apps/reviews-v1 created
    deployment.apps/reviews-v2 created
    deployment.apps/reviews-v3 created
    service/productpage created
    serviceaccount/info-productpage created
    deployment.apps/productpage-v1 created
  13. 通过应用 info-gateway.yaml 文件创建入站网关 :

    $ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.3/samples/bookinfo/networking/bookinfo-gateway.yaml

    您应该看到类似如下的输出:

    gateway.networking.istio.io/info-gateway created
    virtualservice.networking.istio.io/info created
  14. 设置 GATEWAY_URL 参数的值:

    $ export GATEWAY_URL=$(oc -n istio-system get route istio-ingressgateway -o jsonpath='{.spec.host}')

1.9.3.2. 添加默认目的地规则

在使用 Bookinfo 应用程序前,您必须首先添加默认目的地规则。根据您是否启用了 mutual TLS 验证,预先配置两个 YAML 文件。

流程

  1. 要添加目的地规则,请运行以下命令之一:

    • 如果没有启用 mutual TLS:

      $ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.3/samples/bookinfo/networking/destination-rule-all.yaml
    • 如果启用了 nutual TLS:

      $ oc apply -n info -f https://raw.githubusercontent.com/Maistra/istio/maistra-2.3/samples/bookinfo/networking/destination-rule-all-mtls.yaml

      您应该看到类似如下的输出:

      destinationrule.networking.istio.io/productpage created
      destinationrule.networking.istio.io/reviews created
      destinationrule.networking.istio.io/ratings created
      destinationrule.networking.istio.io/details created

1.9.3.3. 验证 Bookinfo 安装

要确认示例 Bookinfo 应用程序已被成功部署,请执行以下步骤。

前提条件

  • 安装了 Red Hat OpenShift Service Mesh。
  • 完成安装 Bookinfo 示例应用程序的步骤。

通过 CLI 的步骤

  1. 登录 OpenShift Container Platform CLI。
  2. 验证所有 pod 是否都与此命令就绪:

    $ oc get pods -n info

    所有容器集的状态都应为 Running。您应该看到类似如下的输出:

    NAME                              READY   STATUS    RESTARTS   AGE
    details-v1-55b869668-jh7hb        2/2     Running   0          12m
    productpage-v1-6fc77ff794-nsl8r   2/2     Running   0          12m
    ratings-v1-7d7d8d8b56-55scn       2/2     Running   0          12m
    reviews-v1-868597db96-bdxgq       2/2     Running   0          12m
    reviews-v2-5b64f47978-cvssp       2/2     Running   0          12m
    reviews-v3-6dfd49b55b-vcwpf       2/2     Running   0          12m
  3. 运行以下命令来检索产品页面的 URL:

    echo "http://$GATEWAY_URL/productpage"
  4. 在网页浏览器中复制并粘贴输出以验证是否已部署了 Bookinfo 产品页面。

来自 Kiali web 控制台的步骤

  1. 获取 Kiali web 控制台的地址。

    1. 以具有 cluster-admin 权限的用户身份登录 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。
    2. 进入 NetworkingRoutes
    3. Routes 页面中,从 Namespace 菜单中选择 Service Mesh control plane 项目,如 istio-system

      Location 列显示每个路由的链接地址。

    4. 点 Kiali 的 Location 列中的链接。
    5. 单击 Log In With OpenShift。Kiali Overview 屏幕显示每个项目命名空间的标题。
  2. 在 Kiali 中,点 Graph
  3. Namespace 列表中选择 info,从 Graph Type 列表中选择 App graph。
  4. Display 菜单中选择 Display idle nodes

    这将显示定义的节点,但尚未收到或发送请求。它可以确认应用已正确定义,但未报告任何请求流量。

    Kiali 显示 info 应用程序
    • 使用 Duration 菜单增加时间段,以帮助确保捕获旧的流量。
    • 使用 Refresh Rate 菜单刷新流量频率或更小,或者根本不刷新流量。
  5. ServicesWorkloadsIstio Config 查看 info 组件的列表视图,并确认它们健康。

1.9.3.4. 删除 Bookinfo 应用程序

按照以下步骤删除 Bookinfo 应用程序。

先决条件

  • 安装了 OpenShift Container Platform 4.1 或更高版本。
  • 安装了 Red Hat OpenShift Service Mesh 2.3.2。
  • 访问 OpenShift CLI(oc)。
1.9.3.4.1. 删除 Bookinfo 项目

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. HomeProjects
  3. info 菜单 kebab ,然后点 Delete Project
  4. 在确认对话框中键入 info,然后点 Delete

    • 或者,您可以使用 CLI 运行这个命令来创建 info 项目。

      $ oc delete project info
1.9.3.4.2. 从 Service Mesh member roll 中删除 Bookinfo 项目

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. OperatorsInstalled Operators
  3. Project 菜单,从列表中选 istio-system
  4. Red Hat OpenShift Service Mesh Operator 在 Provided APIS 下点 Istio Service Mesh Member Roll 链接。
  5. ServiceMeshMemberRoll 菜单 kebab 并选择 Edit Service Mesh Member Roll
  6. 编辑默认的 Service Mesh Member Roll YAML 并从 members 列表中删除 info

    • 或者,您可以使用 CLI 运行这个命令从 ServiceMeshMemberRoll 中删除 info 项目。在本例中,istio-system 是 Service Mesh control plane 项目的名称。

      $ oc -n istio-system patch --type='json' smmr default -p '[{"op": "remove", "path": "/spec/members", "value":["'"info"'"]}]'
  7. Save 更新 Service Mesh Member Roll。

1.9.4. 后续步骤