首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx入口不能正确解析kube-prometheus堆栈的路径。

Nginx入口不能正确解析kube-prometheus堆栈的路径。
EN

Stack Overflow用户
提问于 2021-07-05 12:33:35
回答 1查看 1K关注 0票数 1

我用演示应用程序创建了简单的kubernetes集群。在创建集群时,我安装了带有helm (默认值文件)的prometheus-堆栈和nginx-ingress控制器。

在集群设置好之后,我将创建Ingress对象来公开prometheus、grafana和alertmanager,其中包括:

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: monitoring-ingress
  namespace: monitoring
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - http:
      paths:
      - path: /prometheus(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: prometheus-operated
            port:
              number: 9090
      - path: /alertmanager(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: prometheus-stack-kube-prom-alertmanager
            port:
              number: 9093
      - path: /grafana(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: prometheus-stack-grafana
            port:
              number: 80

当我试图通过<ingress-controller's external IP>/prometheus访问prometheus时,它将解析为<ingress-controller's external IP>/graph,并显示404页未找到。

例如,如果我使用kubectl port-forward svc/prometheus-operated 9090:9090 -n monitoring,我可以毫无问题地到达普罗米修斯。

我可以通过<ingress-controller's external IP>/alertmanager联系到报警经理。路径被解析为<ingress-controller's external IP>/alertmanager/#/alerts

我怀疑重写路径是有问题的,但我想不出是什么原因。

请帮帮我..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-09 06:42:03

最后,我找到了2种解决这个问题的方法。

选项1

我在azure中有DNS区域(我的集群也住在这里),在那里我为grafana、prometheus和指向入口控制器外部IP的警报管理器添加了子域。

当使用Helm图部署kube堆栈时,我在values.yaml文件中为prometheus提供了默认的根路径,并进行了折叠配置:

代码语言:javascript
复制
prometheus:
  prometheusSpec:
    externalUrl: http://prometheus.mydomainname.something

然后,用于(例如Prometheus)的include清单需要包含主机地址,并且只包含根路径"/“。

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: prometheus-new
  namespace: monitoring
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - host: prometheus.mydomainname.something
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: prometheus-stack-kube-prom-prometheus
            port:
              number: 9090

选项2

您还可以为kube堆栈(prometheus、grafana、警报管理器)的每个应用程序提供默认路径:

代码语言:javascript
复制
prometheus:
  prometheusSpec:
    externalUrl: http://mydomainname.something/prometheus

并根据路径进行重定向,并使用:

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: prometheus-new
  namespace: monitoring
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - path: /prometheus
        pathType: Prefix
        backend:
          service:
            name: prometheus-stack-kube-prom-prometheus
            port:
              number: 9090
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68256232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档