【发布时间】:2021-02-02 17:27:12
【问题描述】:
我们知道,默认情况下,HTTP 1.1 使用持久连接,这是一个长期连接。对于Kubernetes中的任何服务,例如clusterIP模式,都是基于L4的负载均衡器。
假设我有一个运行 web 服务器的服务,该服务包含 3 个 pod,我想知道 HTTP/1.1 请求是否可以分发到 3 个 pod?
谁能帮忙澄清一下?
【问题讨论】:
-
一组使用单个长连接的请求将转到同一个 pod。使用不同长期连接的不同请求集可能会分发到另一个 pod。
-
是否有可能将一组使用单个长寿命连接的请求平均分配到不同的 pod?
-
连接是客户端应用程序和服务端应用程序(即pod内部容器内运行的应用程序实例)之间建立的通道,因此服务端应用程序端切换到没有意义另一个实例,而连接已经建立。如果我们要设计这样的魔法,那么 Kubernetes 必须以某种方式模拟连接需要传输到的应用程序实例的 TCP 握手(SYN、SYN-ACK、ACK),以使客户端假设它仍在与相同的服务器应用程序实例。
-
你知道什么情况下HTTP/1.1长连接会断开吗?
-
HTTP 只是 TCP 之上的另一层,因此要关闭 HTTP 连接,客户端或服务器应用程序都需要发送一个 FIN 数据包。在 HTTP 1.0 中,服务器应用程序总是会在一个请求-响应周期后发送 FIN 数据包来关闭连接。在 HTTP 1.1 中,客户端关闭连接或服务器应用程序也可以由于 KeepAliveTimeout 设置或服务器应用程序因任何原因关闭而关闭连接。
标签: kubernetes aws-load-balancer http-1.1