配置Envoy以使用由AWS ECS和Route53生成的SRV记录

时间:2019-03-01 12:46:43

标签: amazon-web-services web-services dns amazon-ecs envoyproxy

我正在使用AWS ECS部署Envoy前代理背后的多个Web服务(通过Docker映像)。其中一些Docker映像具有多个已部署实例。

我目前正在使用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

如果失败,在使此设置正常工作时我还应考虑其他哪些选择?

1 个答案:

答案 0 :(得分:0)

发布最终解决的解决方案。

我将Consul设置为发现服务。基本上,Consul边车会与我拥有的每个群集/网络服务一起运行。当Web服务联机时,它将在Consul服务器中注册自己。这样,只需要知道Consul服务器名称。

注册服务后,您可以查询Consul以获取Web服务的IP,也可以直接以<webservice_name>.service.consul的形式访问它

我对Envoy配置所做的唯一更改是指向Consul服务器IP以进行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