Трафик с динамической c маршрутизацией к бэкэндам ECS, работающий как разовые задачи - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь реализовать решение для службы обратного прокси-сервера с использованием одноразовых задач Traefik v1 (1.7) и ECS в качестве бэкэндов, как описано в этом вопросе . Маршрутизация должна выполняться Dynami c - запросы к /user/1234/* пути должны go к задаче ECS, с соответствующими метками docker:

  docker_labels = {
    traefik.frontend.rule = "Path:/user/1234"
    traefik.backend       = "trax1"
    traefik.enable        = "true"
  }

Пока что эта установка работает нормально, но я необходимо создать одно определение задачи ECS для каждой выполняющейся задачи, поскольку метки docker являются свойством ECS TaskDefinition, а не самой задачей ECS. Можно ли создать только одно TaskDefinition и передать правила Traefik в тегах задач ECS в свойствах ключ / значение задачи?

Это потребует некоторой модификации исходного кода Traefik, любых других доступных опций или способов, которые должны быть реализованы, которые я пропустил, таких как API Gateway или Lambda@Edge? У меня нет опыта работы с этими технологиями, примеры из реальной жизни более чем приветствуются.

1 Ответ

0 голосов
/ 11 апреля 2020

Решено с помощью провайдера Traefik REST API . Внешний компонент, который выполняет одноразовые задачи, может обнаруживать внутренний IP-адрес задачи и оперативно обновлять конфигурацию Traefik по паре traefik.frontend.rule = "Path:/user/1234" и внутренним значениям IP:port задачи в backends разделе

Он должен GET сначала настройте конфигурацию Traefik с /api/providers/rest конечной точки, удалите или добавьте соответствующую деталь (если задача была остановлена ​​или запущена) и обновите конфигурацию Traefik методом PUT до той же конечной точки.

{
  "backends": {
    "backend-serv1": {
      "servers": {
        "server-service-serv-test1-serv-test-4ca02d28c79b": {
          "url": "http://172.16.0.5:32793"
        }
      }
    },
    "backend-serv2": {
      "servers": {
        "server-service-serv-test2-serv-test-279c0ba1959b": {
          "url": "http://172.16.0.5:32792"
        }
      }
    }
  },
  "frontends": {
    "frontend-serv1": {
      "entryPoints": [
        "http"
      ],
      "backend": "backend-serv1",
      "routes": {
        "route-frontend-serv1": {
          "rule": "Path:/user/1234"
        }
      }
    },
    "frontend-serv2": {
      "entryPoints": [
        "http"
      ],
      "backend": "backend-serv2",
      "routes": {
        "route-frontend-serv2": {
          "rule": "Path:/user/5678"
        }
      }
    }
  }
}
...