索引
- 背景知识
- 节点代理模型
- 测试环境
- 实现:通过 userspace socket 实现 proxy
- 实现:通过 iptables 实现 proxy
- 实现:通过 ipvs/ipset 实现 proxy
- 实现:通过 bpf 实现 proxy
- 总结
- 参考文献
- 附录
Kubernetes 中有几种类型的代理。其中有 node proxier 或 kube-proxy
,它在每个节点上反映 Kubernetes API 中定义的服务,可以跨一组后端执行简单的 TCP/UDP/SCTP 流转发 [1]。
为了更好地理解节点代理模型,在这篇文章中,我们将用不同的方法设计和实现我们自己版本的 kube-proxy
; 尽管这些只是 toy-proxy
,但从透明流量拦截、转发、负载均衡等方面来说,它们的工作方式与 K8S 集群中运行的普通 kube-proxy
基本相同。
通过我们的 toy-proxy
程序,非 K8S 节点(不在 K8S 集群中)上的应用程序(无论是宿主本地应用程序,还是在 VM/容器中运行的应用程序)也可以通过 ClusterIP 访问 K8S 服务 – 注意,在 kubernetes 的设计中,ClusterIP 只能在 K8S 集群节点中访问。(在某种意义上,我们的 toy-proxy
程序将非 K8S 节点变成了 K8S 节点。)