Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes负载平衡HTTP/1.1请求_Kubernetes_Aws Load Balancer_Http 1.1 - Fatal编程技术网

Kubernetes负载平衡HTTP/1.1请求

Kubernetes负载平衡HTTP/1.1请求,kubernetes,aws-load-balancer,http-1.1,Kubernetes,Aws Load Balancer,Http 1.1,正如我们所知,默认情况下,HTTP 1.1使用持久连接,这是一种长期存在的连接。对于任何处于集群模式的服务,它都是基于L4的负载平衡器 假设我有一个运行web服务器的服务,这个服务包含3个pod,我想知道HTTP/1.1请求是否可以分发到3个pod 有人能帮你澄清一下吗?这个网页完美地解决了你的问题: 本着StackOverflow的精神,让我在这里总结一下网页: TLDR:Kubernetes不能平衡长期存在的连接,一些POD可能会收到比其他POD更多的请求 Kubernetes服务不存在。

正如我们所知,默认情况下,HTTP 1.1使用持久连接,这是一种长期存在的连接。对于任何处于集群模式的服务,它都是基于L4的负载平衡器

假设我有一个运行web服务器的服务,这个服务包含3个pod,我想知道HTTP/1.1请求是否可以分发到3个pod


有人能帮你澄清一下吗?

这个网页完美地解决了你的问题:

本着StackOverflow的精神,让我在这里总结一下网页:

  • TLDR:Kubernetes不能平衡长期存在的连接,一些POD可能会收到比其他POD更多的请求

  • Kubernetes服务不存在。没有进程侦听服务的IP地址和端口

  • 服务IP地址仅用作占位符,该占位符将由iptables规则使用精心编制的随机化转换为其中一个目标POD的IP地址

  • 来自客户机的任何连接(无论来自集群内部还是外部)都直接与Pod建立,因此对于HTTP 1.1持久连接,将在客户机与特定Pod之间保持连接,直到任意一方关闭为止

  • 因此,使用单个持久连接的所有请求都将路由到单个Pod(在建立连接时由iptables规则选择),而不会与其他Pod进行负载平衡

  • 其他信息:


    根据W3C RFC2616(),在客户机和服务器之间服务的任何代理服务器都必须维护从客户机到自身以及从自身到服务器的HTTP 1.1持久连接。

    使用单个长期连接的一组请求将转到同一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设置或服务器应用程序无论什么原因,它都会关闭。