一、Service核心概念
Service通过标签选择器(Label Selector)关联Pod,为动态变化的Pod集合提供稳定的虚拟IP和DNS名称,主要解决:
- 服务发现
- 负载均衡
- 流量路由
二、Service类型详解
1. ClusterIP(默认类型)
作用:创建仅供集群内部访问的虚拟IP
使用场景:
- 数据库服务(如MySQL/Redis)
- 微服务间内部通信
- 不需要外网访问的后端服务
示例配置片段:
apiVersion: v1
kind: Service
metadata:
name: internal-service
spec:
type: ClusterIP
selector:
app: backend
ports:
- protocol: TCP
port: 80
targetPort: 9376
2. NodePort
作用:通过节点IP+静态端口(30000-32767)暴露服务
使用场景:
- 开发测试环境
- 非生产环境的临时访问
- 需要直连节点的特殊场景
示例配置片段:
apiVersion: v1
kind: Service
metadata:
name: nodeport-service
spec:
type: NodePort
selector:
app: frontend
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30007
3. LoadBalancer
作用:自动创建云平台负载均衡器并分配外部IP
使用场景:
- 生产环境对外服务
- 云环境下的公网暴露
- 需要集成云平台LB功能的场景
示例配置片段:
apiVersion: v1
kind: Service
metadata:
name: lb-service
spec:
type: LoadBalancer
selector:
app: web
ports:
- protocol: TCP
port: 443
targetPort: 8443
三、流量路径对比
外部用户访问路径:
LoadBalancer -> NodePort -> ClusterIP -> Pod
开发测试访问:
NodePort -> ClusterIP -> Pod
集群内部访问:
ClusterIP -> Pod
四、选择建议
类型 | 网络层级 | 典型延迟 | 成本 | 适用阶段 |
---|---|---|---|---|
ClusterIP | 集群内部 | 最低 | 无额外 | 生产 |
NodePort | 节点级别 | 中等 | 低 | 开发/测试 |
LoadBalancer | 云平台LB | 最高 | 较高 | 生产 |
实际生产环境中,通常结合Ingress控制器使用,通过LoadBalancer暴露Ingress,再由Ingress路由到不同的ClusterIP Service。