1.22. 服务网格故障排除

本节论述了如何识别和解决 Red Hat OpenShift Service Mesh 中的常见问题。在 OpenShift Container Platform 上部署 Red Hat OpenShift Service Mesh 时,请使用以下部分帮助排除故障并调试问题。

1.22.1. 了解 Service Mesh 版本

要了解您在系统上部署的 Red Hat OpenShift Service Mesh 版本,您需要了解如何管理各个组件版本。

  • Operator 版本 - 最新版本为 2.3.2。Operator 版本号仅指示当前安装的 Operator 的版本。因为 Red Hat OpenShift Service Mesh Operator 支持 Service Mesh control plane 的多个版本,所以 Operator 的版本不会决定部署的 ServiceMeshControlPlane 资源的版本。

    重要

    升级到最新的 Operator 版本会自动应用补丁更新,但不会自动将 Service Mesh control plane 升级到最新的次版本。

  • ServiceMeshControlPlane 版本 - ServiceMeshControlPlane 版本决定您使用的 Red Hat OpenShift Service Mesh 版本。ServiceMeshControlPlane 资源中的 spec.version 字段的值控制用于安装和部署 Red Hat OpenShift Service Mesh 的架构和配置设置。创建 Service Mesh control plane 时,您可以使用以下两种方式之一设置版本:

    • 要在 Form View 中配置,请从 Control Plane Version 菜单中选择版本。
    • 要在 YAML View 中配置,请在 YAML 文件中设置 spec.version 的值。

Operator Lifecycle Manager(OLM)不管理 Service Mesh control plane 升级,因此,Operator 和 ServiceMeshControlPlane (SMCP)的版本号可能不匹配,除非您手动升级 SMCP。

1.22.2. 安装故障排除 Operator

除本部分所述信息外,还需查看以下主题:

1.22.2.1. 验证 Operator 安装

安装 Red Hat OpenShift Service Mesh Operator 时,OpenShift 会在成功安装 Operator 时自动创建以下对象:

  • 配置映射
  • 自定义资源定义
  • 部署
  • pods
  • 副本集
  • 角色
  • 角色绑定
  • secrets
  • 服务帐户
  • services

通过 OpenShift Container Platform 控制台

您可以使用 OpenShift Container Platform 控制台验证 Operator pod 是否可用并运行。

  1. 导航到 WorkloadsPods
  2. 选择 openshift-operators 命名空间。
  3. 验证以下 pod 是否存在,状态是否为 running

    • istio-operator
    • jaeger-operator
    • kiali-operator
  4. 选择 openshift-operators-redhat 命名空间。
  5. 验证 elasticsearch-operator pod 是否存在,状态是否为 running

从命令行

  1. 使用以下命令,验证 Operator pod 可用并在 openshift-operators 命名空间中运行:

    $ oc get pods -n openshift-operators

    输出示例

    NAME                               READY   STATUS    RESTARTS   AGE
    istio-operator-bb49787db-zgr87     1/1     Running   0          15s
    jaeger-operator-7d5c4f57d8-9xphf   1/1     Running   0          2m42s
    kiali-operator-f9c8d84f4-7xh2v     1/1     Running   0          64s

  2. 使用以下命令验证 Elasticsearch Operator:

    $ oc get pods -n openshift-operators-redhat

    输出示例

    NAME                                      READY   STATUS    RESTARTS   AGE
    elasticsearch-operator-d4f59b968-796vq     1/1     Running   0          15s

1.22.2.2. 服务网格 Operator 故障排除

如果遇到 Operator 问题:

  • 验证 Operator 订阅状态。
  • 验证您安装的 Operator 是受支持的红帽版本,而不是社区版本。
  • 验证您有 cluster-admin 角色来安装 Red Hat OpenShift Service Mesh。
  • 检查 Operator pod 日志中是否存在与安装 Operator 相关的问题。
注意

您只能通过 OpenShift 控制台安装 Operator,无法从命令行访问 OperatorHub。

1.22.2.2.1. 查看 Operator pod 日志

您可以使用 oc logs 命令查看 Operator 日志。红帽可能会要求提供日志来帮助解决支持问题单。

流程

  • 要查看 Operator pod 日志,请输入以下命令:

    $ oc logs -n openshift-operators <podName>

    例如,

    $ oc logs -n openshift-operators istio-operator-bb49787db-zgr87

1.22.3. control plane 故障排除

Service Mesh control plane 由 Istiod 组成,它会将几个以前的 control plane 组件(Citadel、Galley、Pilot)整合为一个二进制文件。部署 ServiceMeshControlPlane 还会创建组成 Red Hat OpenShift Service Mesh 的其他组件,如 架构主题所述。

1.22.3.1. 验证 Service Mesh control plane 安装

