×

发现控制台地址

Red Hat OpenShift 服务网格提供以下控制台来查看您的服务网格数据

  • Kiali 控制台 - Kiali 是 Red Hat OpenShift 服务网格的管理控制台。

  • Jaeger 控制台 - Jaeger 是 Red Hat OpenShift 分布式追踪平台的管理控制台。

  • Grafana 控制台 - Grafana 为服务网格管理员提供高级查询和指标分析以及 Istio 数据的仪表盘。可选地,Grafana 可用于分析服务网格指标。

  • Prometheus 控制台 - Red Hat OpenShift 服务网格使用 Prometheus 来存储来自服务的遥测信息。

安装服务网格控制平面时,它会自动为每个已安装组件生成路由。获得路由地址后,您可以访问 Kiali、Jaeger、Prometheus 或 Grafana 控制台来查看和管理您的服务网格数据。

先决条件
  • 必须启用并安装该组件。例如,如果您没有安装分布式追踪,则无法访问 Jaeger 控制台。

从 OpenShift 控制台进行操作
  1. 以具有集群管理员权限的用户身份登录到 OpenShift Dedicated Web 控制台。如果您使用 Red Hat OpenShift Dedicated,则必须拥有具有 `dedicated-admin` 角色的帐户。

  2. 导航到 **网络** → **路由**。

  3. 在 **路由** 页面上,从 **命名空间** 菜单中选择服务网格控制平面项目,例如 `istio-system`。

    **位置** 列显示每个路由的链接地址。

  4. 如有必要,可以使用过滤器查找要访问其路由的组件控制台。单击路由 **位置** 以启动控制台。

  5. 单击 **使用 OpenShift 登录**。

从 CLI 进行操作
  1. 以具有 `cluster-admin` 角色的用户身份登录到 OpenShift Dedicated CLI。如果您使用 Red Hat OpenShift Dedicated,则必须拥有具有 `dedicated-admin` 角色的帐户。

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 切换到服务网格控制平面项目。在此示例中,`istio-system` 是服务网格控制平面项目。运行以下命令

    $ oc project istio-system
  3. 要获取各种 Red Hat OpenShift 服务网格控制台的路由,请运行以下命令

    $ oc get routes

    此命令将返回 Kiali、Jaeger、Prometheus 和 Grafana Web 控制台以及服务网格中任何其他路由的 URL。您应该看到类似于以下内容的输出

    NAME                    HOST/PORT                         SERVICES              PORT    TERMINATION
    bookinfo-gateway        bookinfo-gateway-yourcompany.com  istio-ingressgateway          http2
    grafana                 grafana-yourcompany.com           grafana               <all>   reencrypt/Redirect
    istio-ingressgateway    istio-ingress-yourcompany.com     istio-ingressgateway  8080
    jaeger                  jaeger-yourcompany.com            jaeger-query          <all>   reencrypt
    kiali                   kiali-yourcompany.com             kiali                 20001   reencrypt/Redirect
    prometheus              prometheus-yourcompany.com        prometheus            <all>   reencrypt/Redirect
  4. 将要访问的控制台的 URL 从 `HOST/PORT` 列复制到浏览器中以打开控制台。

  5. 单击 **使用 OpenShift 登录**。

访问 Kiali 控制台

您可以在 Kiali 控制台中查看应用程序的拓扑、健康状况和指标。如果您的服务遇到问题,Kiali 控制台允许您查看数据流过您的服务。您可以查看不同级别(包括抽象应用程序、服务和工作负载)的网格组件的洞察信息。Kiali 还提供应用程序命名空间的实时交互式图形视图。

要访问 Kiali 控制台,您必须已安装 Red Hat OpenShift 服务网格,并且 Kiali 已安装和配置。

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

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

