我正在使用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
如果失败,在使此设置正常工作时我还应考虑其他哪些选择?
答案 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