首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >虚拟集群 IP (ClusterIP)

虚拟集群 IP (ClusterIP)

作者头像
jack.yang
发布2026-03-01 08:44:54
发布2026-03-01 08:44:54
370
举报

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 的实现主要依赖以下两个组件的协作:

  1. kube-proxy:
    • 它在每个节点上运行,负责监听 Kubernetes API Server 中 Service 和 Endpoint 的变化。
    • 一旦检测到新的 ClusterIP Service,它会在节点上配置网络规则(通常使用 iptables 或 IPVS 模式)。
    • 当数据包发往 ClusterIP 时,这些规则会将数据包的目标地址重写(DNAT)为后端某个具体 Pod 的 IP 地址。
  2. 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 定义:

代码语言:javascript
复制
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:80
  • 通过短域名:curl http://my-backend-service:80 (在同一 Namespace 下)
  • 通过 IP:curl http://<CLUSTER_IP>:80 (需先通过 kubectl get svc 查看 IP)

5. ClusterIP 与其他类型的对比

image
image

总结

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 核心定义
  • 2. 工作原理
  • 3. 典型使用场景
  • 4. 示例配置 (YAML)
  • 5. ClusterIP 与其他类型的对比
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档