1. Kubernetes Service 基础概念解析
在Kubernetes集群中,Service是连接应用组件的重要网络抽象层。它本质上是一组Pod的逻辑集合和访问策略的定义,为动态变化的Pod提供稳定的访问端点。想象一下,Service就像酒店的前台服务 - 无论后厨(Pod)如何轮换员工,客人只需要记住前台(Service)这个固定联系方式。
Service通过标签选择器(Label Selector)与Pod建立关联。当我们在YAML中定义selector: app: nginx时,所有带有app=nginx标签的Pod都会被纳入该Service的后端。这种松耦合设计使得Pod可以自由地创建、销毁或迁移,而客户端始终通过不变的Service访问应用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Service 核心类型详解
2.1 ClusterIP:默认的内部服务
这是最基础的Service类型,特点包括:
- 自动分配集群内部IP(如10.96.0.1)
- 仅在集群内部可访问
- 通过kube-proxy实现负载均衡
典型使用场景:
yaml复制apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
type: ClusterIP
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
2.2 NodePort:外部访问的基础方案
在ClusterIP基础上扩展的特性:
- 在每个节点上开放静态端口(30000-32767范围)
- 外部流量通过
<NodeIP>:<NodePort>访问 - 实际生产环境通常配合Ingress使用
配置示例:
yaml复制spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
nodePort: 30080
2.3 LoadBalancer:云厂商集成方案
主要特点:
- 自动创建云负载均衡器(AWS ELB、GCP LB等)
- 分配外部可访问的IP地址
- 会产生云服务费用
3. YAML 定义深度解析
3.1 必备字段剖析
一个完整的Service YAML包含以下核心部分:
yaml复制apiVersion: v1
kind: Service
metadata:
name: web-service
labels:
env: production
spec:
selector:
app: web
tier: frontend
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
关键字段说明:
port: Service
