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

Configuring Envoy to use SRV records generated by AWS ECS and Route53

我正在使用 AWS ECS 部署位于 Envoy 前端代理后面的多个 Web 服务(通过 Docker 图像)。其中一些 docker 图像有多个部署实例。

我目前正在使用 ECS 的服务发现功能来生成 DNS 记录,以便可以发现我的服务。所有这些都按预期工作。

我最初使用的是 awsvpc 网络模式,并使用 A 记录进行服务发现。但是我很快就达到了网络限制(开始出现 'Not enough 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

如果做不到这一点,我还应该考虑哪些其他选项来让此设置生效?

发布我最终采用的解决方案。

我设置 Consul 作为发现服务。基本上,Consul sidecar 会 运行 与我拥有的每个 cluster/webservice 并排。当 web 服务上线时,它会向 Consul 服务器注册自己。这样,只需要知道 Consul 服务器名称。

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

我必须对 Envoy 配置进行的唯一更改是指向用于 DNS 解析的 Consul 服务器 IP(见下文)。

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