在创建 Service Mesh control plane 时,Service Mesh Operator 使用您在 ServiceMeshControlPlane 资源文件中指定的参数进行以下操作:

  • 创建 Istio 组件并部署以下 pod:

    • istiod
    • istio-ingressgateway
    • istio-egressgateway
    • grafana
    • prometheus
  • 调用 Kiali Operator 根据 SMCP 或 Kiali 自定义资源中的配置创建 Kaili 部署。

    注意

    您可以查看 Kiali Operator 中的 Kiali 组件,而不是 Service Mesh Operator。

  • 调用 Red Hat OpenShift distributed tracing Platform Operator,以根据 SMCP 或 Jaeger 自定义资源中的配置创建分布式追踪平台组件。

    注意

    您可以在 Red Hat OpenShift distributed tracing Platform Operator 和 Elasticsearch Operator 下的 Elasticsearch 组件中查看 Jaeger 组件,而不是 Service Mesh Operator。

    通过 OpenShift Container Platform 控制台

    您可以在 OpenShift Container Platform web 控制台中验证 Service Mesh control plane 安装。

    1. 导航到 OperatorsInstalled Operators
    2. 选择 <istio-system> 命名空间。
    3. 选择 Red Hat OpenShift Service Mesh Operator。

      1. Istio Service Mesh Control Plane 标签页。
      2. 点 control plane 的名称,例如 basic
      3. 若要查看部署所创建的资源,可单击 Resources 选项卡。您可以使用过滤器来缩小您的视图,例如,检查所有 Pod 的状态是否为 running
      4. 如果 SMCP 状态指示任何问题,请检查 YAML 文件中的 status: 输出以了解更多信息。
      5. 返回到 OperatorsInstalled Operators
    4. 选择 OpenShift Elasticsearch Operator。

      1. Elasticsearch 标签页。
      2. 点部署的名称,如 elasticsearch
      3. 若要查看部署创建的资源,请点 Resources 选项卡。
      4. 如果状态列有任何问题,请检查 YAML 选项卡中的 status: 输出以了解更多信息。
      5. 返回到 OperatorsInstalled Operators
    5. 选择 Red Hat OpenShift distributed tracing Platform Operator。

      1. Jaeger 标签页。
      2. 点部署的名称,如 jaeger
      3. 若要查看部署所创建的资源,可单击 Resources 选项卡。
      4. 如果状态列显示任何问题,请检查 YAML 选项卡中的 status: 输出以了解更多信息。
      5. 导航到 OperatorsInstalled Operators
    6. 选择 Kiali Operator。

      1. Istio Service Mesh Control Plane 标签页。
      2. 点部署的名称,如 kiali
      3. 若要查看部署所创建的资源,可单击 Resources 选项卡。
      4. 如果状态列有任何问题,请检查 YAML 选项卡中的 status: 输出以了解更多信息。

从命令行

  1. 运行以下命令,以查看 Service Mesh control plane pod 是否可用并正在运行,其中 istio-system 是安装 SMCP 的命名空间。

    $ oc get pods -n istio-system

    输出示例

    NAME                                   READY   STATUS    RESTARTS   AGE
    grafana-6776785cfc-6fz7t               2/2     Running   0          102s
    istio-egressgateway-5f49dd99-l9ppq     1/1     Running   0          103s
    istio-ingressgateway-6dc885c48-jjd8r   1/1     Running   0          103s
    istiod-basic-6c9cc55998-wg4zq          1/1     Running   0          2m14s
    jaeger-6865d5d8bf-zrfss                2/2     Running   0          100s
    kiali-579799fbb7-8mwc8                 1/1     Running   0          46s
    prometheus-5c579dfb-6qhjk              2/2     Running   0          115s

  2. 使用以下命令检查 Service Mesh control plane 部署的状态。使用部署 SMCP 的命名空间替换 istio-system

    $ oc get smcp -n <istio-system>

    当 STATUS 列是 ComponentsReady 时,安装成功完成。

    输出示例

    NAME    READY   STATUS            PROFILES      VERSION   AGE
    basic   10/10   ComponentsReady   ["default"]   2.1.3     4m2s

    如果修改并重新部署了 Service Mesh control plane,其状态应该会显示 UpdateSuccessful

    输出示例

    NAME            READY     STATUS             TEMPLATE   VERSION   AGE
    basic-install   10/10     UpdateSuccessful   default     v1.1     3d16h

  3. 如果 SMCP 状态指示了 ComponentsReady 以外的任何内容,请检查 SCMP 资源中的 status: 输出以获取更多信息。

    $ oc describe smcp <smcp-name> -n <controlplane-namespace>

    输出示例

    $ oc describe smcp basic -n istio-system

  4. 使用以下命令检查 Jaeger 部署的状态,其中 istio-system 是部署 SMCP 的命名空间。

    $ oc get jaeger -n <istio-system>

    输出示例

    NAME     STATUS    VERSION   STRATEGY   STORAGE   AGE
    jaeger   Running   1.30.0    allinone   memory    15m

  5. 使用以下命令检查 Kiali 部署的状态,其中 istio-system 是部署 SMCP 的命名空间。

    $ oc get kiali -n <istio-system>

    输出示例

    NAME    AGE
    kiali   15m

