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

安装 Operator 并创建 ServiceMeshControlPlane 资源后,将一个或多个项目添加到服务网格中。

1.9.1. 关于将项目添加到服务网格中

项目包含服务;但是,只有在将项目添加到服务网格时,服务才可用。

注意

在 OpenShift Container Platform 中,项目基本上是一个带有额外注解的 Kubernetes 命名空间,如项目中可以使用的用户 ID 范围。通常,OpenShift Container Platform Web 控制台使用术语项目,CLI 使用术语命名空间,但术语基本上是语法。

您可以使用 OpenShift Container Platform Web 控制台或 CLI 将项目添加到现有服务网格中。将项目添加到服务网格的方法有两种:

  • ServiceMeshMemberRoll 资源中指定项目名称。
  • 在项目中创建 ServiceMeshMember 资源。

ServiceMeshMemberRoll 方法

这是将项目添加到服务网格的最简单方法。要添加项目,请在 ServiceMeshMemberRoll 资源的 spec.members 字段中指定项目名称。ServiceMeshMemberRoll 资源指定哪个项目由 ServiceMeshControlPlane 资源控制。

注意

使用此方法添加项目需要用户具有正在添加的项目中的 update servicemeshmemberrollsupdate pod 特权。

  • 如果您已经有要添加到服务网格中的应用程序、工作负载或服务,请参阅 使用带有 Web 控制台或 CLIServiceMeshMemberRoll 资源从服务网格中添加或删除项目的说明。
  • 另外,要安装一个名为 Bookinfo 的示例应用程序并将其添加到 ServiceMeshMemberRoll 资源中,请参阅 Bookinfo 示例应用程序 指南。

ServiceMeshMember 方法

ServiceMeshMember 资源提供了一种在不修改 ServiceMeshMemberRoll 资源的情况下将项目添加到服务网格的方法。要添加项目,请在您要添加到服务网格的项目中创建 ServiceMeshMember 资源。当 Service Mesh Operator 处理 ServiceMeshMember 对象时,项目会出现在 ServiceMeshMemberRoll 资源的 status.members 列表中。然后,属于项目中的服务对网格提供。如需更多信息,请参阅使用带有 Web 控制台或 CLIServiceMeshMember 资源将项目添加到服务网格的说明。

网格管理员必须授予每个网格用户权限,以便引用 ServiceMeshMember 资源中的 ServiceMeshControlPlane 资源。在这个版本中,当网格用户没有服务网格项目或 ServiceMeshMemberRoll 资源没有直接访问权限时,可以使用这个权限将项目添加到网格中。如需更多信息,请参阅创建 Red Hat OpenShift Service Mesh 成员

1.9.2. 创建 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.2.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.2.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.3. 在 web 控制台中使用 ServiceMeshMemberRoll 资源从服务网格中添加或删除项目

您可以添加多个项目,但每个项目只能属于一个 ServiceMeshMemberRoll 资源。

当它对应的 ServiceMeshControlPlane 资源被删除后,ServiceMeshMemberRoll 资源也会被删除。

先决条件

  • 已安装并验证的 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 资源。

    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

  9. Save
  10. Reload

1.9.4. 通过 CLI 使用 ServiceMeshMemberRoll 资源从服务网格中添加或删除项目

您可以添加多个项目,但每个项目只能属于一个 ServiceMeshMemberRoll 资源。

当它对应的 ServiceMeshControlPlane 资源被删除后,ServiceMeshMemberRoll 资源也会被删除。

先决条件

  • 已安装并验证的 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

  4. 保存文件并退出编辑器。

1.9.5. 使用带有 Web 控制台的 ServiceMeshMember 资源将项目添加到服务网格中

您可通过 web 控制台在 Service Mesh 中添加一个或多个项目。

先决条件

  • 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
  • ServiceMeshControlPlane 资源的名称以及资源所属的项目名称。
  • 要添加到网格的项目的名称。
  • 服务网格管理员必须明确授予服务网格的访问权限。管理员可以使用 RoleBindingClusterRoleBinding 为用户授予 mesh-user 角色 的访问权限。如需更多信息,请参阅创建 Red Hat OpenShift Service Mesh 成员

流程

  1. 登陆到 OpenShift Container Platform Web 控制台。
  2. 导航到 OperatorsInstalled Operators
  3. Project 菜单,然后从下拉列表中选择您要添加到网格的项目。例如: istio-system
  4. 点 Red Hat OpenShift Service Mesh Operator。
  5. Istio Service Mesh Member 选项卡。
  6. Create ServiceMeshMember
  7. 接受 ServiceMeshMember 的默认名称。
  8. 点击以展开 ControlPlaneRef
  9. Namespace 字段中,选择 ServiceMeshControlPlane 资源所属的项目。例如: istio-system
  10. Name 字段中输入此命名空间所属的 ServiceMeshControlPlane 资源的名称。例如,基本
  11. Create
  12. 确认创建了 ServiceMeshMember 资源,并且项目已添加到网格中。单击资源名称,例如 default。查看屏幕末尾显示的 Conditions 部分。确认 ReconciledReady 条件的 StatusTrue。如果 StatusFalse,请参阅 ReasonMessage 列以了解更多信息。

1.9.6. 通过 CLI 使用 ServiceMeshMember 资源将项目添加到服务网格中

您可以通过 CLI 将一个或多个项目添加到 Service Mesh 中。

先决条件

  • 已安装并验证的 Red Hat OpenShift Service Mesh Operator。
  • ServiceMeshControlPlane 资源的名称及其所属的项目名称。
  • 要添加到网格的项目的名称。
  • 服务网格管理员必须明确授予服务网格的访问权限。管理员可以使用 RoleBindingClusterRoleBinding 为用户授予 mesh-user 角色 的访问权限。如需更多信息,请参阅创建 Red Hat OpenShift Service Mesh 成员

流程

  1. 登录 OpenShift Container Platform CLI。
  2. ServiceMeshMember 清单创建 YAML 文件。清单将 my-application 项目添加到由 istio-system 命名空间中部署的 ServiceMeshControlPlane 资源创建的服务网格中:

    apiVersion: maistra.io/v1
    kind: ServiceMeshMember
    metadata:
      name: default
      namespace: my-application
    spec:
      controlPlaneRef:
        namespace: istio-system
        name: basic
  3. 应用 YAML 文件以创建 ServiceMeshMember 资源:

    $ oc apply -f <file-name>
  4. 创建 ServiceMeshMember 资源后,验证命名空间是否是网格的一部分。运行以下命令,确认值 True 出现在 READY 列中:

    $ oc get smm default -n my-application

    另外,如果可以访问 ServiceMeshMemberRoll 资源,您还可以确认 my-application 命名空间显示在 ServiceMeshMemberRoll 资源的 status.membersstatus.configuredMembers 字段中。

1.9.7. Bookinfo 示例应用程序

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

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

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

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

reviews 微服务有三个版本:

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

1.9.7.1. 安装 Bookinfo 应用程序

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

先决条件:

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

Bookinfo 示例应用程序不能安装在 IBM zSystems 和 IBM Power 中。

注意

本节中的命令假设 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.7.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.7.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.7.4. 删除 Bookinfo 应用程序

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

先决条件

  • 安装了 OpenShift Container Platform 4.1 或更高版本。
  • 安装了 Red Hat OpenShift Service Mesh 2.3.3。
  • 访问 OpenShift CLI(oc)。
1.9.7.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.7.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.8. 后续步骤