Service 是什么
学习目标
- 理解 Service 解决什么问题
- 掌握 Service 的核心概念
- 了解 Service 与 Pod 的关系
核心概念
一句话解释
Service 是 Kubernetes 中用于暴露一组 Pod 作为网络服务的抽象,提供稳定的访问入口和负载均衡。
解决什么问题
问题:Pod 是临时的
┌─────────────────────────────────────┐
│ Pod 1 (IP: 10.244.1.5) │
│ Pod 2 (IP: 10.244.2.8) │
│ Pod 3 (IP: 10.244.1.12) │
└─────────────────────────────────────┘
问题:
- Pod IP 会变化(重启、扩缩容)
- 如何稳定访问?
- 如何负载均衡?
Service 解决方案:
┌─────────────────────────────────────┐
│ Service (稳定 IP: 10.96.0.100) │
│ ┌─────────┐ ┌─────────┐ │
│ │ Pod 1 │ │ Pod 2 │ ... │
│ └─────────┘ └─────────┘ │
└─────────────────────────────────────┘
稳定的访问入口 + 自动负载均衡
Service 核心概念
| 概念 | 说明 | 作用 |
|---|---|---|
| ClusterIP | 集群内部 IP | 集群内访问 |
| NodePort | 节点端口 | 外部访问 |
| LoadBalancer | 负载均衡器 | 云环境外部访问 |
| ExternalName | 外部名称 | 访问外部服务 |
Service 与 Pod 的关系
┌─────────────────────────────────────────────┐
│ Service │
│ selector: app: my-app │
│ ports: port: 80, targetPort: 8080 │
└─────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Pod 1 │ │ Pod 2 │ │ Pod 3 │
│ app:my-app│ │ app:my-app│ │ app:my-app│
│ port:8080 │ │ port:8080 │ │ port:8080 │
└───────────┘ └───────────┘ └───────────┘
Service 工作流程
1. 创建 Service
└─ 指定 selector 和 ports
2. Endpoints Controller
└─ 监听 Pod 变化
└─ 更新 Endpoints 列表
3. kube-proxy
└─ 维护 iptables/IPVS 规则
└─ 实现负载均衡
4. 客户端访问
└─ 访问 Service IP/域名
└─ 路由到后端 Pod
Service 特性
| 特性 | 说明 |
|---|---|
| 稳定 IP | Service IP 不会变化 |
| 负载均衡 | 自动分发请求到后端 Pod |
| 服务发现 | 通过 DNS 名称访问 |
| 健康检查 | 自动移除不健康的 Pod |
实践练习
练习 1:理解 Service
回答以下问题:
- Service 解决了什么问题?
- Service 如何找到后端 Pod?
- Service 的访问入口是什么?
练习 2:画图
画出 Service 的架构: Client → Service (ClusterIP) → Pod 1, Pod 2, Pod 3
常见误解
1. Service 不是负载均衡器
Service:服务抽象
LoadBalancer:负载均衡器实现
Service 包含负载均衡功能,但不仅仅是负载均衡
2. Service 不需要手动配置 Pod IP
错误:手动指定 Pod IP
正确:使用 selector 自动匹配 Pod
Service 通过 label selector 自动发现 Pod
小结
| 要点 | 说明 |
|---|---|
| Service | 服务抽象层 |
| 稳定入口 | 提供稳定的访问 IP/域名 |
| 负载均衡 | 自动分发请求到后端 Pod |
| 服务发现 | 通过 DNS 名称访问 |
| 核心价值 | 解决 Pod IP 变化问题 |
练习编辑器
bash
Loading...