我们在Go中实现了几个GRPC服务,部署为Cloud Run服务。还有一个ESPv2 Envoy服务代理Cloud Run服务,它位于GRPC服务的前面。
我们的移动的应用程序不直接连接到GRPC服务,而是能够通过ESPv2服务代理成功连接到任何GRPC服务方法。所以App -> ESPv2 -> GRPC Services
路径工作得很好。
最近,我们需要从服务B调用服务A上的GRPC方法。
每次服务B中的Go代码尝试调用服务A的GRPC方法时,都会遇到以下错误。transport: Error while dialing: dial tcp [XXXX:XXXX:XXXX:38::35]:50051: i/o timeout
个
服务B使用与ESPv2代理相同的服务帐户(并且ESPv2代理成功连接到所有GRPC服务,包括服务A)。
服务A和服务B在Cloud Run中都有以下网络配置。
的数据
服务A被配置为“允许从Internet直接访问您的服务”并允许未经身份验证的连接。
在grpc.Dial
函数中使用的地址是Cloud Run为服务A广告的URL(当然没有https://
)。我们已经尝试直接使用IP地址,但没有效果。
我想联系任何经历过这个问题并能够解决它的人。
谢谢
1条答案
按热度按时间laximzn51#
所以事实证明,我使用的端口是错误的。在Cloud Run yaml配置中定义的
containerPort
显然不是服务请求的端口。一旦我将端口从50051
更改为443
,gRPC客户端就能够成功连接。感谢John汉利的评论,这让我走上了正确的道路。