2. 网络拓扑基础:Kubernetes网络模型、Pod网络、Service网络、集群网络与外部网络的关系

在构建内部开发者平台(IDP)的网络拓扑时,理解 Kubernetes 网络模型是配置 Ingress 与 Gateway 的前提。Kubernetes 网络模型并非单一平面,而是由 Pod 网络、Service 网络、集群网络 和 外部网络 四个层次叠加而成。每一层解决不同的通信问题,并遵循严格的地址与路由规则。

2.1 Kubernetes 网络模型核心原则

Kubernetes 对网络提出了三个基础要求,所有 CNI 插件都必须满足:

  • Pod 间直接通信:任意两个 Pod 可以不经过 NAT 直接通过 IP 地址通信,无论它们是否在同一节点。
  • 节点与 Pod 直接通信:节点上的 kubelet 或监控 Agent 可以直接访问 Pod IP。
  • Pod 内容器共享网络:同一个 Pod 内的所有容器共享同一个网络命名空间(IP 和端口)。
关键理解: Kubernetes 网络模型本质上是“扁平 IP 网络”,没有 NAT、没有端口映射、没有代理。所有通信都是基于真实 IP 的直接路由。这一设计极大简化了应用架构,但也对底层网络基础设施提出了更高要求。

2.2 四层网络拓扑详解

下表从地址空间、通信范围、路由方式三个维度对比四层网络:

网络层 地址空间 通信范围 路由方式
Pod 网络 CNI 分配的 CIDR(如 10.244.0.0/16) 集群内所有 Pod 之间 Overlay(VXLAN/IPIP)或 Underlay(BGP)
Service 网络 kube-apiserver 指定的 CIDR(如 10.96.0.0/12) 集群内所有节点与 Pod kube-proxy(iptables/IPVS/eBPF)
集群网络 节点物理 IP + Pod CIDR 集群内节点 ↔ Pod ↔ Service CNI 插件 + 节点路由表
外部网络 公网 IP / 企业内网 IP 集群外客户端 ↔ 集群内服务 Ingress / Gateway / LoadBalancer

2.3 Pod 网络:通信的原子单元

Pod 是 Kubernetes 中最小的调度单位,每个 Pod 拥有一个独立的 IP 地址。Pod 网络的核心机制包括:

  • 容器间通信:同一 Pod 内的容器通过 localhost 通信,共享网络栈。
  • Pod 间通信:跨 Pod 通信必须经过 CNI 插件管理的虚拟网络设备(如 veth pair、bridge、tunnel)。
  • IP 分配:Pod IP 由 CNI 插件从集群的 Pod CIDR 中动态分配,Pod 重启后 IP 会变化。
实践提示: 由于 Pod IP 不固定,应用不应直接使用 Pod IP 进行服务发现。应始终通过 Service 名称或 EndpointSlice 来访问后端 Pod。

2.4 Service 网络:稳定的虚拟入口

Service 是 Kubernetes 中用于暴露一组 Pod 的抽象层。Service 网络的核心是 ClusterIP,这是一个虚拟 IP,不会绑定到任何物理设备。kube-proxy 负责将发往 ClusterIP 的流量转发到后端 Pod。

Service 网络的关键特性:

  • 虚拟 IP 不可路由:ClusterIP 仅在集群内部可达,外部网络无法直接访问。
  • 负载均衡:kube-proxy 支持 iptables(随机)、IPVS(加权轮询)、eBPF(内核级转发)三种模式。
  • 服务发现:CoreDNS 将 Service 名称解析为 ClusterIP,实现基于 DNS 的服务发现。
# 查看集群中的 Service 及其 ClusterIP
kubectl get svc -n idp-system
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
idp-api       ClusterIP   10.96.12.1      <none>        8080/TCP         7d
idp-web       ClusterIP   10.96.12.2      <none>        3000/TCP         7d
idp-db        ClusterIP   10.96.12.3      <none>        5432/TCP         7d

2.5 集群网络:节点与 Pod 的互联

集群网络是 Pod 网络与节点网络的融合层。CNI 插件负责在节点之间建立数据通路,确保 Pod IP 在整个集群内可达。常见的集群网络方案包括:

方案类型 代表插件 路由原理 适用场景
Overlay Flannel (VXLAN)、Calico (IPIP) 在节点间建立隧道,封装原始数据包 云环境、跨子网、无需底层路由支持
Underlay Calico (BGP)、Cilium (eBPF) 通过 BGP 将 Pod 路由广播到物理网络 裸金属、高性能、低延迟需求
混合 Cilium (eBPF + VXLAN) 根据网络拓扑动态选择封装或直连 大规模混合部署、多集群互联

2.6 外部网络:集群与世界的桥梁

外部网络是集群外部的客户端(如浏览器、移动 App、其他微服务)访问集群内服务的通道。Kubernetes 提供了三种标准方式:

  1. NodePort:在每个节点上开放一个静态端口(30000-32767),流量通过 kube-proxy 转发到 Service。
  2. LoadBalancer:云厂商提供的外部负载均衡器,自动分配公网 IP,流量直达 NodePort 或 Pod。
  3. Ingress / Gateway API:七层(HTTP/HTTPS)路由规则,支持域名、路径、TLS 终止等高级功能。
注意: NodePort 和 LoadBalancer 工作在四层(TCP/UDP),无法处理 HTTP 路由、请求头修改、流量拆分等七层场景。对于 IDP 平台,强烈建议使用 Ingress 或 Gateway API 作为外部流量入口。

2.7 四层网络拓扑关系图

下图展示了从外部客户端到 Pod 的完整流量路径,以及各网络层的边界:

Kubernetes 四层网络拓扑关系图 Kubernetes 四层网络拓扑关系图 外部网络(External Network) 公网 IP / 企业内网 IP / DNS 域名 Ingress / Gateway API 七层路由、TLS 终止、流量拆分 Service 网络(ClusterIP 10.96.0.0/12) 虚拟 IP · kube-proxy 转发 · DNS 服务发现 Pod 网络(CNI CIDR 10.244.0.0/16) Pod IP · 容器共享网络 · 扁平 IP 通信 集群网络(节点物理 IP + CNI 路由) 说明:外部流量 → Ingress/Gateway → Service(ClusterIP)→ Pod(CNI 路由)→ 节点网络

2.8 网络拓扑中的关键路由决策点

在 IDP 网络拓扑中,流量从外部到达 Pod 需要经过以下决策点:

决策点 决策依据 典型配置
DNS 解析 域名 → Ingress/Gateway 公网 IP CNAME / A 记录指向负载均衡器
Ingress 路由 Host + Path → 后端 Service host: idp.example.com + path: /api/*
Service 转发 ClusterIP:Port → Pod IP:Port kube-proxy iptables 规则
CNI 路由 Pod IP → 目标节点 VXLAN 隧道 / BGP 路由表
架构启示: 在 IDP 平台中,Ingress/Gateway 是外部网络与集群网络的“边界网关”。所有安全策略(TLS、认证、限流)应在此层实施,避免将安全责任下放到 Pod 层面。Service 网络则负责内部服务发现与负载均衡,不应暴露到集群外部。