1.22.3.1.1. 访问 Kiali 控制台

您可以在 Kiali 控制台中查看应用程序的拓扑、健康和指标。如果您的服务遇到问题,Kiali 控制台可让您通过服务查看数据流。您可以查看不同级别中的与网格组件相关的信息,包括抽象应用程序、服务以及负载。Kiali 还会实时提供命名空间的互动图形视图。

要访问 Kiali 控制台,您必须安装并配置了 Red Hat OpenShift Service Mesh。

安装过程创建了访问 Kiali 控制台的路由。

如果您知道 Kiali 控制台的 URL,您可以直接访问它。如果您不知道 URL,请使用以下指示:

管理员的步骤

  1. 使用管理员角色登录 OpenShift Container Platform Web 控制台。
  2. HomeProjects
  3. 如有必要,在 Projects 页面上,使用过滤器来查找项目的名称。
  4. 点项目的名称,例如 info
  5. Project details 页面中,点 Launcher 部分的 Kiali 链接。
  6. 使用与访问 OpenShift Container Platform 控制台相同的用户名和密码登录到 Kiali 控制台。

    第一次登录到 Kiali 控制台时,您会看到 Overview 页面,它会显示服务网格中您有权查看的所有命名空间。

    如果您验证了控制台安装,且命名空间还没有添加到网格中,则可能无法显示 istio-system 以外的任何数据。

开发人员的步骤

  1. 使用开发人员角色登录 OpenShift Container Platform Web 控制台。
  2. 单击 Project
  3. 如有必要,在 Project Details 页面上,使用过滤器来查找项目的名称。
  4. 点项目的名称,例如 info
  5. Project 页面中,点 Launcher 部分的 Kiali 链接。
  6. 单击 Log In With OpenShift
1.22.3.1.2. 访问 Jaeger 控制台

要访问 Jaeger 控制台,您必须安装并配置了 Red Hat OpenShift Service Mesh。

安装过程会创建路由来访问 Jaeger 控制台。

如果您知道 Jaeger 控制台的 URL,您可以直接访问它。如果您不知道 URL,请使用以下指示:

从 OpenShift 控制台的步骤

  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. 如有必要,使用过滤器来查找 jaeger 路由。单击路由 位置 以启动控制台。
  5. 单击 Log In With OpenShift

Kiali 控制台的步骤

  1. 启动 Kiali 控制台。
  2. 单击左侧导航窗格中的 Distributed Tracing
  3. 单击 Log In With OpenShift

通过 CLI 操作的步骤

  1. 以具有 cluster-admin 角色的用户身份登录 OpenShift Container Platform CLI。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有 dedicated-admin 角色的帐户。

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 要使用命令行查询路由详情,请输入以下命令。在本例中,istio-system 是 Service Mesh control plane 命名空间。

    $ export JAEGER_URL=$(oc get route -n istio-system jaeger -o jsonpath='{.spec.host}')
  3. 启动浏览器并进入 https://<JAEGER_URL>,其中 <JAEGER_URL> 是您在上一步中发现的路由。
  4. 使用您用于访问 OpenShift Container Platform 控制台的相同用户名和密码登录。
  5. 如果您已将服务添加到服务网格中并生成了 trace,您可以使用过滤器和 Find Traces 按钮搜索 trace 数据。

    如果您要验证控制台安装,则不会显示 trace 数据。

1.22.3.2. Service Mesh control plane 故障排除

如果您在部署 Service Mesh control plane 时遇到问题,

  • 确保 ServiceMeshControlPlane 资源安装在一个与您的服务和 Operator 分开的项目中。本文档使用 istio-system 项目作为示例,但只要它与包含 Operator 和服务的项目分开,就可以在任何项目中部署 control plane。
  • 确保 ServiceMeshControlPlaneJaeger 自定义资源已部署在同一项目中。例如,两者都使用 istio-system 项目。

1.22.4. 对数据平面进行故障排除

数据平面 是一组智能代理,用于拦截和控制服务网格中服务之间的所有入站和出站网络通信。

Red Hat OpenShift Service Mesh 依赖于应用程序 pod 中的 proxy sidecar 来为应用程序提供服务网格功能。

1.22.4.1. sidecar 注入故障排除

Red Hat OpenShift Service Mesh 不会自动将代理 sidecar 注入 pod。您必须选择 sidecar 注入。

1.22.4.1.1. Istio sidecar 注入故障排除

检查您的应用程序的部署中是否启用了自动注入。如果为 Envoy 代理启用了自动注入,则 spec.template.metadata.annotationsDeployment 资源中应该有一个 sidecar.istio.io/inject:"true" 注解。

1.22.4.1.2. Jaeger 代理 sidecar 注入故障排除

检查您的应用程序的部署中是否启用了自动注入。如果启用了 Jaeger 代理的自动注入,Deployment 资源中应该有一个 sidecar.jaegertracing.io/inject:"true" 注解。

如需有关 sidecar 注入的更多信息,请参阅启用自动注入