主题
Kubernetes Service 与服务发现
一句话机制
Pod IP 是动态分配、不固定的,不能直接拿来访问。Service 把提供相同服务的 Pod 聚合起来,提供一个稳定统一的访问入口;Service 本身只是个概念,真正把虚拟入口转成真实转发规则的是每个 Node 上的 kube-proxy。
kube-proxy 三种工作模式
| 模式 | 机制 | 特点 |
|---|---|---|
| userspace | 为每个 Service 分配监听端口,kube-proxy 充当四层负载均衡器转发 | 稳定但效率低(用户态/内核态来回切) |
| iptables | kube-proxy 只写 iptables 规则,ClusterIP 直接重定向为 Pod IP | 高效,但 LB 策略不灵活 |
| ipvs | 监控 Pod 变化、写 ipvs 规则 | 转发效率更高,支持更多 LB 算法(推荐) |
Service 五种类型
| 类型 | 用途 |
|---|---|
| ClusterIP(默认) | 集群内虚拟 IP,仅集群内部可访问 |
| NodePort | 把 Service 映射到每个 Node 的端口(30000–32767),供外部访问 |
| LoadBalancer | 借助外部负载均衡设备分发(需云环境支持) |
| ExternalName | 把集群外部服务引入集群内使用 |
| Headless(clusterIP=None) | 不分配 IP,Pod 解析 serviceName.namespace 直接得到 Pod IP |
Endpoint:Service 与 Pod 的桥梁
Endpoint 是存于 etcd 的资源对象,记录一个 Service 对应的所有 Pod IP。Service 与 Pod 的联系通过 Endpoint 实现——selector 决定代理哪些 Pod,Endpoints 记录它们的真实 IP。
不变量
- Service 是「规则」,不是「进程」。真正起转发作用的是 kube-proxy(及其写下的 iptables/ipvs 规则),Service 只是声明式描述。
- 集群内解析 serviceName 得到的是 ClusterIP,不是 Pod IP;ClusterIP 是虚拟 IP,由规则重定向到真实 Pod。
- Pod 被摘流量 = readiness 探针失败 → 从 Endpoint 移除,这正是 [Kubernetes Pod与探针机制](./Kubernetes Pod与探针机制) 里 readiness 的落点。
常见误解
- ❌ 「Service 就是一个反向代理进程」——错。Service 没有实体进程,靠 kube-proxy 写的网络规则工作。
- ❌ 「ClusterIP 能 ping 通」——错。它是虚拟 IP,只在规则表里存在,不绑定任何网卡。
- ❌ 「NodePort 和 LoadBalancer 一回事」——错。NodePort 用 Node 自身端口,LoadBalancer 额外依赖集群外的负载均衡设备。
- ❌ 「Service 直接知道 Pod」——错。中间隔着 Endpoint 对象,Service 通过它间接关联 Pod。
关联
- 上游:9. Service
- 同域:Kubernetes技术栈总览 · [Kubernetes Pod与探针机制](./Kubernetes Pod与探针机制)
- 域地图:运维与云原生