我似乎无法让 Envoy 与部署的多个 gRPC 服务一起工作。gRPC 调用总是转到同一个实例。Envoy 负载均衡器如何发现使用 docker-compose scale 启动了相同服务的其他实例?
我使用的 Service1 配置:
admin:
access_log_path: /tmp/admin_access.log
address:
socket_address: { address: 0.0.0.0, port_value: 9901 }
static_resources:
listeners:
- name: listener_0
address:
socket_address: { address: 0.0.0.0, port_value: 30271 }
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
stat_prefix: ingress_http
codec_type: AUTO
route_config:
name: local_route
virtual_hosts:
- name: service1_grpc
domains: ["*"]
routes:
- match: { prefix: "/" }
route: { cluster: service1_grpc }
http_filters:
- name: envoy.router
config: {}
clusters:
- name: service1_grpc
connect_timeout: 25s
type: STRICT_DNS
lb_policy: ROUND_ROBIN
dns_lookup_family: V4_ONLY
http2_protocol_options: { }
hosts: [{ socket_address: { address: 127.0.0.1, port_value: 30270 }}]
现在调用者服务具有 gRPC 客户端初始化:
grpc.Dial("service1_grpc:30271", grpc.WithInsecure())
问题是,每当我使用 docker-compose scale 命令启动多个 service1 实例时,新启动的实例永远不会收到任何呼叫。我的配置问题出在哪里?