32·Service进阶

Service 类型

kubernetesservicenetworking

Service 类型

学习目标

  1. 掌握 Kubernetes Service 的四种类型
  2. 理解每种类型的使用场景
  3. 能够选择合适的 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

类型特性对比

特性ClusterIPNodePortLoadBalancerExternalName
集群内访问
集群外访问
自动端口分配
云集成
DNS CNAME

实践练习

练习 1:类型选择

为以下场景选择合适的 Service 类型:

  1. 内部微服务通信
  2. 开发环境的 Web 应用
  3. 生产环境的 API 服务
  4. 访问外部数据库

练习 2:创建 Service

创建不同类型的 Service:

  1. 创建 ClusterIP Service
  2. 创建 NodePort Service
  3. 创建 LoadBalancer Service

常见误解

1. NodePort 不是生产环境首选

NodePort:简单但有限制
- 端口范围限制 (30000-32767)
- 需要知道节点 IP
- 无自动负载均衡

生产环境:使用 LoadBalancer 或 Ingress

2. ExternalName 不代理流量

ExternalName:DNS CNAME 记录
- 不代理流量
- 只是 DNS 重定向
- 适合访问外部服务

小结

要点说明
ClusterIP集群内部访问(默认)
NodePort节点端口外部访问
LoadBalancer云环境负载均衡器
ExternalName外部服务 DNS CNAME
选择原则根据访问范围选择类型

练习编辑器

bash
Loading...

继续学习

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