LoadBalancer 是什么
LoadBalancer 类型的 Service 会向云平台申请一个外部负载均衡实例,并自动完成后端挂载,最终在 EXTERNAL-IP 处显示分配到的地址。它是生产环境对外暴露入口的标准姿势:自带健康检查、可区分公网与内网形态、证书可以卸载在负载均衡侧。在自建集群上如果没有额外的实现(例如 MetalLB 这类方案),EXTERNAL-IP 会一直停留在 pending 状态。
基本信息
| 工作方式 | 云控制器监听 Service 对象,自动创建负载均衡并挂载后端 |
|---|---|
| 地址表现 | EXTERNAL-IP 显示分配到的外部地址 |
| 自建集群 | 需要额外实现,否则地址长期处于 pending 状态 |
| 公网与内网 | 通过云平台注解控制,例如指定为内网型负载均衡 |
| 成本构成 | 按实例规格与带宽计费,每个 LoadBalancer 型 Service 都是独立开销 |
典型使用场景
- 对外提供 Web 入口,客户端不感知后端节点的增减变化
- 内网型负载均衡供内部系统调用,避免暴露到公网
- 需要统一管理证书时,把 TLS 卸载在负载均衡侧
- 对外提供 TCP 服务,例如数据库代理、消息中间件接入
- 与 Ingress 配合,让多个域名共用一个入口地址
LoadBalancer 示例
LoadBalancer 示例
apiVersion: v1
kind: Service
metadata:
name: web-lb
annotations:
service.beta.kubernetes.io/load-balancer-type: "internal" # 以云厂商注解为准
spec:
type: LoadBalancer
selector:
app: web
ports:
- port: 443
targetPort: 8443
查看分配结果
查看分配结果
kubectl get svc web-lb -o wide # 查看外部地址是否已分配
kubectl describe svc web-lb | grep -A5 Events # 云控制器报错会体现在事件里
kubectl get endpoints web-lb # 确认后端清单是否为空Service 类型对比
| 类型 | 暴露范围 | 典型用途 |
|---|---|---|
| ClusterIP | 仅集群内部 | 服务之间互相调用 |
| NodePort | 每个节点的固定端口 | 临时验证、自建入口方案 |
| LoadBalancer | 集群外部 | 生产环境的对外入口 |
| ExternalName | 仅做 DNS 映射 | 把集群外的服务以名字接入 |
多个服务需要对外时,建议共用一个 Ingress 加一个 LoadBalancer:每个服务各起一个负载均衡通常更贵,证书与访问控制也更难统一管理。
负载均衡后端健康检查失败时流量会被摘除,前端表现为全部报错:先确认节点端口是否可达、安全组是否放行节点端口范围,再怀疑应用本身的健康检查实现。