管理员操作步骤
  1. 使用管理员角色登录到 OpenShift Dedicated Web 控制台。

  2. 点击主页项目

  3. 项目页面上,如有必要,使用过滤器查找您的项目名称。

  4. 点击您的项目名称,例如,bookinfo

  5. 项目详情页面上的启动器部分,点击Kiali链接。

  6. 使用您访问OpenShift Dedicated控制台的相同用户名和密码登录到Kiali控制台。

    首次登录Kiali控制台时,您将看到概述页面,其中显示服务网格中您有权查看的所有命名空间。

    如果您正在验证控制台安装,并且尚未将命名空间添加到网格中,则除了istio-system之外可能没有任何其他数据显示。

开发人员流程
  1. 使用开发者角色登录OpenShift Dedicated Web控制台。

  2. 点击项目

  3. 项目详情页面上,如有必要,使用过滤器查找您的项目名称。

  4. 点击您的项目名称,例如,bookinfo

  5. 项目页面上的启动器部分,点击Kiali链接。

  6. 单击 **使用 OpenShift 登录**。

在Kiali控制台中查看服务网格数据

Kiali图表提供强大的服务网格流量可视化功能。拓扑结构将实时请求流量与您的Istio配置信息相结合,以便立即洞察服务网格的行为,让您快速查明问题。多种图表类型允许您将流量可视化为高级服务拓扑、低级工作负载拓扑或应用程序级拓扑。

有多个图表可供选择

  • 应用图表显示所有标记相同的应用程序的聚合工作负载。

  • 服务图表为网格中的每个服务显示一个节点,但排除图表中的所有应用程序和工作负载。它提供高级视图并聚合已定义服务的全部流量。

  • 版本化应用图表为应用程序的每个版本显示一个节点。应用程序的所有版本都分组在一起。

  • 工作负载图表为服务网格中的每个工作负载显示一个节点。此图表不需要您使用应用程序和版本标签。如果您的应用程序不使用版本标签,请使用此图表。

图表节点用各种信息进行装饰,指出了各种路由选项,如虚拟服务和服务入口,以及诸如故障注入和断路器之类的特殊配置。它可以识别mTLS问题、延迟问题、错误流量等等。该图表高度可配置,可以显示流量动画,并具有强大的查找和隐藏功能。

点击图例按钮查看有关图表中显示的形状、颜色、箭头和徽章的信息。

要查看指标摘要,请选择图表中的任何节点或边,以在摘要详细信息面板中显示其指标详细信息。

更改Kiali中的图表布局

Kiali图表的布局可能会根据您的应用程序架构和要显示的数据而有所不同。例如,图表节点的数量及其交互方式会决定Kiali图表的呈现方式。由于不可能创建一种适用于所有情况的单一布局,因此Kiali提供了几种不同的布局供选择。

先决条件
  • 如果您没有安装自己的应用程序,请安装Bookinfo示例应用程序。然后通过多次输入以下命令来生成Bookinfo应用程序的流量。

    $ curl "http://$GATEWAY_URL/productpage"

    此命令模拟用户访问应用程序的productpage微服务。

流程
  1. 启动Kiali控制台。

  2. 单击 **使用 OpenShift 登录**。

  3. 在Kiali控制台中,点击图表以查看命名空间图表。

  4. 命名空间菜单中,选择您的应用程序命名空间,例如bookinfo

  5. 要选择不同的图表布局,请执行以下一项或两项操作

    • 从图表顶部的菜单中选择不同的图表数据分组。

      • 应用图表

      • 服务图表

      • 版本化应用图表(默认)

      • 工作负载图表

    • 从图表底部的图例中选择不同的图表布局。

      • 布局默认 dagre

      • 布局 1 cose-bilkent

      • 布局 2 cola

在Kiali控制台中查看日志

您可以在Kiali控制台中查看工作负载的日志。工作负载详情页面包含一个日志选项卡,该选项卡显示统一的日志视图,其中显示应用程序和代理日志。您可以选择希望Kiali中的日志显示多久刷新一次。

要更改Kiali中显示的日志的日志记录级别,您需要更改工作负载或代理的日志记录配置。

先决条件
  • 已安装和配置服务网格。

  • 已安装和配置Kiali。

  • Kiali控制台的地址。

  • 已将应用程序或Bookinfo示例应用程序添加到网格。

