获课:weiranit.fun/14335/
获取ZY方打开链接
Kubernetes集群核心概念:Service详解
一、Service概述
Service是Kubernetes中用于定义一组Pod访问策略的抽象资源,它解决了以下核心问题:
Pod动态性问题:Pod是临时的,IP地址会变化
服务发现:如何让客户端发现并可靠地访问Pod
负载均衡:在多个Pod实例间分配流量
二、Service核心特性
1. 稳定虚拟IP(ClusterIP)
为Pod集合提供唯一的虚拟IP(VIP)
生命周期独立于Pod,即使Pod全部重建,Service IP保持不变
集群内部通过该VIP访问服务
2. 服务发现机制
通过DNS名称访问服务:..svc.cluster.local
环境变量自动注入(可选)
3. 负载均衡
自动将请求分发到后端所有健康的Pod
默认使用轮询(Round Robin)算法
三、Service类型
四、Service工作原理
1. 核心组件协作
kube-proxy:负责实现Service的虚拟IP到PodIP的转换
CoreDNS:提供集群内服务DNS解析
Endpoint Controller:维护Pod与Service的映射关系
2. 流量转发机制
mermaid
复制
graph LR Client -->|请求| ServiceVIP ServiceVIP --> kube-proxy kube-proxy --> Pod1 kube-proxy --> Pod2 kube-proxy --> Pod3
五、Service YAML示例
基本ClusterIP Service
yaml
复制
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app # 选择具有此标签的Pod ports: - protocol: TCP port: 80 # Service暴露的端口 targetPort: 9376 # Pod上的端口
NodePort Service
yaml
复制
apiVersion: v1 kind: Service metadata: name: my-nodeport-service spec: type: NodePort selector: app: my-app ports: - port: 80 targetPort: 9376 nodePort: 30007 # 可选,范围30000-32767
六、高级特性
1. Headless Service
yaml
复制
spec: clusterIP: None # 创建无ClusterIP的Service
用途:
需要直接访问Pod的场景(如StatefulSet)
自定义服务发现机制
2. 会话保持(Session Affinity)
yaml
复制
spec: sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 3600
3. 外部流量策略
yaml
复制
spec: externalTrafficPolicy: Local # 保留客户端源IP
七、最佳实践
命名规范:使用-格式(如order-service)
端口规划:
Service端口使用标准端口(如80, 443)
targetPort使用应用实际监听端口
标签选择器:确保与Pod标签精确匹配
监控:监控Service的Endpoints变化和流量情况
八、常见问题排查
服务不可达:
检查kubectl get endpoints是否有正常Pod
验证kube-proxy是否正常运行
检查网络插件(Calico/Flannel等)
DNS解析失败:
验证CoreDNS Pod状态
检查/etc/resolv.conf配置
NodePort无法访问:
检查节点防火墙规则
验证云提供商的安全组设置
领取专属 10元无门槛券
私享最新 技术干货