【问题标题】:ENETUNREACH error on external calls外部调用的 ENETUNREACH 错误
【发布时间】:2017-11-29 16:17:37
【问题描述】:

在过去一周,我在获取外部信息(在本例中为 facebook)时开始遇到异常错误:

ConnectionError: HTTPSConnectionPool(host='graph.facebook.com', port=443): url: /v2.7/xxxxxx/xxxxx 超出了最大重试次数(导致 经过 NewConnectionError(': 建立新连接失败: [Errno 101] ENETUNREACH',))

我正在使用 GCE 负载平衡器,并且每天几次收到 502 no gateway 错误。负载均衡器后面只有一个实例(目前)。

我很想相信我会在短时间内失去此实例的互联网连接(可能是几秒钟,负载均衡器需要进行几次调用才能将其标记为工作)。

有人遇到计算引擎实例连接中断的问题吗?有人知道如何调试它吗?

【问题讨论】:

  • 过去一天我在 GKE 上看到了具有类似症状的异常行为。 WARNING:Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fcacdeae710>: Failed to establish a new connection: [Errno -2]
  • 您是否在 HTTP 负载均衡器后面的后端使用 Nginx?
  • 是的,我们在负载均衡器后面使用 nginx。 502 错误虽然来自 GCE。它被清楚地标识为这样,所以不是 nginx 没有到达我们的 unix 套接字。

标签: google-cloud-platform google-compute-engine google-kubernetes-engine


【解决方案1】:

我在使用 Nginx 和 HTTP 负载均衡器时遇到了以下问题,遇到了零星的 502 错误网关,您可能会发现它很有帮助。基本上你我必须调整服务器以确保连接不会因竞争条件而因超时而中断。

主要问题是“默认的 nginx keepalive_timeout 与 Google Cloud Platform HTTP(S) 负载均衡器不兼容”

您必须增加 nginx 的“keepalive_timeout”,否则会冒间歇性和零星的 502 Bad Gateway 响应 POST 请求的风险。

# Tune nginx keepalives to work with the GCP HTTP(S) Load Balancer:
keepalive_timeout 650;
keepalive_requests 10000;

你可以找到一篇很棒的文章here,它以前对我有帮助,它显示了这个问题的根本原因。

编辑。有时我也遇到了 NGINX Rate Limiting setting 的问题,这导致 HTTP 运行状况检查失败并认为实例一段时间不健康,我不知道它是否与您的问题有关,但它可能对有人在搜索 502 错误时发现了您的问题。

【讨论】:

    猜你喜欢
    • 2017-04-28
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2017-04-24
    • 2013-09-20
    相关资源
    最近更新 更多