流程
  1. 启动Kiali控制台。

  2. 单击 **使用 OpenShift 登录**。

    Kiali概述页面显示已添加到网格且您有权查看的命名空间。

  3. 点击工作负载

  4. 工作负载页面上,从命名空间菜单中选择项目。

  5. 如有必要,使用过滤器查找您要查看其日志的工作负载。点击工作负载名称。例如,点击ratings-v1

  6. 工作负载详情页面上,点击日志选项卡以查看工作负载的日志。

如果您没有看到任何日志条目,您可能需要调整时间范围或刷新间隔。

在Kiali控制台中查看指标

您可以在Kiali控制台中查看应用程序、工作负载和服务的入站和出站指标。详情页面包括以下选项卡

  • 入站应用程序指标

  • 出站应用程序指标

  • 入站工作负载指标

  • 出站工作负载指标

  • 入站服务指标

这些选项卡显示预定义的指标仪表板,这些仪表板针对相关的应用程序、工作负载或服务级别量身定制。应用程序和工作负载详细信息视图显示请求和响应指标,例如卷、持续时间、大小或TCP流量。服务详细信息视图仅显示入站流量的请求和响应指标。

Kiali允许您通过选择图表维度来自定义图表。Kiali还可以呈现源或目标代理指标报告的指标。为了进行故障排除,Kiali可以将跟踪跨度叠加在指标上。

先决条件
  • 已安装和配置服务网格。

  • 已安装和配置Kiali。

  • Kiali控制台的地址。

  • (可选)已安装和配置分布式跟踪。

流程
  1. 启动Kiali控制台。

  2. 单击 **使用 OpenShift 登录**。

    Kiali概述页面显示已添加到网格且您有权查看的命名空间。

  3. 点击应用程序工作负载服务

  4. 应用程序工作负载服务页面上,从命名空间菜单中选择项目。

  5. 如有必要,使用过滤器查找您要查看其日志的应用程序、工作负载或服务。点击名称

  6. 应用程序详情工作负载详情服务详情页面上,点击入站指标出站指标选项卡以查看指标。

分布式跟踪

分布式跟踪是通过跟踪应用程序中服务调用的路径来跟踪应用程序中各个服务的性能的过程。每次用户在应用程序中采取操作时,都会执行一个请求,该请求可能需要许多服务交互才能产生响应。此请求的路径称为分布式事务。

Red Hat OpenShift Service Mesh使用Red Hat OpenShift分布式跟踪平台,允许开发人员查看微服务应用程序中的调用流程。

配置Red Hat OpenShift分布式跟踪平台(Tempo)和Red Hat版本的OpenTelemetry

您可以通过在ServiceMeshControlPlane中的spec.meshConfig.extensionProviders规范中追加命名元素和opentelemetry提供程序,将跟踪数据暴露给Red Hat OpenShift分布式跟踪平台(Tempo)。然后,遥测自定义资源会配置Istio代理以收集跟踪跨度并将它们发送到OpenTelemetry Collector端点。

您可以在网格命名空间中创建一个Red Hat构建的OpenTelemetry实例,并将其配置为将跟踪数据发送到跟踪平台后端服务。

先决条件
  • 您已在tracing-system命名空间中使用Red Hat Tempo Operator创建了一个TempoStack实例。有关更多信息,请参见“安装Red Hat OpenShift分布式跟踪平台(Tempo)”。

  • 您已在推荐的命名空间或openshift-operators命名空间中安装了Red Hat构建的OpenTelemetry Operator。有关更多信息,请参见“安装Red Hat构建的OpenTelemetry”。

  • 如果使用的是Red Hat OpenShift Service Mesh 2.5或更早版本,请将ServiceMeshControlPlane资源的spec.tracing.type参数设置为None,以便可以将跟踪数据发送到OpenTelemetry Collector。

