K8S学习笔记:Service
·
本文是自己的学习笔记
1、Service存在的意义
Service 是 Pod 的“稳定访问入口”和“内部负载均衡器”。 它为一组具有相同功能的 Pod 提供了一个固定的 IP 地址和 DNS 域名。
客户端 (Client)
│
▼
┌─────────────────────────┐
│ Service (固定 IP/端口) │
└───────────┬─────────────┘
│ 通过 Label Selector 标签选择器
▼
┌─────────────────────────┐
│ Endpoints (Pod IP 列表) │ ◄── Service/Endpoint Controller 动态更新
└───────────┬─────────────┘
├───► Pod 1 (10.244.0.5:8080)
├───► Pod 2 (10.244.0.6:8080)
└───► Pod 3 (10.244.0.7:8080)
1、关联 Pod(Label Selector): Service 通过 selector 挑选出拥有特定标签(Label)的 Pod。
2、维护 Pod 动态列表(Endpoints): 前面提过的 Endpoint Controller 会时刻监控 Pod 的变动,只要 Pod IP 变化或升降级,就会自动更新 Endpoint 列表。
3、流量负载均衡: 节点上的 kube-proxy 组件(借助 Linux 系统的 iptables 或 IPVS 规则)将发送给 Service 的流量转发到具体的某一个健康 Pod 上。
2、Service的三个基本类型
2.1、三者的关系
在 Kubernetes (K8s) 中,最核心且最常用的 Service 类型主要有以下 三种(加上专门用于引入外部域名的 ExternalName 共有 4 种,但传统场景下大家常说的主要是前三种)
-
ClusterIP(默认类型)
- 作用/暴露范围: 仅在 集群内部(Cluster-Internal) 可访问。
- 工作机制: K8s 会为该 Service 分配一个集群内部专属的虚拟 IP(Cluster-IP)。集群外的任何设备都无法直接访问该 IP,只有集群内部的 Pod 或 Node 可以访问。
- 适用场景:
- 服务间内部通信(如:前端 Web 访问后端 API 服务)。
- 数据库、缓存等不需要/不应该对外部网络公开的内部组件(如 MySQL、Redis)。
-
NodePort
- 作用/暴露范围: 将服务暴露给 集群外部(Cluster-External) 访问。
- 工作机制: 在 ClusterIP 的基础上,K8s 会在集群中的 每一个节点(Worker Node) 上都开放一个相同的端口(默认端口范围为 30000-32767)。外部用户或设备可以通过访问 任意节点IP:NodePort 来调用该服务。
- 适用场景:
- 开发、测试环境快速验证服务。
- 临时对外暴露服务,或用于演示。
- 自建 Kubernetes 集群(无云厂商 LoadBalancer 支持)时暴露对外入口。
-
LoadBalancer
- 作用/暴露范围: 生产环境标准的 集群外部(Cluster-External) 暴露方式。
- 工作机制: 在 NodePort 和 ClusterIP 的基础上,配合云服务提供商(如 AWS、阿里云、腾讯云、Google Cloud 等)的 API,自动在云端创建并配置一个外部负载均衡器(如 CLB / ALB / ELB)。云厂商的负载均衡器会分配一个公网 IP,并将流量路由到各个节点的 NodePort 上。
- 适用场景:生产环境直接向公网提供服务的应用(如官方网站、App 后端接口等)。
补充演进关系:
这三种类型是递进/包含的关系:LoadBalancer 建立在 NodePort 之上,而 NodePort 又建立在 ClusterIP 之上。因此,创建一个 LoadBalancer 类型的 Service 时,它同时也拥有自己的 NodePort 和 ClusterIP。
2.2、总结
| Service 类型 | 暴露范围 | 核心机制 / 依赖项 | 常见适用场景 |
|---|---|---|---|
| ClusterIP (默认) | 仅集群内部 | 分配内部虚拟 IP,仅供集群内 Pod/Node 访问。 | 微服务内部互访、数据库、缓存等不公开服务。 |
| NodePort | 集群外部 | 在每个节点上开放相同端口(30000-32767),通过 <NodeIP>:<NodePort> 访问。 | 开发测试环境快速验证、自建集群临时暴露服务。 |
| LoadBalancer | 集群外部 | 自动向公有云申请公网 LB,将流量接入 NodePort/ClusterIP。 | 生产环境直接对外提供服务的公网业务入口。 |
更多推荐
所有评论(0)