gpt4 book ai didi

docker - 特使与gRPC路由

转载 作者:行者123 更新时间:2023-12-02 21:18:01 25 4
gpt4 key购买 nike

我似乎无法使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的多个实例时,新启动的实例永远不会收到任何调用。我的配置在哪里出问题?

最佳答案

您的集群由静态主机定义hosts: [{ socket_address: { address: 127.0.0.1, port_value: 30270 }}]支持。因此,Envoy将仅在此处列出的主机之间进行平衡-端口30270上的单个主机。

Docker-compose将为它带来的每个主机创建动态命名的实例。由于您在配置时不知道这些名称,因此必须使用docker-compose ps这样的名称来获取它们,然后将其反馈到Envoy的动态配置中。

要实现的特定动态配置是the Endpoint Discovery Service。关于LearnEnvoy.io有一个很好的教程,它将带您了解概念。

关于docker - 特使与gRPC路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49143935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com