我有一个k3s
集群,内部部署了Prometheus和Alertmanager,并为每个集群设置了Ingress
资源。我的初始设置分别为prometheus.domain.com
和alermanager.domain.com
,它们按预期工作。
但是,我想分别将其切换为domain.com/prometheus
和domain.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
与上述结果相同。
答案 0 :(得分:1)
您需要以以下方式开始普罗米修斯:
--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
注意:在这种情况下,请勿在入口使用重写。