Kubernetes(K8S):当没有 Pod 满足其请求时,TCP 客户端在连接到服务时等待很长时间超时

Kubernetes(K8S):当没有 Pod 满足其请求时,TCP 客户端在连接到服务时等待很长时间超时

我在 Kubernetes 上使用 Redis 时遇到了这个问题,但看起来问题不在于 Redis 本身,而在于网络/基础设施。我的情况是:

  • 我有一个 Redis 服务,其中有单个 Redis Pod 为其提供服务。
  • 我将 Redis 客户端连接到服务。
  • 我删除了一个 Redis Pod。
  • 客户端连接终止。
  • Redis 客户端尝试重新连接。
  • 此时 Redis Replica Ret 会启动一个新的 Redis Pod,并且 Redis 服务开始响应请求/创建新连接。
  • 但是我现有的 Redis 客户端在连接时挂起了(第一次重新连接尝试),并且一直保持这种状态,直到超时(大约在130 秒)。
  • 在第二次重新连接尝试时,它会立即连接。

该问题似乎不存在于我的开发环境(本地 docker 容器)上,因为一两秒后就会出现超时。

此外,我使用的客户端没有配置套接字超时的选项。

  1. 当没有 Pod 处理请求时,挂起连接直到发生超时,这是 Service 的正确行为吗?如果它立即响应错误,就不会出现这样的问题。
  2. 有没有办法在某个地方(在服务级别、在某些网络配置等)将此超时配置为可接受的值?假设 5 秒就可以了。

答案1

服务是 Kubernetes 中的一种抽象概念,它定义了一组逻辑上的 Pod 以及访问这些 Pod 的策略。从技术上讲,服务是一种 Kubernetes 资源,它会导致代理配置为将请求转发到一组 Pod。

在您的案例中,您的 Redis 客户端使用服务中配置的一些防火墙规则直接连接到您的 Redis Pod。因此,如果服务未受影响,连接问题可能仅出现在 Pod 端或客户端。因此,您需要查找它们的配置设置。

相关内容