Настройка Envoy для использования записей SRV, созданных AWS ECS и Route53

Я использую AWS ECS для развертывания нескольких веб-сервисов (через образы Docker), которые находятся за передним прокси-сервером Envoy. Некоторые из этих образов Docker имеют несколько развернутых экземпляров.

В настоящее время я использую функции обнаружения сервисов ECS для генерации записей DNS, поэтому мои сервисы доступны для обнаружения. Все это работает как положено.

Я изначально использовал awsvpc сетевой режим и использовал записи A для обнаружения службы. Однако вскоре я достиг предела сети (начали появляться ошибки "Not too ENI"), поэтому я переключился на Bridged в сети, и я пробую обнаружение службы, используя записи SRV.

Проблема, с которой я столкнулся, заключается в том, что прокси Envoy, похоже, не поддерживает SRV для обнаружения служб. Или, если это произойдет, какие изменения мне нужно внести в мои настройки? Я включил соответствующую часть моей конфигурации кластера

  clusters:
  - name: ms_auth
    connect_timeout: 0.25s
    type: strict_dns
    lb_policy: round_robin
    hosts:
    - socket_address:
        address: ms_auth.apis
        port_value: 80
  - name: ms_logging
    connect_timeout: 0.25s
    type: strict_dns
    lb_policy: round_robin
    hosts:
    - socket_address:
        address: ms_logging.apis
        port_value: 80

В противном случае, какие еще варианты я должен рассмотреть, чтобы заставить эту установку работать?

0 ответов

Публикация решения, с которым я столкнулся.

Я настроил Консул для работы в качестве службы обнаружения. По сути, коляска Консула будет работать рядом с каждым кластером / веб-сервисом, который у меня есть. Когда веб-сервис подключается к сети, он регистрируется на сервере Consul. Таким образом, нужно знать только имя сервера Консул.

Как только служба зарегистрирована, вы можете либо запросить Консул, чтобы получить IP для веб-службы, либо получить прямой доступ к нему в форме <webservice_name>.service.consul

Единственное изменение, которое мне пришлось внести в конфигурацию Envoy, - указать IP-адрес сервера Consul для разрешения DNS (см. Ниже).

clusters:
  - name: ms_auth
    connect_timeout: 0.25s
    type: strict_dns
    lb_policy: round_robin
    hosts:
    - socket_address:
        address: ms-auth.service.consul
        port_value: 80
    dns_resolvers:
    - socket_address:
        address: {DNS_RESOLVER_IP}
        port_value: 8600

  - name: ms_logging
    connect_timeout: 0.25s
    type: strict_dns
    lb_policy: round_robin
    hosts:
    - socket_address:
        address: ms-logging.service.consul
        port_value: 80
    dns_resolvers:
    - socket_address:
        address: {DNS_RESOLVER_IP}
        port_value: 8600
Другие вопросы по тегам