【问题标题】:Nginx ingress is not resolving path properly for kube-prometheus-stackNginx 入口没有正确解析 kube-prometheus-stack 的路径
【发布时间】:2021-09-16 05:46:31
【问题描述】:

我使用演示应用程序创建了简单的 kubernetes 集群。 创建集群时,我使用 helm(默认值文件)安装了 prometheus-stack 和 nginx-ingress-controller。

集群建立后,我创建 Ingress 对象来公开 prometheus、grafana 和 alertmanager:

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 联系到alertmanager。路径解析为<ingress-controller's external IP>/alertmanager/#/alerts

我怀疑路径重写有问题,但不知道是什么问题。

请帮忙...

【问题讨论】:

  • 你好@Artek。请将您的nginx.ingress.kubernetes.io/rewrite-target: 中的$1 更改为$2,并让我知道结果。
  • 嗨@WytrzymałyWiktor,我将$ 1更改为$ 2,更改后的状态是我可以在键入/alertmanager时访问alertmanager,但我无法访问grafana和prometheus。我注意到的是,当输入<external IP>/prometheus 时,它会解析为<external IP>/graph(对于 grafana /login),因为那是 prometheus 的“主页”,但随后显示 404 或只是白屏。
  • 你好@Artek。感谢您的反馈。在这种情况下,我推荐一种不同的方法。如果将 Ingress 分成三个独立的部分,会更容易且不易出错。每个你想要的重写规则一个,Prometheus 一个,Grafana 一个,Alertmanager 一个。您的入口控制器将处理该问题。可以试试吗?
  • 嗨@WytrzymałyWiktor,感谢您的建议。我将入口分成 3 个部分,一个用于 prometheus,一个用于 grafana,一个用于 alertmanager。但是结果仍然与之前使用一个大入口相同。我在所有入口中都保留了rewrite-target: /$2。旁注,我真的不明白 `rewrite-target: /$2`` 是如何工作的,如果你有一些好的资源来解释这个机制,我将不胜感激(我确实读过nginx docs,但我仍然不清楚)
  • @WytrzymałyWiktor 最终我能够弄清楚。无论如何,感谢您的时间和精力!我将在当天晚些时候回答我的问题,欢迎您对其进行评估。祝你有美好的一天!

标签: nginx kubernetes prometheus nginx-ingress


【解决方案1】:

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

选项 1

我在 azure 中有 DNS 区域(我的集群也位于该区域),并在那里为 grafana、prometheus 和 alertmanager 添加了指向入口控制器外部 IP 的子域。

使用 Helm Chart 部署 kube-prometheus-stack 时,我在 values.yaml 文件中提供了 prometheus 的默认根路径,配置如下:

prometheus:
  prometheusSpec:
    externalUrl: http://prometheus.mydomainname.something

然后(例如 Prometheus)的 Ingress 清单需要包含主机地址并且仅包含根路径“/”。

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-stack(prometheus、grafana、alertmanager)中的每个应用程序提供默认路径:

prometheus:
  prometheusSpec:
    externalUrl: http://mydomainname.something/prometheus

并使 Ingress 清单根据路径重定向:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2021-04-30
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多