kube-proxy有一个名为--proxy-mode的选项,根据帮助消息,此选项可以是用户空间或 iptables 。(见下文)< / p>
# 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在用户空间模式下运行时的工作原理是什么?
答案 0 :(得分:45)
Userspace和iptables指的是实际处理连接转发的内容。在这两种情况下,都会安装本地iptables规则来拦截具有与服务关联的目标IP地址的出站TCP连接。
在用户空间模式下,iptables规则转发到go二进制文件(kube-proxy)正在侦听连接的本地端口。二进制文件(在用户空间中运行)终止连接,建立与服务后端的新连接,然后将请求转发给后端并将响应转发回本地进程。用户空间模式的一个优点是,因为连接是从应用程序创建的,如果连接被拒绝,应用程序可以重试到不同的后端。
在iptables模式下,安装iptables规则以直接将发往服务的数据包转发到服务的后端。这比将数据包从内核移动到kube-proxy然后再返回内核更有效,因此可以提高吞吐量和延迟尾部延迟。主要缺点是调试起来比较困难,因为不是将日志写入/var/log/kube-proxy
的本地二进制文件,而是必须从内核处理iptables规则中检查日志。
在这两种情况下,您的计算机上都会运行一个kube-proxy二进制文件。在用户空间模式下,它将自身作为代理插入;在iptables模式下,它将配置iptables而不是代理连接本身。相同的二进制文件在两种模式下都有效,并且通过标志或在节点的apiserver中设置注释来切换行为。