Настройка 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