Kubernetes Service 详解
Kubernetes Service 详解
一、Service 基本概念
Service 是 Kubernetes 中定义一组 Pod 访问策略的抽象资源,它为 Pod 提供稳定的网络端点,主要解决以下问题:
- 服务发现:动态变化的 Pod IP 访问问题
- 负载均衡:流量在多 Pod 间自动分配
- 解耦:应用与具体 Pod 实例的解耦
二、Service 核心特性
特性 | 说明 |
---|---|
稳定虚拟 IP | 生命周期独立于 Pod |
持久 DNS 名称 | <service>.<namespace>.svc.cluster.local |
负载均衡 | 自动分配请求到健康 Pod |
多种类型 | ClusterIP, NodePort, LoadBalancer 等 |
会话保持 | 通过 sessionAffinity 配置 |
三、Service 类型对比
1. ClusterIP (默认)
apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: MyAppports:- protocol: TCPport: 80 # Service 端口targetPort: 9376 # Pod 端口
特点:
- 仅在集群内部可访问
- 自动分配集群内部虚拟 IP
- 通过 kube-proxy 实现流量转发
2. NodePort
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30007 # 可选,默认 30000-32767
特点:
- 在每个 Node 上开放静态端口
- 外部可通过
NodeIP:NodePort
访问 - 底层仍依赖 ClusterIP
3. LoadBalancer
spec:type: LoadBalancerports:- port: 80targetPort: 80
特点:
- 需要云提供商支持 (AWS ELB, GCP LB 等)
- 自动创建外部负载均衡器
- 产生公网 IP 或 DNS
4. ExternalName
spec:type: ExternalNameexternalName: my.database.example.com
特点:
- 将服务映射到外部 DNS
- 不创建任何代理或端口转发
- 用于集成集群外部服务
四、Service 工作原理
1. 流量转发机制
2. 核心组件协作
- kube-proxy:维护节点上的转发规则
- CoreDNS:提供集群内服务域名解析
- Endpoint Controller:监控 Pod 变化并更新 Endpoints
五、高级配置
1. 会话保持
spec:sessionAffinity: ClientIPsessionAffinityConfig:clientIP:timeoutSeconds: 3600
2. 多端口服务
ports:- name: httpport: 80targetPort: 80- name: metricsport: 8080targetPort: 8080
3. Headless Service
spec:clusterIP: None # 创建无头服务ports:- port: 80targetPort: 80
用途:
- 用于 StatefulSet
- 需要直接访问 Pod 的场景
- 自定义服务发现机制
六、服务发现方式
1. 环境变量
MY_SERVICE_SERVICE_HOST=10.0.0.1
MY_SERVICE_SERVICE_PORT=80
2. DNS 发现
# 集群内解析
nslookup my-service.default.svc.cluster.local
3. 直接访问
curl http://<service-name>.<namespace>.svc.cluster.local
七、最佳实践
-
命名规范:
- 使用小写字母和连字符
my-service
- 避免使用下划线或大写字母
- 使用小写字母和连字符
-
标签选择器:
selector:app: frontendtier: production
-
与 Deployment 配合:
# deployment.yaml labels:app: nginxversion: v1# service.yaml selector:app: nginxversion: v1
-
监控与调试:
# 检查 Endpoints kubectl get endpoints <service-name># 查看服务详情 kubectl describe svc <service-name>
Service 是 Kubernetes 网络模型的核心组件,理解其工作原理对于构建可靠的应用架构至关重要。