用户空间模式在kube-proxy的代理模式中意味着什么?

ax0*_*03d 15 kubernetes kube-proxy

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.
...
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚用户空间模式在这里意味着什么.

任何人都可以告诉我kube-proxy在用户空间模式下运行时的工作原理是什么?

Rob*_*ley 49

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

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

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

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

  • ax003d你应该接受答案,如果它是令人满意的. (3认同)
  • kube-proxy不在暂停二进制文件中.pause binary用于保存共享同一pod的所有容器的网络命名空间.kube-proxy既可以作为独立二进制文件运行,也可以作为容器内部运行,具体取决于您对Kubernetes的分布. (3认同)
  • 二进制文件是kube-proxy二进制文件,它在用户空间中运行(作为集群中每个节点上的容器).终止用户空间中的连接比让内核重写数据包的目标地址效率低,因为数据包在通过线路发送之前多次遍历用户空间/内核边界. (2认同)
  • 是的,它是可以重试不同后端的代理(没有需要更改的应用程序代码).因为用户空间代理可以检测到无法建立连接,所以它可以尝试使用不同的后端.使用iptables,数据包会被重写,但没有检查它们是否到达目的地,因此需要在应用程序层进行任何重试. (2认同)