您的位置 首页 k8s

k8s 中Endpoints

在 Kubernetes 中,Endpoints 可以理解为 Service 的动态通讯录真实路由表
它的核心作用是:记录 Service 背后所有健康 Pod 的真实 IP 地址和端口列表

Endpoints 与 Service 的关系

如果把 Kubernetes 的网络访问比作打电话:
  • Service 就像是一个固定的总机号码(提供稳定的虚拟 IP 和 DNS 名称)
  • Endpoints 就像是总机后台的分机花名册(实时记录着今天有哪些员工在上班,以及他们具体的工位分机号)
  • Pod 就是具体的员工(Pod 的 IP 经常变化,随时可能离职或换工位)。
当你访问 Service 时,Kubernetes 会去查阅 Endpoints 这本“花名册”,找到当前所有健康的 Pod IP,然后把流量转发给其中一个。

Endpoints 是如何工作的?

Endpoints 的工作流程完全是自动化的:
  1. 监听与匹配:当你创建一个带有 selector(标签选择器)的 Service 时,Kubernetes 内部的 Endpoints Controller 会持续监听集群中所有 Pod 的变化
  2. 自动收录:一旦发现某个 Pod 的标签匹配了 Service 的 selector,并且该 Pod 处于健康(Ready)状态,Controller 就会把这个 Pod 的 IP:Port 自动加入到 Endpoints 对象中。
  3. 动态剔除:如果 Pod 被删除、发生故障或者就绪探针(Readiness Probe)检查失败,Endpoints Controller 会立刻将其 IP 从列表中剔除
  4. 流量转发:节点上的 kube-proxy 组件会实时监听 Endpoints 的变化,并更新节点上的 iptables 或 IPVS 规则,确保流量只会被转发到 Endpoints 列表里存在的健康 Pod 上

 

实战:如何查看 Endpoints

你可以通过 kubectl 命令直观地看到 Service 和 Endpoints 的对应关系。
假设你有一个名为 my-nginx-svc 的 Service,后端有两个 Nginx Pod:
  1. 查看 Service(总机号码)
kubectl get svc my-nginx-svc

输出会显示一个稳定的集群虚拟 IP(ClusterIP),例如 10.100.200.30。

查看 Endpoints(分机花名册)
kubectl get endpoints my-nginx-svc
# 或者简写
kubectl get ep my-nginx-svc
输出示例:
NAME           ENDPOINTS                           AGE
my-nginx-svc   10.244.1.5:80,10.244.2.8:80         1m

可以看到,Endpoints 精确地记录了后端两个 Pod 的真实 IP(10.244.1.5 和 10.244.2.8)以及端口 80。

-----

在早期的 Kubernetes 版本中,所有的 IP 列表都塞在同一个 Endpoints 对象里。但随着集群规模扩大(例如一个 Service 背后有上千个 Pod),这个对象会变得极其庞大,导致 API Server 和 kube-proxy 更新压力剧增。
因此,Kubernetes 引入了 EndpointSlices 作为 Endpoints 的升级版。它将庞大的 IP 列表分片存储(每个分片最多包含 100 个端点),大大提高了大规模集群下的网络性能和扩展性。在较新的 K8s 版本中,EndpointSlices 已经成为默认机制。

 

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章