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.4.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 是否可用并运行。
-
导航到 Workloads
Pods。 -
选择
openshift-operators
命名空间。 验证以下 pod 是否存在,状态是否为
running
:-
istio-operator
-
jaeger-operator
-
kiali-operator
-
-
选择
openshift-operators-redhat
命名空间。 -
验证
elasticsearch-operator
pod 是否存在,状态是否为running
。
从命令行
使用以下命令,验证 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
使用以下命令验证 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 安装。
-
导航到 Operators
Installed Operators。 -
选择
<istio-system>
命名空间。 选择 Red Hat OpenShift Service Mesh Operator。
- 点 Istio Service Mesh Control Plane 标签页。
-
点 control plane 的名称,例如
basic
。 -
若要查看部署所创建的资源,可单击 Resources 选项卡。您可以使用过滤器来缩小您的视图,例如,检查所有 Pod 的状态是否为
running
。 -
如果 SMCP 状态指示任何问题,请检查 YAML 文件中的
status:
输出以了解更多信息。 -
返回到 Operators
Installed Operators。
选择 OpenShift Elasticsearch Operator。
- 点 Elasticsearch 标签页。
-
点部署的名称,如
elasticsearch
。 - 若要查看部署创建的资源,请点 Resources 选项卡。
-
如果
状态
列有任何问题,请检查 YAML 选项卡中的status:
输出以了解更多信息。 -
返回到 Operators
Installed Operators。
选择 Red Hat OpenShift distributed tracing Platform Operator。
- 点 Jaeger 标签页。
-
点部署的名称,如
jaeger
。 - 若要查看部署所创建的资源,可单击 Resources 选项卡。
-
如果
状态
列显示任何问题,请检查 YAML 选项卡中的status:
输出以了解更多信息。 -
导航到 Operators
Installed Operators。
选择 Kiali Operator。
- 点 Istio Service Mesh Control Plane 标签页。
-
点部署的名称,如
kiali
。 - 若要查看部署所创建的资源,可单击 Resources 选项卡。
-
如果
状态
列有任何问题,请检查 YAML 选项卡中的status:
输出以了解更多信息。
-
导航到 Operators
从命令行
运行以下命令,以查看 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
使用以下命令检查 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
如果 SMCP 状态指示了
ComponentsReady
以外的任何内容,请检查 SCMP 资源中的status:
输出以获取更多信息。$ oc describe smcp <smcp-name> -n <controlplane-namespace>
输出示例
$ oc describe smcp basic -n istio-system
使用以下命令检查 Jaeger 部署的状态,其中
istio-system
是部署 SMCP 的命名空间。$ oc get jaeger -n <istio-system>
输出示例
NAME STATUS VERSION STRATEGY STORAGE AGE jaeger Running 1.30.0 allinone memory 15m
使用以下命令检查 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,请使用以下指示:
管理员的步骤
- 使用管理员角色登录 OpenShift Container Platform Web 控制台。
-
点 Home
Projects。 - 如有必要,在 Projects 页面上,使用过滤器来查找项目的名称。
-
点项目的名称,例如
info
。 - 在 Project details 页面中,点 Launcher 部分的 Kiali 链接。
使用与访问 OpenShift Container Platform 控制台相同的用户名和密码登录到 Kiali 控制台。
第一次登录到 Kiali 控制台时,您会看到 Overview 页面,它会显示服务网格中您有权查看的所有命名空间。
如果您验证了控制台安装,且命名空间还没有添加到网格中,则可能无法显示
istio-system
以外的任何数据。
开发人员的步骤
- 使用开发人员角色登录 OpenShift Container Platform Web 控制台。
- 单击 Project。
- 如有必要,在 Project Details 页面上,使用过滤器来查找项目的名称。
-
点项目的名称,例如
info
。 - 在 Project 页面中,点 Launcher 部分的 Kiali 链接。
- 单击 Log In With OpenShift。
1.22.3.1.2. 访问 Jaeger 控制台
要访问 Jaeger 控制台,您必须安装并配置了 Red Hat OpenShift Service Mesh。
安装过程会创建路由来访问 Jaeger 控制台。
如果您知道 Jaeger 控制台的 URL,您可以直接访问它。如果您不知道 URL,请使用以下指示:
从 OpenShift 控制台的步骤
-
以具有 cluster-admin 权限的用户身份登录到 OpenShift Container Platform web 控制台。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有
dedicated-admin
角色的帐户。 -
进入 Networking
Routes。 在 Routes 页面中,从 Namespace 菜单中选择 Service Mesh control plane 项目,如
istio-system
。Location 列显示每个路由的链接地址。
-
如有必要,使用过滤器来查找
jaeger
路由。单击路由 位置 以启动控制台。 - 单击 Log In With OpenShift。
Kiali 控制台的步骤
- 启动 Kiali 控制台。
- 单击左侧导航窗格中的 Distributed Tracing。
- 单击 Log In With OpenShift。
通过 CLI 操作的步骤
以具有
cluster-admin
角色的用户身份登录 OpenShift Container Platform CLI。如果使用 Red Hat OpenShift Dedicated,则必须有一个具有dedicated-admin
角色的帐户。$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
要使用命令行查询路由详情,请输入以下命令。在本例中,
istio-system
是 Service Mesh control plane 命名空间。$ export JAEGER_URL=$(oc get route -n istio-system jaeger -o jsonpath='{.spec.host}')
-
启动浏览器并进入
https://<JAEGER_URL>
,其中<JAEGER_URL>
是您在上一步中发现的路由。 - 使用您用于访问 OpenShift Container Platform 控制台的相同用户名和密码登录。
如果您已将服务添加到服务网格中并生成了 trace,您可以使用过滤器和 Find Traces 按钮搜索 trace 数据。
如果您要验证控制台安装,则不会显示 trace 数据。
1.22.3.2. Service Mesh control plane 故障排除
如果您在部署 Service Mesh control plane 时遇到问题,
-
确保
ServiceMeshControlPlane
资源安装在一个与您的服务和 Operator 分开的项目中。本文档使用istio-system
项目作为示例,但只要它与包含 Operator 和服务的项目分开,就可以在任何项目中部署 control plane。 -
确保
ServiceMeshControlPlane
和Jaeger
自定义资源已部署在同一项目中。例如,两者都使用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.annotations
的 Deployment
资源中应该有一个 sidecar.istio.io/inject:"true"
注解。
1.22.4.1.2. Jaeger 代理 sidecar 注入故障排除
检查您的应用程序的部署中是否启用了自动注入。如果启用了 Jaeger 代理的自动注入,Deployment
资源中应该有一个 sidecar.jaegertracing.io/inject:"true"
注解。
如需有关 sidecar 注入的更多信息,请参阅启用自动注入