TCP

最大连接数

一个TCP连接由4个因素决定:源IP,源port,目标IP和目标port。在一个client向server的某服务建立连接的例子中,这个client能够建立的最大连接数将受限于6万个左右,因为源IP,目标IP和目标port是固定的,可变的只有是源port,但它最大不能超过65536,所以最多大约是6万个连接。

在某些场景下,这个限制会让系统资源无法充分被利用。例子:使用一个网关终止TLS,将流量分发到后端服务节点,并部署到Kubernetes中,如下图:

后端服务通过Service暴露给网关节点。K8S内置的基于DNS的服务发现将Service端点主机名解释成固定ClusterIP。对单个网关节点来说,源IP,目标IP和目标port是固定的,可变的只有是源port,连接数最多大约是6万个。要突破限制,其中一个办法是扩展目标IP。

使用多个Service暴露通过一组后端节点,将产生多个ClusterIP。Gateway可以使用多个目标IP来连接后端服务。

或者使用Headless Service让网关节点可同时直接连接不同的后端服务。

更极端的做法是,将网关和后端服务放进同一个Pod中作为两个Container,它们将共享网络。增加本地loop_back地址,以使得网关Container可以通过不同的本地地址连接到后端服务Container。