文章目录
-
- 一、一句话概括
- 二、详细对比
- [三、在 Docker 中的例子](#三、在 Docker 中的例子)
- [四、在 Kubernetes 中的例子](#四、在 Kubernetes 中的例子)
-
- [4.1、 Gateway](#4.1、 Gateway)
- [4.2、 Endpoint](#4.2、 Endpoint)
- 4.3、常见误解澄清
- [五、 总结对比](#五、 总结对比)
在容器(尤其是 Kubernetes 或 Docker)网络中, endpoint 和 gateway 是两个完全不同的概念,作用层级、目的和使用场景都不同。下面用清晰的对比方式帮你理解它们的区别:
一、一句话概括
| 概念 | 一句话解释 |
|---|---|
| Gateway(网关) | 容器访问外部网络的"出口路由器",用于跨子网通信(如访问互联网或其他主机)。 |
| Endpoint(端点) | 容器在网络内部的一个"接入点"或"服务地址",常用于标识一个可被访问的服务(如 Pod IP + Port)。 |
✅ 简单说:
- Gateway 是"出门的门"(对外)
- Endpoint 是"家里的房间号"(对内)
二、详细对比
| 维度 | Gateway(网关) | Endpoint(端点) |
|---|---|---|
| 作用 | 路由流量到其他网络(如互联网、其他子网) | 标识一个可被访问的网络服务目标(如容器、Pod、Service) |
| 所在层级 | 网络层(L3),属于子网配置 | 传输层/应用层(L4/L7),通常包含 IP + Port |
| 典型值 | 172.17.0.1(Docker bridge 网关)10.244.0.1(Flannel Pod 网络网关) | 10.244.1.5:8080(Pod 的 endpoint)192.168.1.10:3306(MySQL 容器 endpoint) |
| 谁使用它? | 容器内的操作系统(内核路由表) | 客户端、Service、Ingress、探针等 |
| 是否必须? | 如果容器需要访问外部网络,则必须有网关 | 如果服务要被访问,则需要暴露 endpoint |
| 配置位置 | Docker network / CNI 网络插件 / Pod 网络 CIDR 配置 | Pod spec / Service / Ingress / 探针配置 |
| 示例场景 | 容器 ping baidu.com → 流量先发给 gateway | Service 将流量转发到后端 Pod 的 endpoint(IP:Port) |
三、在 Docker 中的例子
bash
# 创建自定义网络
docker network create --subnet=172.20.0.0/24 --gateway=172.20.0.1 mynet
# 启动容器
docker run -d --name web --network mynet nginx
- Gateway: 172.20.0.1
- 容器访问外网时,数据包先发给这个地址。
- Endpoint: 容器的 IP(如 172.20.0.2)+ 应用端口(如 80)
- 其他容器通过 172.20.0.2:80 访问它,这就是 endpoint。
四、在 Kubernetes 中的例子
4.1、 Gateway
- 通常由 CNI 插件(如 Calico、Flannel) 自动配置。
- 每个 Node 上的 Pod 子网都有一个网关(通常是该子网的第一个 IP)。
- Pod 的路由表会设置默认网关,用于跨节点通信或出集群。
bash
# 在 Pod 内执行
ip route
# 输出示例:
default via 10.244.0.1 dev eth0 # 这就是 gateway
4.2、 Endpoint
- Kubernetes 中 Endpoints 是一个 API 对象,记录 Service 后端的真实地址。例如:
yaml
# Service
apiVersion: v1
kind: Service
metadata:
name: my-app
spec:
selector:
app: my-app
ports:
- port: 80
bash
# 查看对应的 Endpoints
kubectl get endpoints my-app
# 输出:
NAME ENDPOINTS AGE
my-app 10.244.1.5:8080,10.244.2.3:8080 ← 这些就是 endpoints
✅ 所以:Service 把请求转发到 Endpoints(即 Pod 的 IP:Port)
4.3、常见误解澄清
| 误解 | 正确理解 |
|---|---|
| "Endpoint 是网关" | ❌ 完全不同:Endpoint 是目标地址,Gateway 是出口路由器 |
| "没有 Gateway 就不能通信" | ❌ 同一子网内容器通信不需要网关(直接二层通信) |
| "Endpoint 只是 IP" | ❌ 通常是 IP + Port,有时还包括协议(如 gRPC endpoint) |
五、 总结对比
| 特性 | Gateway | Endpoint |
|---|---|---|
| 角色 | 出口路由器 | 服务接入点 |
| 用途 | 跨网络通信 | 服务发现与访问 |
| 格式 | 单个 IP 地址 | IP:Port(或 URI) |
| 配置者 | CNI / Docker network | 应用 / Service / 用户 |
| 必要性 | 外网访问必需 | 服务暴露必需 |
| K8s 对象 | 无直接对象(隐含在 CNI 中) | 有 Endpoints API 对象 |
- 一句话记住:Gateway 帮你"走出去",Endpoint 告诉别人"怎么找到你"。