Настройка Grafana для обслуживания по пользовательскому пути в Kubernetes: объяснение нескольких методов

Grafana – популярная платформа с открытым исходным кодом для визуализации и анализа данных. При развертывании Grafana в кластере Kubernetes вы можете использовать собственный путь, например «/dashboard», вместо корневого пути по умолчанию («/»). В этой статье мы рассмотрим различные методы достижения такой настройки, включая настройку развертывания, входной трафик и настройку обратного прокси-сервера.

Метод 1: Конфигурация развертывания
Один из способов обслуживания Grafana по настраиваемому пути — корректировка конфигурации развертывания. Вы можете изменить раздел commandспецификации контейнера в манифесте развертывания Grafana, включив в него флаг --web.route-prefix, например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
spec:
  template:
    spec:
      containers:
      - name: grafana
        image: grafana/grafana:latest
        args:
        - "--web.route-prefix=/dashboard"

Метод 2: Ingress
Если вы используете контроллер Ingress в своем кластере Kubernetes, вы можете настроить его для маршрутизации трафика в Grafana по настраиваемому пути. Вот пример:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana-ingress
spec:
  rules:
  - http:
      paths:
      - path: /dashboard
        pathType: Prefix
        backend:
          service:
            name: grafana-service
            port:
              number: 80

Метод 3: обратный прокси
Другой подход — использовать обратный прокси-сервер, например Nginx или Traefik, для управления маршрутизацией пользовательского пути. Сначала разверните обратный прокси-сервер как отдельный сервис в своем кластере, а затем настройте его для пересылки запросов в Grafana. Вот пример использования Nginx:

  1. Развертывание Nginx:

    apiVersion: v1
    kind: Service
    metadata:
    name: nginx
    spec:
    selector:
    app: nginx
    ports:
    - protocol: TCP
      port: 80
      targetPort: 80
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nginx
    spec:
    replicas: 1
    selector:
    matchLabels:
      app: nginx
    template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80
  2. Настройте Nginx для прокси-запросов к Grafana:
    Добавьте следующий блок местоположения в конфигурацию Nginx:

location /dashboard {
    proxy_pass http://grafana-service:3000/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}