如何解决 Amazon EKS 中的 504 HTTP 错误?

1 分钟阅读
0

当我连接到在我的 Amazon Elastic Kubernetes Service (Amazon EKS) 集群中运行的 Kubernetes Service 时,会出现 HTTP 504(网关超时)错误。

简短描述

当您连接到 Kubernetes Service 一容器组(pod)(位于为负载均衡器配置的 Amazon EKS 集群中)时,会出现 HTTP 504 错误。

要解决 HTTP 503 错误,请参阅在 Amazon EKS 集群中访问 Kubernetes Service 时如何解决 HTTP 503(服务不可用)错误?

要解决 HTTP 504 错误,请完成以下问题排查步骤。

解决方法

验证您的负载均衡器的空闲超时设置是否正确

负载均衡器建立了与目标的连接,但是目标没有在达到空闲超时期限之前响应。原定设置下,Classic Load BalancerApplication Load Balancer 的空闲超时为 60 秒。

1.    检查您的经典负载均衡器或应用程序负载均衡器的 Amazon CloudWatch 指标。

**注意:**至少有一个请求在以下情况下超时:

  • 延迟数据点等于您当前配置的负载均衡器超时值。
  • httpcode_elb_5xx 指标中有数据点。

2.    修改负载均衡器的空闲超时,以便 HTTP 请求在空闲超时期限内完成。或者将您的应用程序配置为更快地响应。

要修改经典负载均衡器的空闲超时,请更新服务定义以包括 service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout 注释。

要修改 Application Load Balancer 的空闲超时,请更新入口定义以包括 alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds 注释。

验证您的后端实例是否没有后端连接错误

如果后端实例在达到空闲超时值之前关闭 TCP 连接,则负载均衡器无法完成请求。

1.    检查 Classic Load Balancer 的 CloudWatch BackendConnectionErrors 指标,以及 Application Load Balancer 的目标组的 TargetConnectionErrorCount

2.    在后端 Worker 节点或容器组(pod)上激活保持活动设置,并将保持活动超时的值设置为大于负载均衡器的空闲超时。

要查看保持活动超时是否小于空闲超时,请验证一容器组(pod)或 Worker 节点中的保持活动值。参阅以下有关一组容器(pod)和节点的示例。

对于容器组(pod):

$ kubectl exec your-pod-name -- sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes

对于节点:

$ sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes

输出:

net.ipv4.tcp_keepalive_time = 7200
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9

验证您的后端目标是否可以在临时端口范围内接收来自负载均衡器的流量

子网的网络访问控制列表(ACL)不允许将流量从目标传送到负载均衡器节点的临时端口 (1024-65535)。

您必须将安全组和网络 ACL 配置为允许数据在负载均衡器和后端目标之间移动。例如,根据负载均衡器的类型,这些目标可以是 IP 地址或实例。

您必须配置安全组以进行临时端口访问。为此,请将节点和容器组(pod)的安全组出口规则连接到负载均衡器的安全组。有关更多信息,请参阅您的 Amazon Virtual Private Cloud (Amazon VPC) 的安全组添加和删除规则


相关信息

当我连接到在配置为使用 Classic Load Balancing 的 EC2 实例上运行的 Web 服务器时,收到 HTTP 5xx 错误。如何排查这些错误?

HTTP 504:网关超时

监控 Classic Load Balancer

监控 Application Load Balancer

排查 Classic Load Balancer 问题:HTTP 错误

AWS 官方
AWS 官方已更新 1 年前