$ oc get pods -n openshift-operators
本节介绍如何识别和解决 Red Hat OpenShift Service Mesh 中的常见问题。使用以下部分来帮助排查和调试在 OpenShift Container Platform 上部署 Red Hat OpenShift Service Mesh 时遇到的问题。
为了了解您在系统上部署了哪个版本的 Red Hat OpenShift Service Mesh,您需要了解每个组件版本的管理方式。
Operator 版本 - 最新 Operator 版本为 2.6.4。Operator 版本号仅指示当前安装的 Operator 的版本。因为 Red Hat OpenShift Service Mesh Operator 支持多个版本的 Service Mesh 控制平面,所以 Operator 的版本并不决定已部署的 ServiceMeshControlPlane
资源的版本。
升级到最新的 Operator 版本会自动应用补丁更新,但不会自动将您的 Service Mesh 控制平面升级到最新的次要版本。 |
ServiceMeshControlPlane 版本 - ServiceMeshControlPlane
版本决定您使用的 Red Hat OpenShift Service Mesh 版本。ServiceMeshControlPlane
资源中 spec.version
字段的值控制用于安装和部署 Red Hat OpenShift Service Mesh 的架构和配置设置。创建服务网格控制平面时,您可以通过两种方式之一设置版本
要在表单视图中配置,请从控制平面版本菜单中选择版本。
要在 YAML 视图中配置,请在 YAML 文件中设置 spec.version
的值。
Operator Lifecycle Manager (OLM) 不管理服务网格控制平面升级,因此您的 Operator 和 ServiceMeshControlPlane
(SMCP) 的版本号可能不匹配,除非您手动升级了 SMCP。
除了本节中的信息外,请务必查看以下主题
安装 Red Hat OpenShift Service Mesh Operator 时,OpenShift 会自动创建以下对象作为成功安装 Operator 的一部分
配置映射
自定义资源定义
部署
Pod
副本集
角色
角色绑定
密钥
服务账户
服务
您可以使用 OpenShift Container Platform 控制台验证 Operator Pod 是否可用并正在运行。
导航到工作负载 → Pod。
选择openshift-operators
命名空间。
验证以下 Pod 是否存在且状态为运行中
istio-operator
jaeger-operator
kiali-operator
选择openshift-operators-redhat
命名空间。
验证elasticsearch-operator
Pod 是否存在且状态为运行中
。
使用以下命令验证 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
服务网格控制平面由 Istiod 组成,它将几个以前的控制平面组件(Citadel、Galley、Pilot)整合到单个二进制文件中。部署ServiceMeshControlPlane
还会创建构成 Red Hat OpenShift Service Mesh 的其他组件,如架构主题中所述。
创建服务网格控制平面时,服务网格 Operator 使用您在ServiceMeshControlPlane
资源文件中指定的参数执行以下操作:
创建 Istio 组件并部署以下 Pod:
istiod
istio-ingressgateway
istio-egressgateway
grafana
prometheus
调用 Kiali Operator 根据 SMCP 或 Kiali 自定义资源中的配置创建 Kaili 部署。
您在 Kiali Operator 下查看 Kiali 组件,而不是在服务网格 Operator 下查看。 |
调用 Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator 根据 SMCP 或 Jaeger 自定义资源中的配置创建分布式追踪平台 (Jaeger) 组件。
您在 Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator 下查看 Jaeger 组件,在 Red Hat Elasticsearch Operator 下查看 Elasticsearch 组件,而不是在服务网格 Operator 下查看。 |
您可以在 OpenShift Container Platform Web 控制台中验证服务网格控制平面安装。
导航到Operators → 已安装的 Operators。
选择istio-system
命名空间。
选择 Red Hat OpenShift Service Mesh Operator。
点击Istio 服务网格控制平面选项卡。
点击控制平面的名称,例如basic
。
要查看部署创建的资源,请点击资源选项卡。您可以使用过滤器缩小视图范围,例如,检查所有Pod的状态是否为运行中
。
如果 SMCP 状态指示任何问题,请检查 YAML 文件中的status:
输出以获取更多信息。
返回Operators → 已安装的 Operators。
选择 OpenShift Elasticsearch Operator。
点击Elasticsearch选项卡。
点击部署的名称,例如elasticsearch
。
要查看部署创建的资源,请点击资源选项卡。
如果状态
列显示任何问题,请检查YAML选项卡上的status:
输出以获取更多信息。
返回Operators → 已安装的 Operators。
选择 Red Hat OpenShift 分布式追踪平台 (Jaeger) Operator。
点击Jaeger选项卡。
点击部署的名称,例如jaeger
。
要查看部署创建的资源,请点击资源选项卡。
如果状态
列指示任何问题,请检查YAML选项卡上的status:
输出以获取更多信息。
导航到Operators → 已安装的 Operators。
选择 Kiali Operator。
点击Istio 服务网格控制平面选项卡。
点击部署的名称,例如kiali
。
要查看部署创建的资源,请点击资源选项卡。
如果状态
列显示任何问题,请检查YAML选项卡上的status:
输出以获取更多信息。
运行以下命令查看服务网格控制平面 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
使用以下命令检查服务网格控制平面部署的状态。将istio-system
替换为您部署 SMCP 的命名空间。
$ oc get smcp -n istio-system
当 STATUS 列为ComponentsReady
时,安装已成功完成。
NAME READY STATUS PROFILES VERSION AGE
basic 10/10 ComponentsReady ["default"] 2.1.3 4m2s
如果您已修改并重新部署服务网格控制平面,则状态应显示为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
您可以在 Kiali 控制台中查看应用程序的拓扑、健康状况和指标。如果您的服务遇到问题,Kiali 控制台允许您查看数据流经您的服务。您可以查看不同级别网格组件的洞察信息,包括抽象应用程序、服务和工作负载。Kiali 还提供命名空间的实时交互式图形视图。
要访问 Kiali 控制台,您必须安装 Red Hat OpenShift Service Mesh,并安装和配置 Kiali。
安装过程会创建一个路由以访问 Kiali 控制台。
如果您知道 Kiali 控制台的 URL,可以直接访问它。如果您不知道 URL,请使用以下说明。
使用管理员角色登录到 OpenShift Container Platform Web 控制台。
点击主页 → 项目。
在项目页面上,如有必要,使用过滤器查找项目的名称。
点击项目的名称,例如bookinfo
。
在项目详细信息页面上的启动器部分,点击Kiali链接。
使用与访问 OpenShift Container Platform 控制台相同的用户名和密码登录到 Kiali 控制台。
首次登录 Kiali 控制台时,您会看到概述页面,其中显示服务网格中您有权查看的所有命名空间。
如果您正在验证控制台安装,并且尚未将命名空间添加到网格中,则除了istio-system
之外,可能没有任何数据显示。
使用开发者角色登录到 OpenShift Container Platform Web 控制台。
点击项目。
在项目详细信息页面上,如有必要,使用过滤器查找项目的名称。
点击项目的名称,例如bookinfo
。
在项目页面上的启动器部分,点击Kiali链接。
点击使用 OpenShift 登录。
要访问 Jaeger 控制台,您必须安装 Red Hat OpenShift Service Mesh,并安装和配置 Red Hat OpenShift 分布式追踪平台 (Jaeger)。
安装过程会创建一个路由以访问 Jaeger 控制台。
如果您知道 Jaeger 控制台的 URL,可以直接访问它。如果您不知道 URL,请使用以下说明。
从 Red Hat OpenShift Service Mesh 2.5 版本开始,Red Hat OpenShift 分布式追踪平台 (Jaeger) 和 OpenShift Elasticsearch Operator 已被弃用,将在未来的版本中移除。Red Hat 将在当前版本的生命周期内提供此功能的错误修复和支持,但此功能将不再接收增强功能,并将被移除。作为 Red Hat OpenShift 分布式追踪平台 (Jaeger) 的替代方案,您可以使用 Red Hat OpenShift 分布式追踪平台 (Tempo)。 |
以具有 cluster-admin 权限的用户身份登录 OpenShift Container Platform Web 控制台。如果您使用 Red Hat OpenShift Dedicated,则必须拥有具有 dedicated-admin
角色的帐户。
导航到 **网络** → **路由**。
在 **路由** 页面上,从 **命名空间** 菜单中选择 Service Mesh 控制平面项目,例如 istio-system
。
**位置** 列显示每个路由的链接地址。
如有必要,使用过滤器查找 jaeger
路由。单击路由的 **位置** 以启动控制台。
点击使用 OpenShift 登录。
启动 Kiali 控制台。
单击左侧导航窗格中的 **分布式追踪**。
点击使用 OpenShift 登录。
以具有 cluster-admin
角色的用户身份登录 OpenShift Container Platform 命令行界面。如果您使用 Red Hat OpenShift Dedicated,则必须拥有具有 dedicated-admin
角色的帐户。
$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
要使用命令行查询路由的详细信息,请输入以下命令。在此示例中,istio-system
是 Service Mesh 控制平面命名空间。
$ oc get route -n istio-system jaeger -o jsonpath='{.spec.host}'
启动浏览器并导航到 https://<JAEGER_URL>
,其中 <JAEGER_URL>
是您在上一步中发现的路由。
使用您用于访问 OpenShift Container Platform 控制台的相同用户名和密码登录。
如果您已将服务添加到服务网格并生成了跟踪数据,您可以使用过滤器和 **查找跟踪** 按钮来搜索您的跟踪数据。
如果您正在验证控制台安装,则没有跟踪数据显示。
数据平面 是一组智能代理,它们拦截并控制服务网格中服务之间所有入站和出站网络通信。
Red Hat OpenShift Service Mesh 依赖于应用程序 pod 中的代理 sidecar 来为应用程序提供服务网格功能。
Red Hat OpenShift Service Mesh 不会自动将代理 sidecar 注射到 pod 中。您必须选择加入 sidecar 注射。
检查您的应用程序的 Deployment 中是否启用了自动注入。如果为 Envoy 代理启用了自动注入,则在 Deployment
资源的 spec.template.metadata.annotations
下应该有一个 sidecar.istio.io/inject:"true"
注解。
检查您的应用程序的 Deployment 中是否启用了自动注入。如果为 Jaeger agent 启用了自动注入,则在 Deployment
资源中应该有一个 sidecar.jaegertracing.io/inject:"true"
注解。
有关 sidecar 注射的更多信息,请参见 启用自动注入
Envoy 代理拦截服务网格中所有服务的入站和出站流量。Envoy 还收集并报告服务网格的遥测数据。Envoy 部署为同一 pod 中相关服务的 sidecar。
Envoy 访问日志可用于诊断流量故障和流,并有助于端到端流量流分析。
要为所有 istio-proxy 容器启用访问日志记录,请编辑 ServiceMeshControlPlane
(SMCP) 对象以添加日志输出的文件名。
以具有 cluster-admin 角色的用户身份登录 OpenShift Container Platform 命令行界面。输入以下命令。然后,在提示时输入您的用户名和密码。
$ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
切换到您安装 Service Mesh 控制平面的项目,例如 istio-system
。
$ oc project istio-system
编辑 ServiceMeshControlPlane
文件。
$ oc edit smcp <smcp_name>
如以下示例所示,使用 name
指定代理日志的文件名。如果您未为 name
指定值,则不会写入任何日志条目。
apiVersion: maistra.io/v2
kind: ServiceMeshControlPlane
metadata:
name: basic
namespace: istio-system
spec:
proxy:
accessLogging:
file:
name: /dev/stdout #file name
有关 pod 问题故障排除的更多信息,请参见 调查 pod 问题
如果您在使用本文档中描述的过程或 OpenShift Container Platform 时遇到困难,请访问 Red Hat 客户门户。
在客户门户中,您可以
搜索或浏览 Red Hat 知识库中与 Red Hat 产品相关的文章和解决方案。
向 Red Hat 支持提交支持案例。
访问其他产品文档。
要识别集群中的问题,您可以使用 OpenShift 集群管理器 中的 Insights。Insights 提供有关问题的详细信息,以及(如果可用)如何解决问题的相关信息。
如果您有改进此文档的建议或发现错误,请提交 Jira 问题,选择最相关的文档组件。请提供具体的细节,例如章节名称和 OpenShift Container Platform 版本。
Red Hat 知识库Red Hat 知识库 提供丰富的资源,旨在帮助您充分利用 Red Hat 的产品和技术。Red Hat 知识库包含文章、产品文档和视频,概述了安装、配置和使用 Red Hat 产品的最佳实践。此外,您还可以搜索已知问题的解决方案,每个解决方案都提供了简洁的根本原因描述和补救步骤。
如果遇到 OpenShift Container Platform 问题,您可以进行初步搜索,以确定 Red Hat 知识库中是否已存在解决方案。
您拥有 Red Hat 客户门户帐户。
登录Red Hat 客户门户。
点击搜索。
在搜索字段中,输入与问题相关的关键词和字符串,包括:
OpenShift Container Platform 组件(例如etcd)
相关过程(例如安装)
与显式故障相关的警告、错误消息和其他输出
点击Enter键。
可选:选择OpenShift Container Platform产品筛选器。
可选:选择文档内容类型筛选器。
您可以使用oc adm must-gather
CLI 命令收集有关集群的信息,包括与 Red Hat OpenShift Service Mesh 相关的功能和对象。
以具有cluster-admin
角色的用户身份访问集群。
已安装 OpenShift Container Platform CLI(oc
)。
要使用must-gather
收集 Red Hat OpenShift Service Mesh 数据,必须指定 Red Hat OpenShift Service Mesh 镜像。
$ oc adm must-gather --image=registry.redhat.io/openshift-service-mesh/istio-must-gather-rhel8:2.6
要使用must-gather
收集特定服务网格控制平面命名空间的 Red Hat OpenShift Service Mesh 数据,必须指定 Red Hat OpenShift Service Mesh 镜像和命名空间。在此示例中,在gather
之后,请将<namespace>
替换为您的服务网格控制平面命名空间,例如istio-system
。
$ oc adm must-gather --image=registry.redhat.io/openshift-service-mesh/istio-must-gather-rhel8:2.6 gather <namespace>
这将创建一个包含以下项目的本地目录:
Istio Operator 命名空间及其子对象
所有控制平面命名空间及其子对象
属于任何服务网格的所有命名空间及其子对象
所有 Istio 自定义资源定义 (CRD)
所有 Istio CRD 对象,例如给定命名空间中的 VirtualServices
所有 Istio Webhook
为了获得及时的支持,请提供 OpenShift Container Platform 和 Red Hat OpenShift Service Mesh 的诊断信息。
您可以以具有cluster-admin
角色的用户身份访问集群。
您已安装 OpenShift CLI(oc
)。
您拥有 Red Hat 客户门户帐户。
您拥有 Red Hat 标准版或高级版订阅。
登录 Red Hat 客户门户的客户支持页面。
点击获取支持。
在客户支持页面的案例选项卡上
可选:如有需要,更改预填的帐户和所有者详细信息。
选择与您的问题相关的类别,例如错误或缺陷,然后点击继续。
输入以下信息:
在摘要字段中,输入简洁但描述性的问题摘要以及有关所遇到症状的更多详细信息,以及您的期望。
从产品下拉菜单中选择OpenShift Container Platform。
从版本下拉菜单中选择4.17。
查看建议的 Red Hat 知识库解决方案列表,以查找与所报告问题匹配的潜在解决方案。如果建议的文章未解决此问题,请点击继续。
查看更新后的 Red Hat 知识库解决方案列表,以查找与所报告问题匹配的潜在解决方案。在创建案例过程中,随着您提供更多信息,此列表将得到改进。如果建议的文章未解决此问题,请点击继续。
确保显示的帐户信息符合预期,如果不符合预期,请相应地进行修改。
检查自动填充的 OpenShift Container Platform 集群 ID 是否正确。如果不正确,请手动获取您的集群 ID。
要使用 OpenShift Container Platform Web 控制台手动获取您的集群 ID:
导航到主页→概述。
在详细信息部分的集群 ID字段中查找该值。
或者,可以通过 OpenShift Container Platform Web 控制台打开新的支持案例,并自动填充集群 ID。
从工具栏中,导航到(?) 帮助→打开支持案例。
集群 ID值将自动填充。
要使用 OpenShift CLI(oc
)获取您的集群 ID,请运行以下命令:
$ oc get clusterversion -o jsonpath='{.items[].spec.clusterID}{"\n"}'
在出现提示时完成以下问题,然后点击继续:
您遇到了什么问题?您期望发生什么?
定义对您或业务的价值或影响。
您在哪里遇到此行为?什么环境?
此行为何时发生?频率?反复发生?在特定时间?
上传相关的诊断数据文件,然后点击继续。建议首先包含使用oc adm must-gather
命令收集的数据,以及该命令未收集的任何特定于问题的数据。
输入相关的案例管理详细信息,然后点击继续。
预览案例详细信息,然后点击提交。