【问题标题】:AWS/EKS: Getting frequent 504 gateway timeout errors from ALBAWS/EKS:从 ALB 获取频繁的 504 网关超时错误
【发布时间】:2020-09-01 18:24:47
【问题描述】:

我正在使用 EKS 部署服务,入口运行在 alb-ingress-controller 之上。

总而言之,我有大约 10 个单个 pod 的副本,其中有一个 NodePort 类型的服务将流量转发给它们。副本在 10 个节点上运行,使用 eksctl 建立,分布在 3 个可用区。

我看到的问题很奇怪 - 在集群内部,所有日志都显示请求在不到 1 秒的时间内得到处理,大部分时间约为 20-50 毫秒。我知道这一点是因为我使用 linkerd 来显示请求延迟的百分位数,以及应用程序日志本身。但是,ALB 日志/监控讲述了一个非常不同的故事。我看到一个相对较高的请求延迟(通常接近 20 秒或更长),并且通常还从 ELB 返回 504 错误(有时每 5 分钟 2-3 个)。

在尝试读取 ALB 的访问日志时,我注意到 504 行如下所示:

https 2019-12-10T14:56:54.514487Z app/1d061b91-XXXXX-3e15/19297d73543adb87 52.207.101.56:41266 192.168.32.189:30246 0.000 -1 -1 504 - 747 308 "GET XXXXXXXX" "-" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:eu-west-1:750977848747:targetgroup/1d061b91-358e2837024de757a3d/e59bbbdb58407de3 "Root=1-5defb1fa-cbcdd248dd043b5bf1221ad8" "XXXX" "XXXX" 1 2019-12-10T14:55:54.514000Z "forward" "-" "-" "192.168.32.189:30246" "-"

其中请求处理时间为0,目标处理时间为-1,表示请求从未到达后端,立即返回响应。

我尝试使用后端 HTTP keepalive 超时(当前为 75 秒)和 ALB 空闲时间(当前为 60 秒),但这种行为似乎没有太大变化。

如果有人能指出如何继续和调查此问题,或者原因可能是什么,我将不胜感激。

【问题讨论】:

  • “立即返回响应。” 再次检查。两个时间戳之间有约 1 分钟的延迟。
  • 你是对的。有一分钟的差异 - 抱歉我错过了。但是,这似乎对应于 ALB 的空闲超时。无论我设置多高 - 那些间歇性的 504 都遵循相同的超时。当我将空闲时间设置为 5 分钟时,访问日志中的差异变为 5 分钟......所以看起来 ALB 无论经过多少时间都没有达到目标......

标签: amazon-web-services amazon-elb amazon-eks


【解决方案1】:

我们在使用 EKS 和 ALB 组合时遇到了类似类型的问题。如果目标响应代码显示 -1,则可能是目标端的请求等待队列已满。因此 ALB 将立即丢弃该请求。

尝试通过跳过 ALB 并直接将请求发送到服务或私有 IP 地址来执行ab 基准测试。这样做将帮助您确定问题所在。

对于我们来说,如果我们通过 ALB 发送流量,则 10 个请求中有 1 个失败。如果我们直接将请求发送到服务,我们不会看到失败。

AWS 建议使用 NLB 而不是 ALB。 NLB 提供了更多的优势,并且适用于 Kubernetes。有一个博客解释了这个Using a Network Load Balancer with the NGINX Ingress Controller on Amazon EKS

我们更改为 NLB,现在我们没有收到 5XX 错误。

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 2013-12-03
    • 2011-04-08
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    相关资源
    最近更新 更多