使子路径成为我的k3s后端服务的“根”路径?

问题描述

我有一个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框:

$ 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

与上述结果相同。

解决方法

您需要以以下方式开始普罗米修斯:

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

来自source code

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


对于Altermanager,您需要设置:

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

注意:在这种情况下,请勿在入口使用重写。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...