流程
  1. 在网格命名空间中创建一个OpenTelemetry Collector实例。此示例使用bookinfo命名空间。

    OpenTelemetry Collector配置示例
    apiVersion: opentelemetry.io/v1alpha1
    kind: OpenTelemetryCollector
    metadata:
      name: otel
      namespace: bookinfo  (1)
    spec:
      mode: deployment
      config: |
        receivers:
          otlp:
            protocols:
              grpc:
                endpoint: 0.0.0.0:4317
        exporters:
          otlp:
            endpoint: "tempo-sample-distributor.tracing-system.svc.cluster.local:4317" (2)
            tls:
              insecure: true
        service:
          pipelines:
            traces:
              receivers: [otlp]
              processors: []
              exporters: [otlp]
    1 ServiceMeshMemberRoll成员列表中包含命名空间。
    2 在此示例中,TempoStack实例运行在tracing-system命名空间中。您不必在ServiceMeshMemberRoll成员列表中包含TempoStack命名空间,例如`tracing-system`。
    • 在一个ServiceMeshMemberRoll成员命名空间中创建OpenTelemetry Collector的单个实例。

    • 您可以通过将sidecar.istio.io/inject: 'true'添加到OpenTelemetryCollector资源中,将otel-collector作为网格的一部分添加。

  2. 检查otel-collector pod日志并验证pod是否正在运行。

    otel-collector pod日志检查示例
    $ oc logs -n bookinfo  -l app.kubernetes.io/name=otel-collector
  3. istio-system命名空间中创建或更新现有的ServiceMeshControlPlane自定义资源 (CR)。

    SMCP自定义资源示例
    kind: ServiceMeshControlPlane
    apiVersion: maistra.io/v2
    metadata:
      name: basic
      namespace: istio-system
    spec:
      addons:
        grafana:
          enabled: false
        kiali:
          enabled: true
        prometheus:
          enabled: true
      meshConfig:
        extensionProviders:
          - name: otel
            opentelemetry:
              port: 4317
              service: otel-collector.bookinfo.svc.cluster.local
      policy:
        type: Istiod
      telemetry:
        type: Istiod
      version: v2.6

    从SMCP 2.5升级到2.6时,请将spec.tracing.type参数设置为None

    SMCP spec.tracing.type参数示例
    spec:
      tracing:
        type: None
  4. istio-system命名空间中创建一个Telemetry资源。

    Telemetry资源示例
    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
      name: mesh-default
      namespace: istio-system
    spec:
      tracing:
      - providers:
        - name: otel
        randomSamplingPercentage: 100
  5. 验证istiod日志。

  6. 配置Kiali资源规范以启用Kiali工作负载跟踪仪表板。您可以使用此仪表板查看跟踪查询结果。

    Kiali资源示例
    apiVersion: kiali.io/v1alpha1
    kind: Kiali
    # ...
    spec:
      external_services:
        tracing:
          query_timeout: 30 (1)
          enabled: true
          in_cluster_url: 'http://tempo-sample-query-frontend.tracing-system.svc.cluster.local:16685'
          url: '[Tempo query frontend Route url]'
          use_grpc: true (2)
    1 默认query_timeout整数值为30秒。如果将值设置为大于30秒,则必须更新Kiali CR中的.spec.server.write_timeout,并将注释haproxy.router.openshift.io/timeout=50s添加到Kiali路由。.spec.server.write_timeouthaproxy.router.openshift.io/timeout=都必须大于query_timeout
    2 如果您没有使用默认的HTTP或gRPC端口,请将in_cluster_url:端口替换为您自定义的端口。

    Kiali 1.73使用Jaeger Query API,这会导致响应时间较长,具体取决于Tempo资源限制。如果您在Kiali UI中看到Could not fetch spans错误消息,请检查您的Tempo配置或减少Kiali中每个查询的限制。

  7. 向您的应用程序发送请求。

  8. 验证istiod pod日志和otel-collector pod日志。

在mTLS加密的服务网格成员命名空间中配置OpenTelemetryCollector

启用服务网格dataPlane mTLS加密后,所有流量都将进行TLS加密。

为了使网格能够与OpenTelemetryCollector服务通信,请通过为OpenTelemetryCollector服务应用DestinationRule来禁用TLS trafficPolicy

