kube-proxy代理模式下用户空间模式是什么意思?

What does userspace mode means in kube-proxy's proxy mode?

kube-proxy有一个选项叫做--proxy-mode,根据帮助信息,这个选项可以是userspace或者iptables.(见下文)

# kube-proxy -h
Usage of kube-proxy:
...
      --proxy-mode="": Which proxy mode to use: 'userspace' (older, stable) or 'iptables' (experimental). If blank, look at the Node object on the Kubernetes API and respect the 'net.experimental.kubernetes.io/proxy-mode' annotation if provided.  Otherwise use the best-available proxy (currently userspace, but may change in future versions).  If the iptables proxy is selected, regardless of how, but the system's kernel or iptables versions are insufficient, this always falls back to the userspace proxy.
...

我不明白用户空间模式在这里是什么意思。

谁能告诉我kube-proxy运行在userspace模式下的工作原理是什么?

用户空间和 iptables 指的是实际处理连接转发的内容。在这两种情况下,都会安装本地 iptables 规则以拦截具有与服务关联的目标 IP 地址的出站 TCP 连接。

在用户空间模式下,iptables 规则转发到本地端口,go 二进制文件(kube-proxy)正在侦听连接。二进制文件(用户空间中的 运行)终止连接,为服务建立到后端的新连接,然后将请求转发到后端并将响应返回到本地进程。用户空间模式的一个优点是,因为连接是从应用程序创建的,如果连接被拒绝,应用程序可以重试到不同的后端。

在iptables模式下,安装了iptables规则,将发往某个服务的数据包直接转发到该服务的后端。这比将数据包从内核移动到 kube-proxy 然后返回内核更有效,因此它会导致更高的吞吐量和更好的尾部延迟。主要缺点是更难调试,因为您必须检查内核处理 iptables 规则的日志,而不是将日志写入 /var/log/kube-proxy 的本地二进制文件。

在这两种情况下,您的机器上都会有一个 kube-proxy 二进制文件 运行。在用户空间模式下,它作为代理插入自己;在 iptables 模式下,它将配置 iptables 而不是代理连接本身。相同的二进制文件在两种模式下都有效,并且通过标志或通过在节点的 apiserver 中设置注释来切换行为。