ClusterIP 是 Kubernetes(K8s)中最默认、最核心的 Service 类型。它的主要作用是为集群内部的一组 Pod(通常是一个应用的多个副本)提供一个稳定的虚拟 IP 地址和 DNS 名称。
以下是关于 ClusterIP 的核心概念、工作原理及使用场景的详细解析:
kube-proxy 组件在逻辑上维护的“虚拟”IP。<service-name>.<namespace>.svc.cluster.local),集群内的其他应用可以通过域名直接访问,而无需硬编码 IP。ClusterIP 的实现主要依赖以下两个组件的协作:
Endpoints 对象,其中记录了所有匹配标签的 Pod 的真实 IP 和端口列表。由于 ClusterIP 无法从外部直接访问,它通常用于以下场景:
db-service 的 ClusterIP 或域名,无需知道数据库 Pod 的具体 IP。以下是一个典型的 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 中,可以通过以下方式访问:
curl http://my-backend-service.default.svc.cluster.local:80curl http://my-backend-service:80 (在同一 Namespace 下)curl http://<CLUSTER_IP>:80 (需先通过 kubectl get svc 查看 IP)
ClusterIP 是 Kubernetes 服务网格的基石。它屏蔽了后端 Pod 的动态变化(IP 会变、数量会变),为集群内部提供了稳定的服务入口和自动负载均衡能力。如果你需要在集群外部访问服务,通常需要结合 Ingress Controller 或 LoadBalancer 类型,但它们最终往往还是会路由到 ClusterIP。