DestinationRule Tempo CR示例
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: otel-disable-tls
spec:
  host: "otel-collector.bookinfo.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: DISABLE

在mTLS加密的服务网格成员命名空间中配置Red Hat OpenShift分布式跟踪平台(Tempo)

如果您在非服务网格成员命名空间中创建了TempoStack实例,则不需要此额外的DestinationRule配置。

启用服务网格dataPlane mTLS加密并在服务网格成员命名空间(例如tracing-system-mtls)中创建TempoStack实例后,所有流量都将进行TLS加密。Tempo分布式服务不期望此加密,并返回TLS错误。

要修复TLS错误,请通过为Tempo和Kiali应用DestinationRule来禁用TLS trafficPolicy

DestinationRule Tempo示例
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: tempo
  namespace: tracing-system-mtls
spec:
  host: "*.tracing-system-mtls.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: DISABLE
DestinationRule Kiali示例
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: kiali
  namespace: istio-system
spec:
  host: kiali.istio-system.svc.cluster.local
  trafficPolicy:
    tls:
      mode: DISABLE

连接现有的分布式跟踪Jaeger实例

如果您在OpenShift Dedicated中已经拥有现有的Red Hat OpenShift分布式跟踪平台(Jaeger)实例,则可以将您的ServiceMeshControlPlane资源配置为使用该实例进行分布式跟踪平台。

从Red Hat OpenShift Service Mesh 2.5开始,Red Hat OpenShift分布式跟踪平台(Jaeger)和OpenShift Elasticsearch Operator已弃用,将在将来的版本中删除。Red Hat将在当前版本生命周期内为这些功能提供错误修复和支持,但这些功能将不再接收增强功能,并将被删除。作为Red Hat OpenShift分布式跟踪平台(Jaeger)的替代方案,您可以改用Red Hat OpenShift分布式跟踪平台(Tempo)。

先决条件
  • 已安装并配置Red Hat OpenShift分布式跟踪平台实例。

流程
  1. 在OpenShift Dedicated Web控制台中,单击**Operators** → **Installed Operators**。

  2. 单击**Project**菜单,然后选择安装服务网格控制平面的项目,例如**istio-system**。

  3. 单击Red Hat OpenShift Service Mesh Operator。在**Istio Service Mesh Control Plane**列中,单击您的ServiceMeshControlPlane资源的名称,例如basic

  4. 将您的分布式跟踪平台(Jaeger)实例的名称添加到ServiceMeshControlPlane

    1. 单击**YAML**选项卡。

    2. 将您的分布式跟踪平台(Jaeger)实例的名称添加到您的ServiceMeshControlPlane资源中的spec.addons.jaeger.name。在下面的示例中,distr-tracing-production是分布式跟踪平台(Jaeger)实例的名称。

      分布式跟踪配置示例
      spec:
        addons:
          jaeger:
            name: distr-tracing-production
    3. 单击**Save**。

  5. 单击**Reload**以验证ServiceMeshControlPlane资源是否已正确配置。

调整采样率

跟踪是服务网格中服务之间的执行路径。跟踪由一个或多个跨度组成。跨度是具有名称、开始时间和持续时间的逻辑工作单元。采样率决定跟踪持久化的频率。

Envoy代理采样率默认设置为对服务网格中100%的跟踪进行采样。高采样率会消耗集群资源和性能,但在调试问题时非常有用。在生产环境中部署Red Hat OpenShift Service Mesh之前,请将值设置为较小的跟踪比例。例如,将spec.tracing.sampling设置为100以采样1%的跟踪。

将Envoy代理采样率配置为表示0.01%增量的比例整数。

在基本安装中,spec.tracing.sampling设置为10000,这会采样100%的跟踪。例如

  • 将值设置为10会采样0.1%的跟踪。

  • 将值设置为500会采样5%的跟踪。

Envoy代理采样率适用于可用于服务网格并使用Envoy代理的应用程序。此采样率决定Envoy代理收集和跟踪的数据量。

Jaeger远程采样率适用于服务网格外部且不使用Envoy代理的应用程序,例如数据库。此采样率决定分布式跟踪系统收集和存储的数据量。

