2

我有一个k3s包含 Prometheus 和 Alertmanager 部署的集群,并Ingress为每个集群设置了一个资源。我的初始设置分别是prometheus.domain.comalermanager.domain.com,并且这些都按预期工作。

但是,我想将它分别切换到domain.com/prometheusdomain.com/alertmanager,而我研究的选项不起作用。

目标 让我的 Prometheus 服务domain.com/prometheus作为我的 Prometheus 路径的“根”工作,因此domain.com/prometheus/graph根据其默认行为自动重定向到 ,并且 Prometheus 下的所有子路径(警报、配置、管理 API)都遵循相同的行为。

尝试#1

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  app: Prometheus
  annotations:
    traefik.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
    - http:
        paths:
          - path: /prometheus($|/)(.*)
            backend:
              serviceName: prometheus
              servicePort: 9090

通过 SSH 连接到托管我的 k3s 集群的 Vagrant box:

$ kubectl get ingress
NAME         CLASS             HOSTS         ADDRESS         PORTS
prometheus   <none>            *             192.168.0.200   80

$ curl 192.168.0.200/prometheus
404 page not found

$ curl 192.168.0.200/prometheus/graph
404 page not found

尝试#2

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  app: Prometheus
  annotations:
    traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
spec:
  rules:
    - http:
        paths:
          - path: /prometheus
            backend:
              serviceName: prometheus
              servicePort: 9090

结果与上述相同。

4

1 回答 1

1

您需要使用以下命令启动普罗米修斯:

--web.route-prefix="http://example.com/prometheus"

源代码

web.external-url", "外部可访问 Prometheus 的 URL(例如,如果 Prometheus 通过反向代理提供服务)。用于生成返回 Prometheus 本身的相对和绝对链接。如果 URL 有路径部分,它将用于为 Prometheus 服务的所有 HTTP 端点添加前缀。如果省略,将自动派生相关的 URL 组件。


对于altermanager,您需要设置:

--alertmanager.url=http://example.com/alertmanager

注意:在这种情况下,不要在入口中使用重写。

于 2020-09-17T12:46:11.297 回答