当前位置: 首页 > news >正文

k8s中service概述(一)ClusterIP

ClusterIP 是 Kubernetes 中最基础且常用的 Service 类型,主要用于在集群内部提供稳定的网络访问端点。以下是关于 ClusterIP Service 的详细说明:


1. ClusterIP 的核心功能
  • 集群内部访问:ClusterIP 提供一个集群内部的虚拟 IP(VIP),只能在 Kubernetes 集群内部访问,外部网络无法直接访问。

  • 服务发现:通过 Kubernetes 的 DNS 服务,其他 Pod 可以通过 Service 名称访问 ClusterIP。

  • 负载均衡:ClusterIP 会自动将流量分发到后端的多个 Pod,实现负载均衡。

  • 稳定的 IP 和端口:无论后端 Pod 如何变化,ClusterIP 的 IP 和端口保持不变,确保服务调用的稳定性。


2. ClusterIP 的工作原理

ClusterIP 的实现依赖于 Kubernetes 的核心组件和网络模型:

  1. Service 创建

    • 当创建一个 ClusterIP Service 时,Kubernetes 会为其分配一个虚拟 IP(ClusterIP),这个 IP 来自集群的 Service CIDR 范围(例如 10.96.0.0/12)。

    • Service 通过 selector 字段选择一组 Pod 作为后端。

  2. Endpoints 创建

    • Kubernetes 会自动创建与 Service 同名的 Endpoints 对象,其中包含所有匹配 selector 的 Pod 的 IP 和端口。

    • 如果 Pod 发生变化(例如扩容或重启),Endpoints 会自动更新。

  3. kube-proxy 的作用

    • 每个节点上的 kube-proxy 组件会监听 Service 和 Endpoints 的变化。

    • kube-proxy 通过以下方式实现流量转发:

      • iptables 模式:在节点上配置 iptables 规则,将流量从 ClusterIP 转发到后端 Pod。

      • IPVS 模式:使用更高效的 IPVS 实现流量转发。

    • 无论使用哪种模式,kube-proxy 都会确保流量被正确负载均衡到后端 Pod。

  4. DNS 解析

    • Kubernetes 的 CoreDNS 或 kube-dns 会为每个 Service 创建一条 DNS 记录。

    • 例如,Service 名称为 my-service,命名空间为 default,则其 DNS 名称为 my-service.default.svc.cluster.local

    • 集群内的 Pod 可以通过 DNS 名称访问 Service,DNS 会解析为 ClusterIP。


3. ClusterIP 的配置示例

以下是一个典型的 ClusterIP Service 的 YAML 配置文件:

 
  • selector:用于选择后端 Pod,只有匹配标签的 Pod 才会被纳入 Service 的后端。

  • ports

    • port:Service 暴露的端口,集群内的其他服务通过该端口访问 Service。

    • targetPort:后端 Pod 实际监听的端口。

    • protocol:支持的协议类型,默认为 TCP。


4. ClusterIP 的使用场景

ClusterIP 适用于以下场景:

  1. 微服务间通信

    • 在微服务架构中,服务之间通过 ClusterIP 进行内部通信。

    • 例如,前端服务通过 ClusterIP 访问后端 API 服务。

  2. 数据库访问

    • 数据库服务(如 MySQL、PostgreSQL)通常只在集群内部暴露,使用 ClusterIP 可以确保外部无法直接访问。

  3. 内部工具和服务

    • 例如监控系统(Prometheus)、日志系统(Elasticsearch)等,通常只在集群内部使用。

  4. 服务发现和负载均衡

    • ClusterIP 提供稳定的访问端点,并自动实现负载均衡,适合需要高可用的服务。


5. ClusterIP 的优缺点

优点

  • 简单易用,是 Kubernetes 默认的 Service 类型。

  • 提供稳定的 IP 和 DNS 名称,适合服务发现。

  • 自动负载均衡,支持后端 Pod 的动态变化。

缺点

  • 只能在集群内部访问,无法直接从外部访问。

  • 对于需要对外暴露的服务,需要结合 NodePort 或 LoadBalancer 使用。


6. ClusterIP 的调试和排查
  1. 查看 Service 信息

    kubectl get svc <service-name>

    输出示例:

    NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
    my-service   ClusterIP   10.96.123.45    <none>        80/TCP    5m

  2. 查看 Endpoints

    kubectl get endpoints <service-name>

    输出示例:

    NAME         ENDPOINTS                         AGE
    my-service   10.244.1.2:9376,10.244.2.3:9376   5m

  3. 检查 DNS 解析
    在集群内的 Pod 中使用 nslookupdig 检查 Service 的 DNS 解析:

    nslookup my-service.default.svc.cluster.local

  4. 检查 kube-proxy 和 iptables/IPVS 规则

    • 登录到节点,检查 iptables 或 IPVS 规则是否正常配置。

相关文章:

  • 软件测试之Postman接口测试
  • springboot继承使用mybatis-plus举例相关配置,包括分页插件以及封装分页类
  • C++|GLog开源库的使用 如何实现自定义类型消息日志
  • HCIA-AI人工智能笔记3:数据预处理
  • 编程语言选择分析:C#、Rust、Go 与 TypeScript 编译器优化
  • 二项式分布(Binomial Distribution)
  • YOLO魔改之SAM空间注意力模块
  • 网络基础梳理
  • GAF-CNN-DBO-LSSVM故障诊断/分类预测(Matlab)
  • 【AI速读】30分钟搭建持续集成:用Jenkins拯救你的项目
  • Python 用户账户(让用户拥有自己的数据)
  • “大国品牌”建设全面启动,工业电商生态加速成型
  • 清华大学《DeepSeek从入门到精通》04
  • MacOS安装 nextcloud 的 Virtual File System
  • 使用 Docker 部署 mysql 应用
  • STM32八股【2】-----ARM架构
  • 安装PaddlePaddle2.6.2和PaddleSpeech1.4的CPU版本——基于Ubuntu22.04
  • uniapp中的路由、本地存储与网络请求
  • 经典笔试题 小于 n 的最大整数 贪心 回溯 剪枝 全排列
  • YOLO-UniOW: 高效通用开放世界目标检测模型【附论文与源码】
  • 习近平对辽宁辽阳市白塔区一饭店火灾事故作出重要指示
  • 西湖大学本科招生新增三省两市,首次面向上海招生
  • 西班牙葡萄牙突发全国大停电,欧洲近年来最严重停电事故何以酿成
  • 国家税务总局:“二套转首套”可以享受贷款利息个税专项扣除
  • 利物浦提前四轮英超夺冠,顶级联赛冠军数追平曼联
  • 天津外国语大学原校长修刚突发疾病去世,享年68岁