ClusterIP 是 Kubernetes Service 默认类型,通过集群内虚拟 IP 实现内部四层负载均衡,由 kube-proxy 基于 iptables/IPVS 规则将请求转发至就绪 Pod,支持 sessionAffinity 等调度策略。

在 Kubernetes 中,ClusterIP 是 Service 默认的类型,它通过集群内部 IP 实现四层(TCP/UDP)负载均衡,仅对集群内服务暴露,不对外网开放。它的核心作用是为一组 Pod 提供稳定的访问入口和流量分发能力。
ClusterIP 的工作原理
ClusterIP 并非真实存在的网络接口,而是由 kube-proxy 维护的一组 iptables 或 IPVS 规则。当客户端(如另一 Pod)访问 ClusterIP:Port 时,请求会被透明重定向到后端某个就绪的 Pod IP:Port 上,整个过程对应用无感知。
- kube-proxy 在每个节点上监听 Service 和 Endpoint 变化
- 根据 Endpoint 列表(即健康 Pod 的 IP+Port),动态更新转发规则
- 默认使用轮询(Round Robin)调度,支持会话保持(sessionAffinity)
定义一个 ClusterIP Service
只需在 YAML 中指定 type: ClusterIP(可省略,因它是默认值),并正确定义 selector 和 port 映射:
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 8080
# type: ClusterIP # 可省略其中:
- selector 匹配带对应 label 的 Pod
- port 是 Service 暴露的端口(集群内访问该端口)
- targetPort 是 Pod 容器实际监听的端口(可为数字或名称)
验证与调试技巧
部署后可通过以下方式确认 ClusterIP 是否生效:
- 运行
kubectl get svc nginx-svc,查看分配的 CLUSTER-IP(如 10.96.12.34)和 PORTS - 进入任意 Pod 执行
curl http://10.96.12.34,应能收到响应 - 用
kubectl get endpoints nginx-svc查看后端 Pod 地址列表,确保非空且状态正常 - 若不通,检查 Pod 是否就绪(
kubectl get pods -l app=nginx)、label 是否匹配、targetPort 是否写错
进阶控制:会话保持与拓扑感知
默认情况下请求随机分发,但可按需增强调度行为:
- 启用客户端 IP 粘性:
sessionAffinity: ClientIP,相同源 IP 会倾向转发到同一 Pod - 限制调度范围(v1.22+):
topologyKeys配合externalTrafficPolicy: Local不适用,但可用于 ClusterIP 场景下的区域亲和(如按 zone 分发) - 注意:ClusterIP 本身不支持权重、健康检查自定义等高级特性,这些需借助 Ingress 或 Service Mesh

















