Настройка Envoy для использования записей SRV, созданных AWS ECS и Route53 - PullRequest
0 голосов
/ 01 марта 2019

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

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

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

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

1 Ответ

0 голосов
/ 11 марта 2019

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

Я настраиваю Консул на работу в качестве службы обнаружения.По сути, коляска Консула будет работать рядом с каждым кластером / веб-сервисом, который у меня есть.Когда веб-сервис подключается к сети, он регистрируется на сервере 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
...