流程
  1. 在OpenShift Dedicated Web控制台中,单击**Operators** → **Installed Operators**。

  2. 单击**Project**菜单,然后选择安装控制平面的项目,例如**istio-system**。

  3. 单击Red Hat OpenShift Service Mesh Operator。在**Istio Service Mesh Control Plane**列中,单击您的ServiceMeshControlPlane资源的名称,例如basic

  4. 要调整采样率,请为spec.tracing.sampling设置不同的值。

    1. 单击**YAML**选项卡。

    2. 在您的ServiceMeshControlPlane资源中设置spec.tracing.sampling的值。在下面的示例中,将其设置为100

      Jaeger 采样示例
      spec:
        tracing:
          sampling: 100
    3. 单击**Save**。

  5. 单击**Reload**以验证ServiceMeshControlPlane资源是否已正确配置。

访问 Jaeger 控制台

要访问 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)。

从 OpenShift 控制台进行操作
  1. 以具有集群管理员权限的用户身份登录到 OpenShift Dedicated Web 控制台。如果您使用 Red Hat OpenShift Dedicated,则必须拥有具有 `dedicated-admin` 角色的帐户。

  2. 导航到 **网络** → **路由**。

  3. 在 **路由** 页面上,从 **命名空间** 菜单中选择服务网格控制平面项目,例如 `istio-system`。

    **位置** 列显示每个路由的链接地址。

  4. 如有必要,请使用过滤器查找jaeger路由。单击路由的**位置**以启动控制台。

  5. 单击 **使用 OpenShift 登录**。

Kiali 控制台的操作步骤
  1. 启动Kiali控制台。

  2. 单击左侧导航窗格中的**分布式追踪**。

  3. 单击 **使用 OpenShift 登录**。

从 CLI 进行操作
  1. 以具有 `cluster-admin` 角色的用户身份登录到 OpenShift Dedicated CLI。如果您使用 Red Hat OpenShift Dedicated,则必须拥有具有 `dedicated-admin` 角色的帐户。

    $ oc login --username=<NAMEOFUSER> https://<HOSTNAME>:6443
  2. 要使用命令行查询路由的详细信息,请输入以下命令。在此示例中,istio-system是服务网格控制平面命名空间。

    $ oc get route -n istio-system jaeger -o jsonpath='{.spec.host}'
  3. 启动浏览器并导航到https://<JAEGER_URL>,其中<JAEGER_URL>是您在上一步中发现的路由。

  4. 使用您用于访问 OpenShift Dedicated 控制台的相同用户名和密码登录。

  5. 如果您已将服务添加到服务网格并已生成跟踪,则可以使用过滤器和**查找跟踪**按钮来搜索您的跟踪数据。

    如果您正在验证控制台安装,则没有跟踪数据显示。

访问 Grafana 控制台

Grafana 是一款分析工具,您可以使用它来查看、查询和分析您的服务网格指标。在此示例中,istio-system是服务网格控制平面命名空间。要访问 Grafana,请执行以下操作

流程
  1. 登录到 OpenShift Dedicated Web 控制台。

  2. 单击**Project**菜单,然后选择安装服务网格控制平面的项目,例如**istio-system**。

  3. 单击**路由**。

  4. 单击**Grafana**行的**位置**列中的链接。

  5. 使用您的 OpenShift Dedicated 凭据登录到 Grafana 控制台。

访问 Prometheus 控制台

Prometheus 是一款监控和警报工具,您可以使用它来收集有关微服务的多分量数据。在此示例中,istio-system是服务网格控制平面命名空间。

流程
  1. 登录到 OpenShift Dedicated Web 控制台。

  2. 单击**Project**菜单,然后选择安装服务网格控制平面的项目,例如**istio-system**。

  3. 单击**路由**。

  4. 单击**Prometheus**行的**位置**列中的链接。

  5. 使用您的 OpenShift Dedicated 凭据登录到 Prometheus 控制台。

与用户工作负载监控集成

