虚拟集群 IP (ClusterIP)
ClusterIP 是 Kubernetes(K8s)中最默认、最核心的 Service 类型。它的主要作用是为集群内部的一组 Pod(通常是一个应用的多个副本)提供一个稳定的虚拟 IP 地址和 DNS 名称。
以下是关于 ClusterIP 的核心概念、工作原理及使用场景的详细解析:
1. 核心定义
- 内部访问:ClusterIP 只能在 Kubernetes 集群内部访问。集群外部的客户端无法直接通过该 IP 访问服务。
- 虚拟 IP:这个 IP 不是绑定在某台具体物理机或虚拟机网卡上的真实 IP,而是一个由
kube-proxy组件在逻辑上维护的“虚拟”IP。 - 负载均衡:当流量发送到 ClusterIP 时,Kubernetes 会自动将请求负载均衡到后端所有健康的 Pod 上。
- 服务发现:Kubernetes 会自动为每个 Service 创建 DNS 记录(格式通常为
<service-name>.<namespace>.svc.cluster.local),集群内的其他应用可以通过域名直接访问,而无需硬编码 IP。
2. 工作原理
ClusterIP 的实现主要依赖以下两个组件的协作:
-
kube-proxy:
- 它在每个节点上运行,负责监听 Kubernetes API Server 中 Service 和 Endpoint 的变化。
- 一旦检测到新的 ClusterIP Service,它会在节点上配置网络规则(通常使用 iptables 或 IPVS 模式)。
- 当数据包发往 ClusterIP 时,这些规则会将数据包的目标地址重写(DNAT)为后端某个具体 Pod 的 IP 地址。
-
Endpoints (端点):
- Service 本身只是一个抽象层,它通过标签选择器(Label Selector)找到后端的 Pod。
- Kubernetes 会自动创建一个与 Service 同名的
Endpoints对象,其中记录了所有匹配标签的 Pod 的真实 IP 和端口列表。 - 如果后端 Pod 重启或扩缩容,Endpoints 会自动更新,kube-proxy 也会随之刷新网络规则,确保流量只转发给健康的 Pod。
3. 典型使用场景
由于 ClusterIP 无法从外部直接访问,它通常用于以下场景:
- 微服务间通信:这是最常见的用法。例如,前端服务(Frontend)需要调用后端数据库服务(Database)或缓存服务(Redis)。前端服务只需访问
db-service的 ClusterIP 或域名,无需知道数据库 Pod 的具体 IP。 - 内部监控与度量:Prometheus 等监控系统通过 ClusterIP 抓取集群内各个组件的指标数据。
- 作为其他暴露方式的后端:NodePort、LoadBalancer 或 Ingress 通常背后指向一个 ClusterIP Service。外部流量先到达 NodePort/Ingress,然后被转发到 ClusterIP,再由 ClusterIP 分发给 Pod。
4. 示例配置 (YAML)
以下是一个典型的 ClusterIP Service 定义:
apiVersion: v1
kind: Service
metadata:
name: my-backend-service
namespace: default
spec:
type: ClusterIP # 默认值,即使不写也是 ClusterIP
selector:
app: my-backend-app # 标签选择器,匹配带有此标签的 Pod
ports:
- protocol: TCP
port: 80 # Service 暴露的端口 (ClusterIP 监听的端口)
targetPort: 8080 # 后端 Pod 容器实际监听的端口
访问方式:
在集群内的任意 Pod 中,可以通过以下方式访问:
在集群内的任意 Pod 中,可以通过以下方式访问:
- 通过域名:
curl http://my-backend-service.default.svc.cluster.local:80 - 通过短域名:
curl http://my-backend-service:80(在同一 Namespace 下) - 通过 IP:
curl http://<CLUSTER_IP>:80(需先通过kubectl get svc查看 IP)
5. ClusterIP 与其他类型的对比

总结
ClusterIP 是 Kubernetes 服务网格的基石。它屏蔽了后端 Pod 的动态变化(IP 会变、数量会变),为集群内部提供了稳定的服务入口和自动负载均衡能力。如果你需要在集群外部访问服务,通常需要结合 Ingress Controller 或 LoadBalancer 类型,但它们最终往往还是会路由到 ClusterIP。
浙公网安备 33010602011771号