35·Service进阶

LoadBalancer 服务

kubernetesserviceloadbalancernetworking

LoadBalancer 服务

学习目标

  1. 理解 LoadBalancer 的工作原理
  2. 掌握 LoadBalancer 的配置方法
  3. 了解 LoadBalancer 的使用场景

核心概念

一句话解释

LoadBalancer 是 Kubernetes 中用于在云环境中自动创建负载均衡器的 Service 类型,提供外部访问入口。

LoadBalancer 工作原理

外部客户端
    │
    ▼
┌─────────────────────────────────────────┐
│  云负载均衡器                            │
│  外部 IP: 203.0.113.10                  │
│  端口: 80                               │
└─────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────┐
│  Kubernetes 集群                        │
│  ┌─────────────────────────────────┐   │
│  │  NodePort Service               │   │
│  │  nodePort: 30080                │   │
│  │  ┌─────────────────────────┐   │   │
│  │  │  ClusterIP Service      │   │   │
│  │  │  IP: 10.96.0.100        │   │   │
│  │  └─────────────────────────┘   │   │
│  └─────────────────────────────────┘   │
└─────────────────────────────────────────┘
        │           │           │
        ▼           ▼           ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│   Pod 1   │ │   Pod 2   │ │   Pod 3   │
└───────────┘ └───────────┘ └───────────┘

LoadBalancer 配置

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 8080

配置参数说明

参数说明默认值
typeService 类型LoadBalancer
portService 端口
targetPortPod 端口与 port 相同
loadBalancerIP负载均衡器 IP自动分配
loadBalancerSourceRanges源 IP 范围无限制

LoadBalancer 访问方式

1. 通过外部 IP 访问
   curl http://203.0.113.10:80

2. 通过 DNS 访问(如果配置了 DNS)
   curl http://my-service.example.com:80

LoadBalancer 与 NodePort 关系

┌─────────────────────────────────────────┐
│  LoadBalancer Service                   │
│  type: LoadBalancer                     │
│  外部 IP: 203.0.113.10                  │
└─────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────┐
│  自动创建 NodePort Service              │
│  type: NodePort                         │
│  nodePort: 30080                        │
└─────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────┐
│  自动创建 ClusterIP Service             │
│  type: ClusterIP                        │
│  IP: 10.96.0.100                        │
└─────────────────────────────────────────┘

LoadBalancer 网络流程

外部请求
    │
    ▼
云负载均衡器 (203.0.113.10:80)
    │
    ▼
节点 NodePort (192.168.1.10:30080)
    │
    ▼
kube-proxy (iptables/IPVS)
    │
    ▼
ClusterIP Service (10.96.0.100:80)
    │
    ▼
后端 Pod (10.244.1.5:8080)

LoadBalancer 特性

特性说明
云集成自动创建云负载均衡器
外部 IP自动分配外部 IP
负载均衡云负载均衡器提供负载均衡
健康检查云负载均衡器提供健康检查
SSL 终止云负载均衡器可终止 SSL

LoadBalancer 使用场景

1. 生产环境外部访问
   - Web 应用
   - API 服务
   - 微服务网关

2. 云环境部署
   - AWS ELB/ALB
   - GCP Load Balancer
   - Azure Load Balancer

3. 需要 SSL 终止
   - HTTPS 访问
   - 证书管理

4. 需要健康检查
   - 自动移除不健康节点
   - 高可用性

LoadBalancer 云提供商支持

云提供商负载均衡器类型特性
AWSELB/ALB/NLB多种类型选择
GCPNetwork LB/HTTP(S) LB集成 GCP 服务
AzureAzure LB集成 Azure 服务
阿里云SLB/ALB集成阿里云服务

LoadBalancer 限制

1. 云环境依赖
   - 仅支持云环境
   - 本地环境需要 MetalLB 等

2. 成本
   - 云负载均衡器有成本
   - 每个 Service 一个负载均衡器

3. 端口限制
   - 通常支持常用端口
   - 可能有端口限制

4. 配置复杂
   - 需要云提供商配置
   - 可能需要额外权限

LoadBalancer 与 Ingress

LoadBalancer:
- 每个 Service 一个负载均衡器
- 成本高
- 简单直接

Ingress:
- 一个负载均衡器多个 Service
- 成本低
- 功能更丰富

实践练习

练习 1:创建 LoadBalancer Service

创建一个 LoadBalancer Service:

apiVersion: v1
kind: Service
metadata:
  name: web-loadbalancer
spec:
  type: LoadBalancer
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 8080

练习 2:验证 LoadBalancer

  1. 创建 Service
  2. 等待外部 IP 分配
  3. 通过外部 IP 访问服务
  4. 验证负载均衡

常见误解

1. LoadBalancer 不是本地环境使用

错误:本地环境使用 LoadBalancer
正确:本地环境使用 NodePort 或 Ingress

LoadBalancer 需要云环境支持

2. LoadBalancer 不是免费的

错误:LoadBalancer 无成本
正确:云负载均衡器有成本

每个 Service 一个负载均衡器,成本可能很高

小结

要点说明
LoadBalancer云环境负载均衡器
外部 IP自动分配外部 IP
云集成自动创建云负载均衡器
使用场景生产环境外部访问
限制云环境依赖、成本

练习编辑器

bash
Loading...

继续学习

完成本课后,建议继续学习下一课「ExternalName 服务」 以巩固所学知识。