k8s | 深入理解组件kube-proxy
kube-proxy是一个关键的组件,它负责网络代理和负载均衡,就像一个智能的邮递员,帮助将来自外部的请求正确地路由到集群内的各个服务。
原理
kube-proxy
监听 API server
中 service
和 endpoint
的变化情况,并通过 userspace
、iptables
、ipvs
或 winuserspace
等 proxier
来为服务配置负载均衡
当在集群中创建一个Service时,kube-proxy会创建一个虚拟IP地址,并将该虚拟IP映射到Service所管理的所有Pod的IP。这就好像创建了一个商店,并给它分配了一个虚拟门面。
接下来,kube-proxy会将这个虚拟IP地址与一个网络代理(比如iptables规则,或者代理进程)相关联。
启动 kube-proxy
kube-proxy --kubeconfig=/var/lib/kubelet/kubeconfig --cluster-cidr=10.240.0.0/12 --feature-gates=ExperimentalCriticalPodAnnotation=true --proxy-mode=iptables
通过 Iptables, Ipvs 实现负载均衡
iptables是Linux中的一种防火墙技术,通过配置规则来控制网络流量,从而保护网络安全。iptables能够支持多种网络负载均衡算法,但它并不能实现高性能的负载均衡,适用于对性能要求较低的场景。所有发送到虚拟IP的请求都将通过iptables规则转发到正确的后端Pod,从而实现负载均衡
ipvs是Linux中的一种内核级别的负载均衡技术,它能够在内核中实现负载均衡,从而提高网络服务的性能和可用性。ipvs能够支持多种负载均衡算法,并且具有高性能、高可用性和高可扩展性的特点。适用于对性能要求较高的场景
Kube-proxy的不足之处
kube-proxy 目前仅支持 TCP 和 UDP,不支持 HTTP 路由,并且也没有健康检查机制。这些可以通过自定义 Ingress Controller 的方法来解决。
评论区