Prometheus

    Istio 提供了一个简单地安装示例来快速安装、运行 Prometheus:

    这将会在您的集群中部署 Prometheus。这仅用于展示,不会针对性能和安全性进行调整。

    快速开始的配置仅适合小型集群和短期监控,不适用于大型网格和长时间的监控。特别的是,增加标签将会增加指标的基数,需要大量内存。并且,当尝试确定流量随时间的趋势变化,需要获取历史数据。

    阅读 Prometheus 文档来在您的环境中安装、部署 Prometheus。阅读 来了解更多关于配置、部署 Prometheus 抓取更多 Istio 指标的信息。

    在 Istio 网格内,每个组件都有一个对外暴露指标的接口。Prometheus 通过抓取这些接口的指标来收集数据。

    通过 Prometheus 配置文件进行配置,该配置可以控制要查询的接口、端口、路径、TLS 配置等。

    1. 控制平面( Deployment)
    2. 入口和出口网关
    3. Ingress and Egress gateways
    4. Envoy sidecar
    5. 用户应用程序(如果这些应用程序向 Prometheus 暴露指标的话)

    为了简化指标配置,Istio 提供了两种操作模式:

    为了简化配置,Istio 可以通过 prometheus.io 注解来控制指标的获取。他允许 Istio 通过 的 charts 使用标准配置获取数据,开箱即用。

    尽管 prometheus.io 并不是 Prometheus 的核心注解,但是该注解已经成为获取指标的标准注解。

    该选项默开启但是允许在安装时通过 --set meshConfig.enablePrometheusMerge=false 关闭。当开启后,会将适当的 prometheus.io 注解添加到所有的数据平面容器中来设置指标收集。如果这些注解已经存在,他们将会被覆盖。使用该选项,Envoy sidecar 将 Istio 的指标与应用程序的指标合并。合并的指标将由 /stats/prometheus:15020 收集。

    该选项以纯文本的形式显示所有指标。

    以下情况,该选项无法满足:

    • 您需要使用 TLS 收集指标。
    • 您的 Prometheus Deployment 没有配置通过 prometheus.io 注解抓取指标。

    要将现有的 Prometheus 示例配置为抓取 Istio 生成的统计信息,需要增加一些 Job。

    • 要获取 Istiod 的状态,可以添加以下示例来抓取 http-monitoring 端口:
    1. - job_name: 'istiod'
    2. - role: endpoints
    3. namespaces:
    4. names:
    5. - istio-system
    6. relabel_configs:
    7. - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
    8. action: keep
    9. regex: istiod;http-monitoring
    • 要抓取 Envoy 的状态,包括 Sidecar 的代理和网关的代理,可以将以下 Job 放在 -envoy-prom 的结尾,添加到收集端口:
    • 对于应用程序的状态,如果禁止 ,您现有的收集配置仍然可以使用。否则需要将 Prometheus 配置为使用 Istio 证书收集

    TLS 设置

    控制平面,网关和 Envoy Sidecar 指标将会作为纯文本收集。但是,应用程序指标将遵循 Istio 为任何工作负载进行的配置。特别是如果启用了 Strict mTLS,则需要将 Prometheus 配置为使用 Istio 证书收集指标。

    为 Prometheus 设置 Istio 证书的另一种方式是 Sidecar,该 Sidecar 将会转发 SDS 证书并将其输出到可以与 Prometheus 共享的 volume 中。然而,Sidecar 不应该拦截 Prometheus 的请求,因为 Prometheus 的端口的访问模式与 Istio 的 Sidecar 代理模型不兼容。

    为此,请在 Prometheus 服务器容器上挂载证书 volume:

    1. - name: prometheus-server
    2. volumeMounts:
    3. mountPath: /etc/prom-certs/
    4. name: istio-certs
    5. volumes:
    6. - emptyDir:
    7. medium: Memory
    8. name: istio-certs

    然后,将一下注解添加到 Prometheus Deployment 的 Pod Template 中,并且使用 。这会将 Sidecar 配置为共享 volume 并写入证书,但是不会配置流量的重定向。

    最后,按如下所示的设置收集 TLS 指标:

    1. scheme: https
    2. tls_config:
    3. ca_file: /etc/prom-certs/root-cert.pem
    4. cert_file: /etc/prom-certs/cert-chain.pem