kubernetes用户态TCP代理实现
在k8s中针对service的访问通常基于kube proxy实现负载均衡,今天我们来探索下基于用户态的TCP代理组件的工业级实现核心设计, 其中包括随机端口生成器、TCP流复制等技术的核心实现 1. 基础筑基 今天主要是聊用户态的转发,而基于内核态的先不聊 1.1 流量重定向 流量重定向通常是指通过内核的netfilter来对数据包进行拦截,将其定向到我们指定的端口,实现对流量的劫持,从而针对流量里面的一些数据包进行一些额外的处理,这个过程对应用来说是完全透明的 1.1.1 目的地址重定向 目的地址重定向是指将针对某个IP或者某个端口的流量,进行重定向,从而实现流量发送的处理,在kube proxy中主要是通过REDIRECT来实现 1.1.2 目标地址转换 目标地址转换主要是指针对REDIRECT出去返回的流量,需要做一个重定向操作,即将其地址返回给本地的代理服务,由本地的代理服务再去实现转发给真正的应用 1.2 TCP代理实现 1.2.1 随机端口 随机端口是指我们要为为对应的Service建立一个一个临时的代理服务器,该代理服务器需要随机选择一个本地端口进行监听 1.2.2 流复制 代理服务器需要将要本地服务发送的数据复制的目标服务, 同时接收目标服务返回的数据,复制给本地服务 2. 核心设计实现 2.1 随机端口分配器 2.1.1 核心数据结构