4

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

如果做不到这一点,我应该考虑哪些其他选项才能使此设置正常工作?

4

1 回答 1

1

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

我将Consul设置为发现服务。基本上,Consul sidecar 将与我拥有的每个集群/网络服务一起运行。当 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
于 2019-03-11T07:09:09.830 回答