由于 Istio-sidecar 路由失败,无法从 Prometheus 访问 Alertmanagers Endpoint

问题描述

设置: 我有一个小型 aws k8s 集群,其中基础设施组件部署为 helm charts。 其中一个组件是很棒的 Prometheus 图表(参见 here)。 组件之间的网络通信应该使用 Istio Service Mesh 进行配置。

问题: Prometheus 找到 kube-prometheus-alertmanager k8s 服务的单个端点,然后继续尝试根据端点的 IP 地址与其通信,而不是将其引用为“kube-prometheus-alertmanager..svc.cluster.local”主机。

由于 istio sidecar 在同一个节点上并不真正知道 IP,但是已经为 kube-prometheus-alertmanager..svc.cluster.local 主机定义了出站路由,所以它没有找到对应的路由,一直告诉prometheus 容器,由于可以找到相应的路由,因此只能提供 404 HTTP 响应。因此,在 prometheus POD 的 istio-proxy sidecar 容器中,我们看到了如下几行:

[2021-01-22T15:08:54.492Z] "POST /api/v2/alerts HTTP/1.1" 404 NR "-" 0 0 0 - "-" "Prometheus/2.24.0" "62c4ab73-1111-2222-b7d0-9aea26621ec0" "<ENDPOINT_IP>:9093" "-" - - <ENDPOINT_IP>:9093 <kube-prometheus-prometheus_IP>:37178 - -

其中 404 NR "-" 清楚地表示 side-car 容器在路由请求时存在的问题。

愿望: 很高兴听到使用 Endpoints 保留 Prometheus 的最佳策略,但要与 Istio 成为朋友。

提前致谢!

解决方法

我刚刚遇到了同样的问题,所有到 Alertmanager Pod IP 的内部流量都得到了 404。

解决方案:在kube-prometheus-stack values.yml

设置

alertmanager.alertmanagerSpec.listenLocal=True

不知道为什么会这样,但确实有效。

,

正在解决这个问题here 如果有人提出了一个 hacky 解决方案(除了在 Prom 和 Alertmgmt 上禁用 Istio sidecar),请发布它!