endpoint与ingress-nginx的区别
- Ingress-nginx
- 作用
- 流量入口管理:
- Ingress-nginx 是一个 Ingress Controller,负责实现 Kubernetes 的 Ingress 资源功能。
- 它充当集群的 外部访问入口,处理 HTTP/HTTPS 流量,并根据规则将请求路由到后端的 Service 或 Pod。
- 支持基于域名、路径的路由,以及 TLS 终止、负载均衡等高级功能。
- 流量入口管理:
-
关键特性:
- 七层(L7)代理:基于 HTTP/HTTPS 协议的路由(如 example.com/api → service-a)。
- 依赖资源:
- 需要定义 Ingress 资源(YAML 文件)来描述路由规则。
- 需要部署 ingress-nginx 的 Pod 作为控制器(通常以 Deployment + Service 形式运行)。
-
典型场景:
- 对外暴露多个 Web 服务(通过不同域名或路径区分)。
- 替代传统的 NodePort/LoadBalancer,提供更灵活的流量管理。
# Ingress 资源定义示例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
2、Endpoint(或 EndpointSlice)
作用:
-
服务后端发现:
- Endpoint 是 Kubernetes 自动维护的资源,用于记录一个 Service 后端所有 Pod 的 IP 和端口。
- 当 Service 的 Pod 发生变化(扩缩容、重启)时,Endpoint 会自动更新。
- EndpointSlice 是 Endpoint 的升级版,适用于大规模集群(更高效的数据分片)。
-
关键特性
- 四层(L4)代理:直接关联 Pod 的网络地址(IP:Port),不感知应用层协议(HTTP/HTTPS)。
- 自动生成:
- 由 Kubernetes 根据 Service 的 Label Selector 自动创建和管理。
- 用户通常无需手动操作(除非使用 Headless Service 或自定义 Endpoint)。
-
典型场景:
- Service 流量转发的实际目标(如 ClusterIP 类型的 Service 通过 Endpoint 找到 Pod)。
- 集成外部服务(手动创建 Endpoint 指向集群外 IP)。
# 查看某个 Service 的 Endpoint
kubectl get endpoints <service-name>
# 输出示例
NAME ENDPOINTS
api-service 10.244.1.2:80,10.244.2.3:80
- 核心区别对比
特性 | Ingress-nginx | Endpoint |
---|---|---|
功能层级 | 七层(HTTP/HTTPS) | 四层(IP:Port) |
主要作用 | 外部流量路由、TLS 终止、路径匹配 | 记录 Service 后端 Pod 的实际地址 |
资源类型 | 需要部署 Ingress Controller(如 Nginx Pod) | Kubernetes 自动生成的资源对象 |
配置方式 | 通过 Ingress 资源定义规则 | 自动由 Service 和 Pod 生成 |
适用协议 | HTTP/HTTPS/GRPC(应用层) | 任何 TCP/UDP 协议(传输层) |
手动操作频率 | 高(需定义路由规则) | 低(通常自动维护) |
- 协作关系
用户访问 https://example.com/api → 请求到达 ingress-nginx Pod。
Ingress-nginx 查询 Ingress 资源,匹配到路径 /api 对应的后端 api-service。
Service api-service 通过 Endpoint 获取实际 Pod 的 IP 列表(如 10.244.1.2:80)。
流量被转发到目标 Pod。
总结:
Ingress-nginx:面向外部流量,提供高级路由能力(需主动配置)。
Endpoint:面向内部服务发现,自动跟踪 Pod 变化(无需配置)。
两者协同工作,共同完成 Kubernetes 服务的暴露和流量管理。