一、ClusterIP 服务概念
1) ClusterIP 是默认服务类型
- 如果在创建 Service 时未指定
type,默认会分配为 ClusterIP 类型。Service 会自动创建一个虚拟的内部 IP,仅在集群内部可访问。
2) 服务拥有独立的 DNS 和 ClusterIP
- 每个 Service 会分配一个 ClusterIP 地址,并生成对应的 DNS 名称(默认为
<service>.<namespace>.svc.cluster.local)。通过该 IP 或 DNS,客户端可以访问和负载均衡到后端 Pod。DNS 和 ClusterIP 同样只能在集群内部访问,外部无法直达。
3) kube-proxy 管理 VIP(虚拟 IP)机制
kube-proxy负责处理 Service 的虚拟 IP,将流量转发到后端 Pod。它通过数据包处理逻辑(如 Linux 的iptables)来实现,而不是实际监听这些 IP 地址的主机。
4) kube-proxy 的三种运行模式
- iptables(默认):通过 iptables 规则顺序执行匹配和转发,适用于普通规模集群
- IPVS:基于 Linux 内核中的 IPVS 模块,以哈希表方式高效处理大规模服务的流量负载,适用于超过约 1000 个 Service 的集群。
- 用户空间模式(已弃用):性能较低,不推荐用于生产环境。
5) 查询 kube-proxy 模式的方法
- 可以查看
kube-proxy日志开头部分,日志中会包含类似 “Using ipvs Proxier” 的提示,来确认当前运行的模式。
6) 会话亲和性(Session Affinity)与粘滞超时
- 默认情况下,Service 的
sessionAffinity为None,即不保证同一客户端的请求会被分配到同一 Pod。可以显式设置为ClientIP来启用基于客户端 IP 的粘滞会话。 .spec.sessionAffinityConfig.clientIP.timeoutSeconds参数用以设定会话保持的超时时间,默认值为 3 小时(10800 秒),范围为 >0 且 ≤86400(即最多一天)。仅在 Linux 平台有效,Windows 系统暂不支持该功能。
会话粘滞时间的工作机制
- 会话超时从最初连接时开始计时。如果客户端在超时之前再次发起连接,会重新计时。例如:超时时间设为 30 分钟,第一次访问是在 15:00 且持续 12 分钟,则服务会保持到 15:30;如果在 15:26 再次访问,超时自动重置至 15:56。
二、结构化整理一览
| 项目 | 说明 |
|---|---|
| 默认类型 | ClusterIP,生成内部可访问的虚拟 IP。 |
| DNS 名称 | <service>.<namespace>.svc.cluster.local(只限内部解析)。 |
| VIP 管理 | kube-proxy 通过 iptables/IPVS 实现流量转发。 |
| 默认代理模式 | iptables,适合中小规模集群。 |
| 高性能模式 | IPVS,适合大规模集群(数千服务)。 |
| 弃用模式 | 用户空间模式,不建议用于生产。 |
| 会话亲和 | 默认无粘滞,可设置 ClientIP 实现。 |
| 超时时间 | 默认 3 小时(10800 秒),仅支持 Linux。 |
| 模式查看方法 | 查看 kube-proxy 日志中的 “Using ipvs Proxier” 等提示。 |