默认情况下,Red Hat OpenShift Service Mesh (OSSM) 会安装带有专用 Prometheus 实例的服务网格控制平面 (SMCP),用于从网格收集指标。但是,生产系统需要更高级的监控系统,例如针对用户定义项目的 OpenShift Dedicated 监控。

以下步骤说明如何将服务网格与用户工作负载监控集成。

先决条件
  • 已启用用户工作负载监控。

  • 已安装 Red Hat OpenShift Service Mesh Operator 2.4。

  • 已安装 Kiali Operator 1.65。

流程
  1. cluster-monitoring-view角色授予 Kiali 服务帐户

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: kiali-monitoring-rbac
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-monitoring-view
    subjects:
    - kind: ServiceAccount
      name: kiali-service-account
      namespace: istio-system
  2. 为用户工作负载监控配置 Kiali

    apiVersion: kiali.io/v1alpha1
    kind: Kiali
    metadata:
      name: kiali
      namespace: istio-system
    spec:
      auth:
        strategy: openshift
      deployment:
        accessible_namespaces:   #restricted setting for OSD
          - istio-system
        image_pull_policy: ''
        ingress_enabled: true
        namespace: istio-system
    • 如果您使用 Istio Operator 2.4,请使用此配置为用户工作负载监控配置 Kiali

      apiVersion: kiali.io/v1alpha1
      kind: Kiali
      metadata:
        name: kiali-user-workload-monitoring
        namespace: istio-system
      spec:
        external_services:
          istio:
            config_map_name: istio-<smcp-name>
            istio_sidecar_injector_config_map_name: istio-sidecar-injector-<smcp-name>
            istiod_deployment_name: istiod-<smcp-name>
            url_service_version: 'http://istiod-<smcp-name>.istio-system:15014/version'
          prometheus:
            auth:
              token: secret:thanos-querier-web-token:token
              type: bearer
              use_kiali_token: false
            query_scope:
              mesh_id: "basic-istio-system"
            thanos_proxy:
              enabled: true
            url: https://thanos-querier.openshift-monitoring.svc.cluster.local:9091
        version: v1.65

      OpenShift Dedicated 对您可以在何处创建资源施加了额外的限制,并且不允许您在 Red Hat 托管的命名空间中创建 Kiali 资源。

      这意味着以下spec.deployment.accessible_namespaces的常用设置在 OpenShift Dedicated 集群中不允许

      • ['**'](所有命名空间)

      • default

      • codeready-*

      • openshift-*

      • redhat-*

      验证错误消息提供了所有受限命名空间的完整列表。

  3. 为外部 Prometheus 配置 SMCP

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
      namespace: istio-system
    spec:
      addons:
        prometheus:
          enabled: false (1)
        grafana:
          enabled: false (2)
        kiali:
          name: kiali-user-workload-monitoring
      meshConfig:
        extensionProviders:
        - name: prometheus
          prometheus: {}
    1 禁用 OSSM 提供的默认 Prometheus 实例。
    2 禁用 Grafana。它不支持外部 Prometheus 实例。
  4. 应用自定义网络策略以允许来自监控命名空间的入站流量

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: user-workload-access
      namespace: istio-system (1)
    spec:
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              network.openshift.io/policy-group: monitoring
      podSelector: {}
      policyTypes:
      - Ingress
    1 自定义网络策略必须应用于所有命名空间。
  5. 应用Telemetry对象以启用 Istio 代理中的流量指标

    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
      name: enable-prometheus-metrics
      namespace: istio-system (1)
    spec:
      selector: (2)
        matchLabels:
          app: bookinfo
      metrics:
      - providers:
        - name: prometheus
    1 在控制平面命名空间中创建的Telemetry对象应用于网格中的所有工作负载。要仅将遥测应用于一个命名空间,请在目标命名空间中创建该对象。
    2 可选:设置selector.matchLabels规范将Telemetry对象应用于目标命名空间中的特定工作负载。
  6. 应用ServiceMonitor对象以监控 Istio 控制平面

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: istiod-monitor
      namespace: istio-system (1)
    spec:
      targetLabels:
      - app
      selector:
        matchLabels:
          istio: pilot
      endpoints:
      - port: http-monitoring
        interval: 30s
        relabelings:
        - action: replace
          replacement: "basic-istio-system" (2)
          targetLabel: mesh_id
    1 在 Istio 控制平面命名空间中创建此ServiceMonitor对象,因为它监控 Istiod 服务。在此示例中,命名空间为istio-system
    2 字符串"basic-istio-system"是 SMCP 名称及其命名空间的组合,但只要每个在集群中使用用户工作负载监控的网格的标签唯一,就可以使用任何标签。步骤 2 中配置的 Kiali 资源的spec.prometheus.query_scope需要与该值匹配。

    如果只有一个网格使用用户工作负载监控,则mesh_id重新标记和 Kiali 资源中的spec.prometheus.query_scope字段都是可选的(但是如果删除了mesh_id标签,则应删除此处提供的query_scope字段)。

    如果集群上的多个网格实例可能使用用户工作负载监控,则需要mesh_id重新标记和 Kiali 资源中的spec.prometheus.query_scope字段。这确保 Kiali 只看到与其关联的网格的指标。

    如果您没有部署 Kiali,您仍然可以应用mesh_id重新标记,以便可以区分不同网格的指标。

  7. 应用PodMonitor对象以从 Istio 代理收集指标

    apiVersion: monitoring.coreos.com/v1
    kind: PodMonitor
    metadata:
      name: istio-proxies-monitor
      namespace: istio-system (1)
    spec:
      selector:
        matchExpressions:
        - key: istio-prometheus-ignore
          operator: DoesNotExist
      podMetricsEndpoints:
      - path: /stats/prometheus
        interval: 30s
        relabelings:
        - action: keep
          sourceLabels: [__meta_kubernetes_pod_container_name]
          regex: "istio-proxy"
        - action: keep
          sourceLabels: [__meta_kubernetes_pod_annotationpresent_prometheus_io_scrape]
        - action: replace
          regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})
          replacement: '[$2]:$1'
          sourceLabels: [__meta_kubernetes_pod_annotation_prometheus_io_port,
          __meta_kubernetes_pod_ip]
          targetLabel: __address__
        - action: replace
          regex: (\d+);((([0-9]+?)(\.|$)){4})
          replacement: $2:$1
          sourceLabels: [__meta_kubernetes_pod_annotation_prometheus_io_port,
          __meta_kubernetes_pod_ip]
          targetLabel: __address__
        - action: labeldrop
          regex: "__meta_kubernetes_pod_label_(.+)"
        - sourceLabels: [__meta_kubernetes_namespace]
          action: replace
          targetLabel: namespace
        - sourceLabels: [__meta_kubernetes_pod_name]
          action: replace
          targetLabel: pod_name
        - action: replace
          replacement: "basic-istio-system" (2)
          targetLabel: mesh_id
    1 由于 OpenShift Dedicated 监控忽略ServiceMonitorPodMonitor对象中的namespaceSelector规范,因此必须在所有网格命名空间(包括控制平面命名空间)中应用PodMonitor对象。
    2 字符串"basic-istio-system"是 SMCP 名称及其命名空间的组合,但只要每个在集群中使用用户工作负载监控的网格的标签唯一,就可以使用任何标签。步骤 2 中配置的 Kiali 资源的spec.prometheus.query_scope需要与该值匹配。

    如果只有一个网格使用用户工作负载监控,则mesh_id重新标记和 Kiali 资源中的spec.prometheus.query_scope字段都是可选的(但是如果删除了mesh_id标签,则应删除此处提供的query_scope字段)。

    如果集群上的多个网格实例可能使用用户工作负载监控,则需要mesh_id重新标记和 Kiali 资源中的spec.prometheus.query_scope字段。这确保 Kiali 只看到与其关联的网格的指标。

    如果您没有部署 Kiali,您仍然可以应用mesh_id重新标记,以便可以区分不同网格的指标。

  8. 打开 OpenShift Dedicated Web 控制台,并检查指标是否可见。