kubernetes - kube-proxy的代理模式中的userspace模式是什么意思?

标签 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.
...

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

谁能告诉我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 中设置注释来切换行为。

关于kubernetes - kube-proxy的代理模式中的userspace模式是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36088224/

相关文章:

kubernetes - 为什么/var/run/secrets/kubernetes.io/serviceaccount/token 是 Pod 中的空文件?

docker - Angular 6 + Nginx + Docker + Kubernetes : How to configure environment variables for different environments

kubernetes - kubectl apply 不允许超过 63 个字符的 metadata.labels 值

Kubernetes:来自另一个 pod 的 kafka pod 可修复性问题

kubernetes - 高可用性配置中的Kubernetes-Mesos

docker - 尝试在 Raspberry Pi 3B+ 上运行 OpenFaas 函数时出现 ImageInspectError

kubernetes - 在K8S中,每个kube-proxy(在每个节点上运行)是否都具有相同的实现?

kubernetes - 使用 kube-proxy 进行负载均衡

kubernetes - 故障转移机制在kubernetes服务中如何工作?