LoadBalancer 服务
学习目标
- 理解 LoadBalancer 的工作原理
- 掌握 LoadBalancer 的配置方法
- 了解 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
配置参数说明
| 参数 | 说明 | 默认值 |
|---|---|---|
| type | Service 类型 | LoadBalancer |
| port | Service 端口 | 无 |
| targetPort | Pod 端口 | 与 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 云提供商支持
| 云提供商 | 负载均衡器类型 | 特性 |
|---|---|---|
| AWS | ELB/ALB/NLB | 多种类型选择 |
| GCP | Network LB/HTTP(S) LB | 集成 GCP 服务 |
| Azure | Azure 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
- 创建 Service
- 等待外部 IP 分配
- 通过外部 IP 访问服务
- 验证负载均衡
常见误解
1. LoadBalancer 不是本地环境使用
错误:本地环境使用 LoadBalancer
正确:本地环境使用 NodePort 或 Ingress
LoadBalancer 需要云环境支持
2. LoadBalancer 不是免费的
错误:LoadBalancer 无成本
正确:云负载均衡器有成本
每个 Service 一个负载均衡器,成本可能很高
小结
| 要点 | 说明 |
|---|---|
| LoadBalancer | 云环境负载均衡器 |
| 外部 IP | 自动分配外部 IP |
| 云集成 | 自动创建云负载均衡器 |
| 使用场景 | 生产环境外部访问 |
| 限制 | 云环境依赖、成本 |
练习编辑器
bash
Loading...