18

kube-proxy 有一个选项叫 --proxy-mode,根据帮助信息,这个选项可以是userspaceiptables。(见下文)

# 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 在用户空间模式下运行时的工作原理是什么?

4

1 回答 1

66

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

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

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

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

于 2016-03-18T15:46:39.710 回答