Раскрыть входной путь внутри кластера, но не публично? - PullRequest
0 голосов
/ 17 марта 2019

У меня есть модуль, имеющий следующую диаграмму:

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    // ...
  paths:
    - /api/myservice

Мой модуль предоставляет API и, кроме того, конечную точку /prometheus, доступную через /api/myservice/prometheus.

. Я хотел быprometheus видно внутри моего кластера, но не из /api/myservice/prometheus.Как мне этого добиться?

Ответы [ 4 ]

2 голосов
/ 20 марта 2019

Вы можете добавить правило Ingress, которое перенаправляет конечную точку на бэкэнд по умолчанию:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: block
  annotations:
    ingress.kubernetes.io/ssl-redirect: "true"
    ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - myapp.to
  rules:
  - host: myapp.to
    http:
      paths:
      - path: /metrics
        backend:
          serviceName: ingress-default-backend
          servicePort: 8080
2 голосов
/ 18 марта 2019

Если вам просто нужен внутренний доступ, я не думаю, что вы должны его вводить. Вы уже можете использовать DNS Service вместе с кластером Kubernetes.

Если ваша служба prometheus работает в том же пространстве имен, что и ваш рабочий модуль, вы можете использовать следующий адрес для доступа к нему.

http://prometheus-svc-name

Если ваша служба Prometheus работает в другом пространстве имен, вы можете использовать:

http://prometheus-svc-name.prometheus-namespace.svc.cluster.local

для доступа к услуге.

Обновление:

Более ясный вопрос после комментариев.

Вы можете написать другое правило, чтобы скрыть конечную точку /prometheus, например:

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    // ...
  paths:
    - /api/myservice => myservice
    - /api/myservice/prometheus => 404 default backend.

nginx-ingress сначала будет соответствовать самому длинному маршруту. Он будет направлять /api/myservice/prometheus до 404. См. Эту документацию

0 голосов
/ 18 марта 2019

изменить конечную точку, чтобы указать на ваш API./ api / myservice / my-api или используйте аннотацию app-root, чтобы указать ваш api внутри / api / myservice:

nginx.ingress.kubernetes.io/app-root: /path/to/my/app/root/dir

подробнее здесь: https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#rewrite

0 голосов
/ 17 марта 2019

Лучший способ добиться этого - удалить конечную точку Prometheus из входа, и если вы знаете, что Prometheus поддерживает автоматическое обнаружение с использованием аннотаций в службе, настройте Prometheus для автоматического обнаружения K8S, а затем добавьте аннотации в файле службы yaml. https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config

...