You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2实例使用Envoy代理出现“No healthy upstream”错误求助

解决方案:修复Envoy的"No healthy upstream"错误

1. 修正Envoy配置中的核心问题

你的envoy.yaml存在两个关键错误,导致无法正确连接上游gRPC服务:

a. 替换上游服务地址

host.docker.internal是Docker Desktop专属的本地主机映射地址,在AWS EC2的Docker Engine环境中无法识别。由于你已经将Envoy和gRPC服务加入同一个Docker网络test-net,可以直接使用容器名称作为服务地址:

修改clusters部分的socket_address:

clusters:
- name: echo_service
  connect_timeout: 0.25s
  type: logical_dns
  http2_protocol_options: {}
  lb_policy: round_robin
  load_assignment:
    cluster_name: echo_service  # 修正:与集群名称保持一致
    endpoints:
      - lb_endpoints:
          - endpoint:
              address:
                socket_address:
                  address: greeter-service  # 替换为gRPC服务容器名
                  port_value: 5001

b. 统一集群名称

原配置中load_assignment.cluster_name为cluster_0,但对应的集群名称是echo_service,两者不匹配会导致Envoy无法正确加载负载分配规则,必须修改为一致的名称(如上代码所示)。

2. 重新部署Envoy容器

确保使用修改后的配置文件启动Envoy。如果你的镜像内置了旧配置,需要重新构建镜像,或者通过挂载本地修改后的配置文件运行:

# 停止旧的Envoy容器(如果运行中)
docker stop envoy

# 挂载修改后的配置文件启动Envoy(路径根据你的镜像调整)
docker container run --network test-net --rm -d -it --name envoy -p 8080:8080 -p 9902:9902 -v $(pwd)/envoy.yaml:/etc/envoy/envoy.yaml limeniye/greeter-envoy

3. 验证网络连通性

进入Envoy容器,测试是否能解析并访问gRPC服务:

# 进入Envoy容器
docker exec -it envoy sh

# ping gRPC服务容器名,确认网络连通
ping greeter-service

# 用curl测试gRPC服务(支持HTTP/2的情况下)
curl -v http://greeter-service:5001

4. 检查EC2安全组(可选)

确认EC2安全组已开放8080端口,允许外部访问(你能直接访问5001端口,此步骤大概率已完成)。

完成以上步骤后,重新通过http://52.58.230.171:8080调用gRPC服务,即可解决"No healthy upstream"错误。

内容的提问来源于stack exchange,提问作者limeniye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:34:56