Service 类型
学习目标
- 掌握 Kubernetes Service 的四种类型
- 理解每种类型的使用场景
- 能够选择合适的 Service 类型
核心概念
一句话解释
Kubernetes 提供四种 Service 类型:ClusterIP、NodePort、LoadBalancer、ExternalName,用于不同的访问场景。
四种 Service 类型
┌─────────────────────────────────────────────────────────┐
│ Service 类型 │
├─────────────┬─────────────┬─────────────┬─────────────┤
│ ClusterIP │ NodePort │ LoadBalancer│ ExternalName│
│ 集群内访问 │ 节点端口 │ 负载均衡器 │ 外部名称 │
└─────────────┴─────────────┴─────────────┴─────────────┘
类型对比
| 类型 | 访问范围 | 使用场景 | 复杂度 |
|---|---|---|---|
| ClusterIP | 集群内部 | 内部服务通信 | 低 |
| NodePort | 集群外部 | 开发测试、简单外部访问 | 中 |
| LoadBalancer | 云环境外部 | 生产环境外部访问 | 高 |
| ExternalName | 集群外部 | 访问外部服务 | 低 |
访问范围图示
外部网络
│
▼
┌─────────────────────────────────────────┐
│ LoadBalancer │
│ ┌─────────────────────────────────┐ │
│ │ NodePort (30000-32767) │ │
│ │ ┌─────────────────────────┐ │ │
│ │ │ ClusterIP (集群内) │ │ │
│ │ │ ┌─────────────────┐ │ │ │
│ │ │ │ Pod 1, Pod 2 │ │ │ │
│ │ │ └─────────────────┘ │ │ │
│ │ └─────────────────────────┘ │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
类型选择指南
需要集群内访问?
├─ 是 → ClusterIP
└─ 否 → 需要云负载均衡器?
├─ 是 → LoadBalancer
└─ 否 → 需要外部访问?
├─ 是 → NodePort
└─ 否 → 需要访问外部服务?
└─ 是 → ExternalName
Service 类型详解
ClusterIP(默认)
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ClusterIP
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
NodePort
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
nodePort: 30080
LoadBalancer
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
ExternalName
apiVersion: v1
kind: Service
metadata:
name: external-service
spec:
type: ExternalName
externalName: api.example.com
类型特性对比
| 特性 | ClusterIP | NodePort | LoadBalancer | ExternalName |
|---|---|---|---|---|
| 集群内访问 | ✅ | ✅ | ✅ | ❌ |
| 集群外访问 | ❌ | ✅ | ✅ | ❌ |
| 自动端口分配 | ✅ | ✅ | ✅ | ❌ |
| 云集成 | ❌ | ❌ | ✅ | ❌ |
| DNS CNAME | ❌ | ❌ | ❌ | ✅ |
实践练习
练习 1:类型选择
为以下场景选择合适的 Service 类型:
- 内部微服务通信
- 开发环境的 Web 应用
- 生产环境的 API 服务
- 访问外部数据库
练习 2:创建 Service
创建不同类型的 Service:
- 创建 ClusterIP Service
- 创建 NodePort Service
- 创建 LoadBalancer Service
常见误解
1. NodePort 不是生产环境首选
NodePort:简单但有限制
- 端口范围限制 (30000-32767)
- 需要知道节点 IP
- 无自动负载均衡
生产环境:使用 LoadBalancer 或 Ingress
2. ExternalName 不代理流量
ExternalName:DNS CNAME 记录
- 不代理流量
- 只是 DNS 重定向
- 适合访问外部服务
小结
| 要点 | 说明 |
|---|---|
| ClusterIP | 集群内部访问(默认) |
| NodePort | 节点端口外部访问 |
| LoadBalancer | 云环境负载均衡器 |
| ExternalName | 外部服务 DNS CNAME |
| 选择原则 | 根据访问范围选择类型 |
练习编辑器
bash
Loading...