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

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

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

Первоначально я использовал сетевой режим awsvpc и использовал записи A для обнаружения служб. Однако вскоре я достиг предела сети (начал получать ошибки «Недостаточно 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

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


person JohnP    schedule 01.03.2019    source источник


Ответы (1)


Разместив решение, с которым я остановился.

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

После регистрации службы вы можете запросить 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
person JohnP    schedule 11.03.2019