×

发现控制台地址

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

  • Kiali控制台 - Kiali是Red Hat OpenShift Service Mesh的管理控制台。

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

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

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

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

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

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

  2. 导航到网络路由

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

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

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

  5. 单击使用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是服务网格控制平面项目。运行以下命令

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

    $ 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. HOST/PORT列复制您要访问的控制台的URL到浏览器中以打开控制台。

  5. 单击使用OpenShift登录

访问Kiali控制台

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

要访问Kiali控制台,您必须已安装Red Hat OpenShift Service Mesh和Kiali,并且已对其进行配置。

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

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

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

  2. 点击主页项目

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

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

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

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

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

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

开发者操作步骤
  1. 使用开发者角色登录OpenShift Container Platform 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

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

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

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

  • 您已将 Red Hat 版本的 OpenTelemetry Operator 安装在推荐的命名空间或openshift-operators命名空间中。有关更多信息,请参见“安装 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 加密的 Service Mesh 成员命名空间中配置OpenTelemetryCollector

启用 Service Mesh 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 加密的 Service Mesh 成员命名空间中配置 Red Hat OpenShift 分布式追踪平台 (Tempo)

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

启用 Service Mesh dataPlane mTLS 加密并在 Service Mesh 成员命名空间(例如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 Container Platform 中已经拥有现有的 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 Container Platform Web 控制台中,单击操作符已安装的操作符

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

  3. 单击 Red Hat OpenShift Service Mesh Operator。在Istio Service Mesh 控制平面列中,单击您的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. 点击保存

  5. 点击重新加载以验证 `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 Container Platform Web 控制台中,单击操作符已安装的操作符

  2. 点击项目菜单并选择您安装控制平面的项目,例如istio-system

  3. 单击 Red Hat OpenShift Service Mesh Operator。在Istio Service Mesh 控制平面列中,单击您的ServiceMeshControlPlane资源的名称,例如basic

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

    1. 单击YAML选项卡。

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

      Jaeger 采样示例
      spec:
        tracing:
          sampling: 100
    3. 点击保存

  5. 点击重新加载以验证 `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 Container Platform 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 Container Platform 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 Container Platform 控制台的相同用户名和密码登录。

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

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

有关配置 Jaeger 的更多信息,请参阅 分布式追踪文档

访问 Grafana 控制台

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

操作步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

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

  3. 点击路由

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

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

访问 Prometheus 控制台

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

操作步骤
  1. 登录到 OpenShift Container Platform Web 控制台。

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

  3. 点击路由

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

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

与用户工作负载监控集成

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

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

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

  • 已安装 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-user-workload-monitoring
      namespace: istio-system
    spec:
      external_services:
        prometheus:
          auth:
            type: bearer
            use_kiali_token: true
          query_scope:
            mesh_id: "basic-istio-system"
          thanos_proxy:
            enabled: true
          url: https://thanos-querier.openshift-monitoring.svc.cluster.local:9091
    • 如果您使用 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
  3. 配置 SMCP 以使用外部 Prometheus

    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` spec 将 `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 Container Platform监控会忽略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 Container Platform Web控制台,并检查指标是否可见。