如何解决在我连接到托管在 Amazon EKS 中的服务时出现的连接超时问题?

上次更新日期:2021 年 12 月 22 日

当我连接到在我的 Amazon Elastic Kubernetes Service(Amazon EKS)集群中托管的服务时,会出现连接超时错误。

简短描述

对于您无法连接到 Amazon EKS 集群中的服务的问题,有两个最常见原因:

  • 安全组或网络访问控制列表(网络 ACL)限制正在阻止流量到达一组容器(pod)端点。
  • 服务不会选择 pod 端点,因为标签不匹配。

要解决这些问题,请检查与 Worker 节点实例和负载均衡器关联的安全组和网络 ACL。另外,请验证您的服务是否为您的 pod 选择了正确的标签。

注意:问题排查因服务类型而异。当您对无法访问的服务进行问题排查时,以下解决方案适用。要了解有关 Kubernetes 服务类型的更多信息,请参阅如何公开在我的 Amazon EKS 集群上运行的 Kubernetes 服务?

解决方法

检查您的安全组和网络 ACL

集群 IP

集群 IP 服务类型用于在同一 Amazon EKS 集群中运行的微服务之间进行的通信。确保附加到目标 pod 所在实例的安全组具有允许来自客户端 pod 实例通信的入站规则。

在大多数情况下,有一个自身规则:即允许通过 Worker 节点安全组中的所有端口进行所有通信。如果您使用多个节点组(每个节点组都有自己的安全组),请确保允许在安全组之间进行所有通信,以便在多个节点上运行的微服务可以轻松地进行通信。

要了解更多信息,请参阅 Amazon EKS 安全组注意事项

节点端口

Worker 节点安全组应允许通过 NodePort 服务定义中指定的端口传入流量。如果未在服务定义中指定,则端点参数的值与 targetPort 参数的值相同。在 Amazon EKS 集群中的所有节点上公开该端口。

检查链接到 Worker 节点子网的网络 ACL。确保您的客户端 IP 地址包含在服务使用的端口的允许列表中。

如果您通过互联网访问 Kubernetes 服务,请确保您的节点有公有 IP 地址。要访问服务,您必须使用节点的公有 IP 地址和端口组合。

负载均衡器

确保负载均衡器安全组允许侦听器端口。此外,请确保 Worker 节点安全组允许通过运行应用程序容器的端口从负载均衡器安全组传入流量。

如果服务定义中指定的端口与 targetPort 不同,则必须允许通过负载均衡器安全组的 Worker 节点安全组中的端口传入流量。在服务定义中,端口和 targetPort 通常是相同的。

网络 ACL 必须允许您的客户端 IP 地址可访问负载均衡器的侦听器端口。如果您要通过 Internet 访问负载均衡器,请确保已创建公有负载均衡器。

检查您的服务是否正确选择了 pod 端点

如果您的 pod 没有注册为服务的后端,那么您可能会收到超时错误。当您从浏览器访问服务或运行 curl podIP:podPort 命令时,可能会发生这种情况。

检查 pod 的标签,并验证服务是否有适当的标签选择器(从 Kubernetes 网站)。

运行以下命令来验证您的 Kubernetes 服务是否正确选择并注册了您的 Pod。

命令:

kubectl get pods -o wide

输出示例:

NAME                    READY   STATUS    RESTARTS   AGE       IP                           NODE                         NOMINATED NODE   READINESS GATES
nginx-6799fc88d8-2rtn8   1/1     Running     0       3h4m   172.31.33.214   ip-172-31-33-109.us-west-2.compute.internal       none          none

命令:

kubectl describe svc your_service_name -n your_namespace

注意:your_service_name 替换为服务名称,将 your_namespace 替换为您的命名空间。

输出示例:

Events:            none
Session Affinity:  none
Endpoints:         172.31.33.214:80
....

在前面的输出示例中,172.31.33.214 是通过运行 kubectl get pods -o wide 命令获得的 pod IP 地址。172.31.33.214 IP 地址还充当在 Amazon EKS 集群中运行的服务的后端。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?