Думаю, я знаю, в чем проблема. На самом деле мой предыдущий комментарий был неправильным:
Если он доступен в /, вам не нужно никаких перезаписей в вашем входящем потоке, и он должен работать сразу.
Хорошо. .. на самом деле этого не произойдет по одной простой причине. Когда вы пытаетесь получить доступ к пользовательскому интерфейсу Prometheus через вход, вы используете URL-адрес <ingress ip>/prometheus
. Выбор пути /prometheus
правильно перенаправляет вас на соответствующий бэкэнд Service
:
- backend:
serviceName: prometheus-service
servicePort: 80
path: /prometheus
Но проблема возникает из-за того, что путь /prometheus
(который вам нужно перенаправить на prometheus-service
и, в конечном итоге, один из Pods
, представленных этим Service
), пересылается на целевую Pod
, обслуживающую фактическое содержимое.
Вы получаете сообщение об ошибке 404 page not found
, потому что HTTP-запрос, который попадает на целевой веб-сервер запрашивает содержимое каталога /prometheus
вместо /
, из которого оно фактически обслуживается.
Итак, если вы измените свой входящий трафик на что-то вроде этого:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: prometheus-ingress
namespace: monitoring
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- http:
paths:
- backend:
serviceName: prometheus-service
servicePort: 80
path: /
скорее всего все будет работать так, как ожидалось, и вы получите веб-сайт Prometheus UI , а не 404 Not found
.
Ну, хотя это может работать, это хорошо только для целей отладки, так как никто не хочет используйте ingress , чтобы получить доступ к чему-то по пути root.
Следующее определение входа должно решить вашу проблему (Да, rewr В этом сценарии необходимы элементы !):
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: prometheus-ingress
namespace: monitoring
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- backend:
serviceName: prometheus-service
servicePort: 80
path: /prometheus(/|$)(.*)
Rewrite , который использовался выше, гарантирует, что исходный путь доступа /prometheus
будет перезаписан на /
до достижения цель Pod
.