云原生是大型架构的核心,下面我重点详解K8S负载均衡@mikechen
K8S
Kubernetes(简称 K8S),是用于容器编排的开源平台,负责容器的部署、扩缩容和服务发现。
在微服务架构中,应用通常会,部署多个副本来实现高可用与水平扩展。
而如何高效地分发流量到这些副本,就是负载均衡要解决的核心问题。
K8S 负载均衡原理
K8S的负载均衡,可以分为内部和外部两大类。
内部负载均衡通过服务(Service),将流量分发给集群中的Pod;
外部负载均衡则通过云厂商、或第三方负载均衡器,将外部流量引导到集群。
内部负载均衡
服务内部负载均衡,负责在Kubernetes集群内部实现请求的均衡转发。
apiVersion: v1 kind: Service metadata: name: user-service spec: type: ClusterIP selector: app: user ports: - port: 8080 targetPort: 8080
保障同一服务多个Pod实例中的请求负载均匀分配,提升性能和高可用性。
这种负载均衡一般不可被集群外部直接访问,只对集群内部应用开放。
外部负载均衡
服务外部负载均衡,负责将集群外部请求均衡地分发到集群中的服务,实现对外高可用访问。
常依赖云平台提供负载均衡服务,自动配置外部访问。
通常包括 NodePort、LoadBalancer 和 Ingress 三种方式。
apiVersion: v1 kind: Service metadata: name: web-nodeport spec: type: NodePort selector: app: web ports: - port: 80 targetPort: 8080 nodePort: 30080
K8S 负载均衡策略
轮询(Round Robin):简单公平地将请求轮流分发到后端 Pod,常见于很多代理和云负载均衡器。
最少连接(Least Connections):将新连接分配给当前连接数最少的后端,适用于连接时间差异大的场景。
基于哈希(Session Affinity / IP Hash):通过来源 IP 或请求信息固定将同一来源请求路由到同一后端。
基于权重(Weighted):为后端实例设置权重,以不同概率分配流量,常见于灰度发布与流量迁移。