Задать вопрос
MODifikaTOR18
@MODifikaTOR18
Сисадмин

Как правильно настроить Ingress?

Я пытаюсь настроить Ingress Nginx для Deployment'ов с Prometheus, Alertmanager и Grafana. Но я столкнулся с проблемой перенаправления трафика. Вот мой конфиг Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-controller01
  annotations:
    kubernetes.io/ingress.className: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: prometheus
            port:
              number: 9090
      - pathType: Prefix
        path: /grafana/
        backend:
          service:
            name: grafana
            port:
              number: 3000
      - pathType: Prefix
        path: /alertmanager/
        backend:
          service:
            name: alertmanager
            port:
              number: 9093


Мои сервисы для Prometheus, Grafana и Alertmanager:
apiVersion: v1
kind: Service
metadata:
  name: prometheus
spec:
  selector:
    app: prometheus
  ports:
  - port: 9090
    name: prometheus-port
    targetPort: prom-prt
---
apiVersion: v1
kind: Service
metadata:
  name: grafana
spec:
  selector:
    app: grafana
  ports:
  - port: 3000
    name: grafana-port
    targetPort: grafana-prt
---
apiVersion: v1
kind: Service
metadata:
  name: alertmanager
spec:
  selector:
    app: alertmanager
  ports:
  - port: 9093
    name: alertmanager-port
    targetPort: alert-prt

Когда я пытаюсь в браузере открыть URL http://server/grafana/, то мне выдаёт ошибку 404 page not found. Логи Ingress Nginx Controller'a при этом выдают следующее:
192.168.2.46 - - [19/Dec/2023:09:03:54 +0000] "GET /grafana/ HTTP/1.1" 302 29 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 OPR/104.0.0.0" 673 0.004 [default-grafana-3000] [] 10.244.1.12:3000 29 0.004 302 80eda3db119fd4c3a81ecf545f52f171
192.168.2.46 - - [19/Dec/2023:09:03:54 +0000] "GET /login HTTP/1.1" 404 19 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 OPR/104.0.0.0" 670 0.002 [default-prometheus-9090] [] 10.244.1.10:9090 19 0.001 404 d7290e97e225f61ec42053413286709e


То есть Grafana меняет адресную строку http://server/grafana/ на http://server/login, из-за чего происходит перенаправление трафика на Prometheus. Собственно вопрос: как этого можно избежать? Я пробовал менять аннотацию rewrite-target на /$1, /$2, комментить её, но ничего не помогало.

Upd. Корневой URL http://server/ успешно открывает Prometheus.
  • Вопрос задан
  • 288 просмотров
Подписаться 3 Простой 1 комментарий
Решения вопроса 1
MODifikaTOR18
@MODifikaTOR18 Автор вопроса
Сисадмин
Разобрался с проблемой: у Alertmanager и Prometheus в K8s манифесте добавил аргумент:
...
    spec:
      containers:
      - name: alertmanager
        image: prom/alertmanager
        args:
          - "--config.file=/tmp/alertmanager/config.yml"
          - "--storage.path=/tmp/alertmanager/data"
          - "--web.external-url=/alertmanager/" # Этот аргумент был нужен
...

Можно указывать как полный URL, так и частичный, как здесь. Такая же строка нужна и для Prometheus.
Для Grafana в файле grafana.ini я раскомментил в блоке [server] строки:
# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/

# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons.
serve_from_sub_path = true

Также в Ingress я убрал строку nginx.ingress.kubernetes.io/rewrite-target: /. После всех этих действий все 3 приложения открываются в браузере.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
Саму графану надо научить что у нее base path /server/grafana/ и тогда для логина она будет редиректить на /server/grafana/login
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы