Невозможно установить связь между сервисами AWS ECS и обнаружением сервисов. - PullRequest
5 голосов
/ 05 июля 2019

Я пытаюсь установить связь между двумя службами через конечную точку обнаружения служб в службе AWS ECS.

Пример:

Service1: запускает определение задачи для запуска nginx и phpfpm

Service2: запускает определение задачи для запуска redis

Теперь мне нужно сделать service1контейнер связывается с контейнером service2

Согласно документации и ресурсам, найденным в Интернете.Это то, что я сделал и не смог удовлетворить эту потребность.

  1. Нам нужно включить обнаружение службы ( Готово )
  2. Установить правильное имя службы ипространство имен, которое будет работать в качестве конечной точки обнаружения службы ( Done )
  3. Создать определение задачи и создать службу с указанным выше набором свойств ( done )
  4. Теперь AWSсгенерирует записи SRV на Route53 ( OK )

Теперь при использовании конечной точки обнаружения службы, которая обычно имеет формат service_discovery_service_name.service_discovery_namespace.

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

enter image description here

1 Ответ

2 голосов
/ 09 июля 2019

Согласно нашему разговору, здесь приведена краткая сводка о том, что происходит.

  • Если Service1 (nginx в вашем случае) необходимо взаимодействовать с Service2 (redis) с опцией AWS ServiceDiscovery и использованием SRV записей, тогда Service1 необходимо знать, что ему необходимо выполнить поиск DNS SRV вместо DNS A(Адрес) поиск.
  • У вас есть несколько вариантов здесь.Во-первых, если вы хотите продолжить использовать записи SRV, тогда ваш клиент nginx должен прокси-сервер переадресации с дополнительными параметрами с параметрами service и resolve, которые доступны только в premium версии nginx.Проверьте мой пример конфигурации nginx, который я протестировал, внизу ответа, который работает.

  • Также убедитесь, что вы создали имя обнаружения службы AWS с префиксом _http._tcp, в противном случае у меня возникли проблемыКонфигурация SRV resolve/service опция в конфигурации nginx без префикса.

aws ecs service

  • Другая опция, если вы этого не сделаетехотите полагаться на SRV записи, но перейти к стандартному A поиску записей, тогда вам придется использовать режим awsvpc для контейнеров и выбрать опцию A.

enter image description here

  • С опцией DNS A, тогда ваш запрос service_discovery_service_name.service_discovery_namespace будет работать нормально.
  • С опцией DNS A есть некоторые ограничения.Вы не можете создать несколько задач для данной службы в одном и том же экземпляре EC2 из-за ограничения числа ENI в зависимости от семейства экземпляров EC2, поэтому я бы предпочел только записи SRV.

Пример конфигурации параметров nginx DNS SRV:

stream {
    resolver 172.31.0.2;
    upstream redis {
        zone tcp_servers 64k;
        server redisservice.local service=_http._tcp resolve;
    }
    server {
        listen 12345;
        status_zone tcp_server;
        proxy_pass redis;
    }
}

Некоторые ссылки -

https://aws.amazon.com/blogs/aws/amazon-ecs-service-discovery/ https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-discovery.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...