首页/云/云与容器速查/LoadBalancer 云负载均衡
Kubernetes68 条

LoadBalancer 云负载均衡

向云平台申请外部负载均衡并自动绑定 Service:分配公网/内网 VIP,是生产对外入口的标准姿势;自建集群没有云控制器时 EXTERNAL-IP 会一直 pending。

云与容器速查云更新于 2026-10-13

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:每个服务各起一个负载均衡通常更贵,证书与访问控制也更难统一管理。
负载均衡后端健康检查失败时流量会被摘除,前端表现为全部报错:先确认节点端口是否可达、安全组是否放行节点端口范围,再怀疑应用本身的健康检查实现。

易错点

  • 外部地址长期 pending:云控制器未安装,或配额与权限不足,需要先查控制器事件
  • 负载均衡后健康检查失败:节点端口不通或安全组未放行相关端口范围
  • 内网与公网形态选错,服务要么意外暴露到公网,要么外部完全访问不到
  • 把负载均衡当作唯一入口却不做多可用区部署,可用区故障时整体不可用

数据来源与参考

  • Kubernetes Docs:Service(LoadBalancer)
  • 各云厂商 CCM 文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