本文发布于Cylon的收藏册,转载请著名原文链接~
概述
在之前有一个系列提到了扩展proxier,但可能细心的同学注意到,作为一个外部的LB,市场上存在一些开源的为kubernetes集群提供的LB,这不是舍近求远吗?而 Google工程师 Adam Dunstan 的 文章 [1] 对比了这些LB的区别(中文翻译备份 [2] ),例如:
文章提出了一个LB实现的基本目标为:必要的简单网络组件,与可扩展的集群操作
- 启动受控的集群service/应用的外部访问
- 外部资源的预配置
- 易于整合自动化的工作流程(CI/CD)
那么这些LB与 kube-proxy 甚至于 IPVS/IPTables 有什么区别呢?
这些LB的核心是为集群service提供一个外部IP,而service功能本身还是由 kube-proxy,IPVS 提供,在这点 MetalLB 介绍中提到了这个问题
In layer 2 mode, all traffic for a service IP goes to one node. From there,
kube-proxy
spreads the traffic to all the service’s pods. [3]After the packets arrive at the node,
kube-proxy
is responsible for the final hop of traffic routing, to get the packets to one specific pod in the service. [4]
通过kubernetes service 资源方向表示,是为EXTERNAL-IP部分分配一个IP地址,而从来不是说内部的LB
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 192.168.0.1 <none> 443/TCP 196d
关于MetalLb的使用可以参考视频:Set up MetalLB Load Balancing for Bare Metal Kubernetes
正如注解所说,工作与L2的模式下,流量会到达一个Node,接下来通过kube-proxy广播至所有的Pod,这种模式下是否可以做到HA,还有待测试。
接下来提到 Proixer,Proixer是对于集群(内)正常工作的一个保证,最基础的一点则是Kubernetes service 需要每个Pod可以访问到,所以 kube-proxy 则完全不同于 kubernetes LB
总结
Kubernetes LB是Kubernetes的扩展功能,主要特点体现在下列方面:
- LB 是要作用是为service提供一个外部IP
- 通常情况下,LB支持的都是 L2, L3 网络,而非传统的L4, L7 LB
- kube-proxy并不可以被这类LB所替代,因为这类LB的端点是到service
- 目前开源的 kube-proxy repleacement 应该只有 eBPF
Reference
本文发布于Cylon的收藏册,转载请著名原文链接~
链接:https://www.oomkill.com/2023/02/kubernetes-lb/
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。