访问prometheus服务器的入口路由规则



我已经在kubernetes(1.17.3(上部署了prometheus服务器(2.13.1(,我可以在http://my.prom.com:9090上访问它

但我想在http://my.prom.com:9090/prometheus上访问它,所以我添加了以下入口规则,但它不是工作

首次尝试:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/app-root: /prometheus
name: approot
namespace: default
spec:
rules:
- host: my.prom.com
http:
paths:
- backend:
serviceName: prometheus-svc
servicePort: 9090
path: /

这导致404错误

第二次尝试:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: rewrite
namespace: default
spec:
rules:
- host: my.prom.com
http:
paths:
- backend:
serviceName: prometheus-svc
servicePort: 9090
path: /prometheus(/|$)(.*)

现在,当我在浏览器中访问URLhttp://my.prom.com:9090/prometheus时,它被更改为http://my.prom.com:9090/graph并显示404错误

普罗米修斯不知道你想要实现什么,这就是为什么它重定向到未知的目的地。

你必须告诉普罗米修斯接受新道路上的交通,这在这里和这里都可以看到。

突出显示第二个链接,您必须在prometheus部署中包括- "--web.route-prefix=/"- "--web.external-url=http://my.prom.com:9090/prometheus"

然后我不得不修改prometheus部署以接受流量在新的路径上(/prom(。这已包含在"安全"中Prometheus API和UI端点使用基本Auth文档:

在您的环境中,它应该是这样的:

> grep web deploy.yaml 
- "--web.enable-lifecycle"
- "--web.route-prefix=/"
- "--web.external-url=http://my.prom.com:9090/prometheus"

我在通过社区Helm图表部署普罗米修斯时遇到了这个问题,我认为在这里与其他人分享我的发现可能会有所帮助:https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus

我的覆盖值.yaml看起来像这样:

server:
prefixURL: /
baseURL: https://my-cluster-external-hostname/prometheus
ingress:
enabled: true
ingressClassName: nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: "/$2"
path: "/prometheus(/|$)(.*)"
hosts:
- my-cluster-external-hostname
tls:
- secretName: cluster-tls-secret
hosts:
- my-cluster-external-hostname
service:
servicePort: 9090

现在,prometheus-server的最终部署规范以以下参数结束(注意顺序,特别是--web.route-prefix位于顶部(:

--web.route-prefix=/
--storage.tsdb.retention.time=15d
--config.file=/etc/config/prometheus.yml
--storage.tsdb.path=/data
--web.console.libraries=/etc/prometheus/console_libraries
--web.console.templates=/etc/prometheus/consoles
--web.enable-lifecycle
--web.external-url=https://my-cluster-external-hostname/prometheus

这不起作用,因为/-/健康端点导致404(来自kubectl describe pod prometheus-server(:

Warning  Unhealthy  9s (x9 over 49s)  kubelet            Readiness probe failed: HTTP probe failed with statuscode: 404
Warning  Unhealthy  9s (x3 over 39s)  kubelet            Liveness probe failed: HTTP probe failed with statuscode: 404

经过多次尝试和错误,我意识到这些论点的顺序似乎很重要,所以我更改了Helm图的值。yaml如下:

server:
# prefixURL: /   # <-- commented out
# baseURL: https://my-cluster-external-hostname/prometheus  # <-- commented out
extraFlags:  # <-- added this section to specify my args manually
- web.enable-lifecycle
- web.route-prefix=/
- web.external-url=https://my-cluster-external-hostname/prometheus
ingress:
enabled: true
ingressClassName: nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: "/$2"
path: "/prometheus(/|$)(.*)"
hosts:
- my-cluster-external-hostname
tls:
- secretName: cluster-tls-secret
hosts:
- my-cluster-external-hostname
service:
servicePort: 9090

由此产生的部署values.yaml将参数按明显正确的顺序排列,这使得健康检查端点(内部(可用,并允许从集群外部访问Prometheus。请注意--web.route-prefix现在的位置。

--storage.tsdb.retention.time=15d
--config.file=/etc/config/prometheus.yml
--storage.tsdb.path=/data
--web.console.libraries=/etc/prometheus/console_libraries
--web.console.templates=/etc/prometheus/consoles
--web.enable-lifecycle
--web.route-prefix=/
--web.external-url=https://my-cluster-external-hostname/prometheus

我还向社区普罗米修斯图表提交了一个bug:https://github.com/prometheus-community/helm-charts/issues/1594

添加deploy-prometheus.yml

args:
- --web.enable-lifecycle
- --web.route-prefix=/
- --web.external-url=https://localhost:9090/prometheus/

在VirtualService中普罗米修斯

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: prometheus-vs
namespace: istio-system
spec:
hosts:
- "*"
gateways:
- prometheus-gateway
http:
- match:
- uri:
prefix: /prometheus/
rewrite:
uri: /
route:
- destination:
host: prometheus
port:
number: 9090

相关内容

  • 没有找到相关文章

最新更新