K8s 网络 + 微服务的底层逻辑,2 种架构,二选一,泾渭分明,总结。
·
1)纯 K8s 原生方案(不用 Nacos)
服务发现 = CoreDNS + kube-proxy
- 调用:
服务名:端口 - CoreDNS 解析成 Service IP
- kube-proxy 做负载均衡转发到 Pod
- 适合:简单服务、不用 Spring Cloud
2)微服务方案(用 Nacos)
服务发现 = Nacos
- 从 Nacos 拿 真实 Pod IP
- 直接调用,走 Calico 网络
- CoreDNS、kube-proxy 不参与业务调用
- 适合:Spring Cloud 微服务、要配置中心、要跨集群
最终一句话记住
要么 K8s 自己管发现(CoreDNS+kube-proxy),要么应用自己管发现(Nacos),二选一,不会混着用。
CoreDNS + kube-proxy 是「集群底层网络层」的服务发现Nacos 是「业务应用层」的服务发现
不是谁 “更高档”,而是谁来管、谁感知。
一、为什么 CoreDNS + kube-proxy 不算「应用层」?
因为:
业务代码 完全不知道 它们的存在
写代码时:
java
运行
// 纯 K8s 方案
restTemplate.getForObject("http://user-service:8080/user", ...);
你代码里只写了服务名,剩下的全是K8s 底层偷偷干:
- CoreDNS 解析域名
- kube-proxy 做负载均衡
- 网络转发到 Pod
应用代码:不集成任何 SDK、不维护实例列表、不选 IP。→ 这是基础设施在替你做发现,和应用无关。
二、为什么 Nacos 叫「应用层」发现?
因为:
业务代码 主动参与 服务发现
必须:
- 引入 Nacos SDK
- 主动去 Nacos 拉取
user-service的实例列表 - 自己选择一个 Pod IP
- 直接调用这个 IP
代码逻辑亲自参与了:
- 去哪查
- 查什么
- 选哪个调用
→ 这是应用自己管服务发现,所以叫「应用层」。
三、最直白的对比(秒懂)
表格
| 方式 | 谁维护服务列表 | 谁选 IP | 业务代码感知吗 | 属于哪一层 |
|---|---|---|---|---|
| K8s (CoreDNS+kube-proxy) | K8s 控制平面 | kube-proxy | 完全不感知 | 底层网络层 |
| Nacos | Nacos 注册中心 | 你的业务代码 | 主动感知、主动选择 | 业务应用层 |
四、回到开始的问题
要么 K8s 自己管发现(CoreDNS+kube-proxy),这不是应用层吗为啥只说 nacos 是应用层?
答案就是:
- K8s 管发现 = 底层帮你包办,应用啥也不干
- Nacos 管发现 = 应用自己动手,自己做主
最终极简记忆
- K8s 发现:集群底层偷偷干 → 网络层
- Nacos 发现:应用代码主动干 → 应用层
更多推荐

所有评论(0)