
深入浅出 Kubernetes Service详解 type: LoadBalancer 的工作原理与流量生命周期在云原生架构中我们将应用部署到 Kubernetes (K8s) 集群后面临的第一个核心问题就是如何让集群外部的用户或系统安全、高效地访问我们的服务Kubernetes 提供了多种 Service 类型其中type: LoadBalancer是生产环境暴露服务最常用的标准方案。本文将结合一个实际的 YARP 反向代理网关配置带你彻底搞懂LoadBalancer的核心作用、流量流向以及它背后的工作机制。一、 先看一段典型的 K8s 配置假设我们正在集群中部署一个基于 .NET 的YARP (Yet Another Reverse Proxy)网关为了让外部流量能够打到这个网关上我们编写了如下的 Service 配置文件service.yamlapiVersion:v1kind:Servicemetadata:name:yarp-ingress-lbnamespace:defaultspec:selector:app:yarp-gateway# 1. 寻找带有该标签的 Pod 容器ports:-name:custom-portprotocol:TCPport:9999# 2. 负载均衡器/Service 对外开放的 9999 端口targetPort:9999# 3. 流量最终直接转发到容器内部监听的 9999 端口type:LoadBalancer# 4. 声明服务类型为外部负载均衡器二、 type: LoadBalancer 的核心作用是什么简单来说type: LoadBalancer的核心作用是自动在集群外部创建一个负载均衡器实例为集群提供一个统一、固定且高可用的外网或内网访问入口。在没有LoadBalancer之前K8s 暴露服务主要靠以下两种方式但它们都有各自的局限性ClusterIP默认类型。只能在集群内部访问外部完全隔绝。NodePort在每个节点上随机开放一个大端口30000-32767。如果节点 IP 变动或节点宕机外部客户端就需要手动修改连接地址极不稳定。而LoadBalancer完美解决了这些痛点。它像是集群大门外的一位高级向导无论后端的服务器Node如何漂移或者容器Pod如何扩缩容外部用户只需要认准负载均衡器这一个固定 IP 即可。三、 拆解流量是如何一步步进到容器的结合上面的 YAML 配置当一个外部请求试图访问我们的 YARP 网关时流量会经历以下4 个生命周期阶段[ 外部客户端 ]│ 访问公网 IP:9999[ 云厂商负载均衡器 (SLB/ALB/NLB) ]│ 分发流量到集群节点[ K8s 节点网络 / Service (Port: 9999) ]│ 通过 iptables/IPVS 路由[ 目标 Pod 容器 (targetPort: 9999) ] - 成功进入 YARP 网关第一步客户端发起请求用户访问云厂商分配给该 LoadBalancer 的External IP外部公网 IP指定端口为port: 9999。第二步云端负载均衡分发外部负载均衡器接收到流量后会自动将请求分发到 Kubernetes 集群中健康的工作节点Worker Nodes。第三步Service 内部路由流量到达节点后K8s 的kube-proxy组件会通过内核的 iptables 或 IPVS 规则识别出这是发送给yarp-ingress-lb这个 Service 的流量。第四步容器精准接收Service 根据selector: app: yarp-gateway标签找到当前存活的 Pod并将流量精准投递到容器内部正在监听的targetPort: 9999上。四、 平台差异公有云 vs 自建本地集群细心的同学可能会发现在不同的环境下部署相同的 YAML结果却完全不同1. 托管公有云环境如阿里云、腾讯云、AWS、Azure这是LoadBalancer的标准舞台。当你提交这段 YAML 后云厂商的 Cloud Provider 控制器会立刻识别并在你的云账号下自动创建并计费一个物理负载均衡器如阿里云 SLB、AWS NLB。成功后通过kubectl get svc可以看到EXTERNAL-IP一栏会显示一个真实的公网 IP。2. 本地自建裸金属集群Bare-metal / Minikube / K3s如果你在自己搭建的虚拟机或物理机上运行这段 YAML你会发现EXTERNAL-IP会长时期卡在pending状态。原因自建集群没有对接云厂商的 APIK8s 找不到谁来帮它生成这个“外部负载均衡器”。本地解决方案测试环境可以使用kubectl port-forward进行端口转发。生产环境需要额外在集群内安装开源组件MetalLB或OpenELB它们可以在局域网内通过 ARP/BGP 协议模拟出 LoadBalancer 的效果。五、 总结与延伸在云原生微服务架构中type: LoadBalancer配合YARP 网关或Ingress 控制器是非常经典的组合。LoadBalancer负责在最外层接住四层TCP/UDP的流量大闸YARP / Ingress则在七层HTTP/HTTPS负责具体的路由重写、权限验证和灰度发布。希望本文能帮你理清 K8s 网络的一层迷雾。如果你在配置过程中遇到了EXTERNAL-IP无法分配、或者流量无法转发的问题欢迎在评论区留言交流标签#Kubernetes #K8s #LoadBalancer #YARP #云原生 #容器