Traefik и мое веб-приложение внутри контейнера - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь сделать что-то, что мне показалось простым, но похоже, что мне чего-то не хватает.

У меня есть веб-приложение, которое представляет собой пакет в образе докера, которым я управляю. Он запускает сервер, прослушивающий порт 9000. Он имеет метрики публикации конечной точки на /admin/metrics. Приложение развернуто в системе, которая требует, чтобы я опубликовал эти метрики на порту 9100 с путем /metrics. Я мог изменить приложение, запустить второй сервер и т. Д., Но для развлечения я попробовал кое-что быстрее (подумал я): запуск обратного прокси-сервера.

Я выбрал traefik, и мне удалось правильно настроить его с помощью провайдера файлов: при работе на моем компьютере (без контейнера) он перенаправляет вызовы с /metrics через порт 9100 на мое приложение /admin/metrics,Но когда он внутри контейнера, он выдает только 404 ошибки, хотя конфигурация в порядке. Я также попытался запустить только приложение, и у меня есть traefik на моем компьютере, который ведет к приложению внутри контейнера, но он тоже не работает.

Это моя конфигурация:

#/app/traefik.toml
[entryPoints]
  [entryPoints.MetricsProxy]
    address = ":9100"

[providers]
  providersThrottleDuration = 42
  [providers.file]
    directory = "/app"
    watch = false

[api]
  insecure = false
  dashboard = false
  debug = false

[log]
  level = "TRACE"
#/app/metrics.toml
[http]
  [http.routers]
    [http.routers.Router0]
      entryPoints = ["MetricsProxy"]
      middlewares = ["PathConvert"]
      service = "MetricsService"
      rule = "Path(`/metrics`)"
  [http.services]
    [http.services.MetricsService]
      [http.services.MetricsService.loadbalancer]
        [[http.services.MetricsService.loadBalancer.servers]]
          url = "http://0.0.0.0:9000"
  [http.middlewares]
    [http.middlewares.PathConvert]
      [http.middlewares.PathConvert.addPrefix]
        prefix = "/admin"

Обратите внимание, что я пытался заменить 0.0.0.0 на 127.0.0.1 или localhost, ни один не работает.

Наконец, Dockerfile:

FROM openjdk:8-jre-slim

WORKDIR /app

RUN \
  apt-get update -qq && apt-get install -y -qq curl && \
  curl -sSL https://github.com/containous/traefik/releases/download/v2.0.4/traefik_v2.0.4_linux_amd64.tar.gz | tar -xz

COPY bin/myapp.sh .
COPY target/universal/bluevalet-server.zip .
COPY deploy/traefik/traefik.toml .
COPY deploy/traefik/metrics.toml .
COPY deploy/nginx.conf .
COPY deploy/run.sh .

#run.sh ~~> ./traefik --configfile /app/traefik.toml & ./myapp.sh
CMD [ "/app/run.sh" ]
EXPOSE 9000
EXPOSE 9100

Я думаю, что-то с"localhost" в определении сервиса, но не может понять, что.

У кого-нибудь есть идея?

1 Ответ

0 голосов
/ 13 ноября 2019

Не знаю, почему это работает, но мне удалось использовать другую конфигурацию для traefik:

[http]
  [http.routers]
    [http.routers.Router0]
      entryPoints = ["MetricsProxy"]
      middlewares = ["PathConvert"]
      service = "MetricsService"
      rule = "Path(`/metrics`)"
  [http.services]
    [http.services.MetricsService]
      [http.services.MetricsService.loadbalancer]
        [[http.services.MetricsService.loadBalancer.servers]]
          url = "http://localhost:9000/"
  [http.middlewares]
    [http.middlewares.PathConvert]
      [http.middlewares.PathConvert.replacePathRegex]
        regex = "^/metrics"
        replacement = "/admin/metrics/prometheus"
...