跳到正文
复制成功
请遵守本站许可
报告
章节_文章 // 现场报告

文章编号: RL-KUBERNET

2026.08.21

Kubernetes 网络概览

Chavy
Chavy
#Kubernetes#网络#网络模型
档案

摘要:建立 Kubernetes 网络的分层全景,区分 Pod 网络、Service、DNS、Ingress 与 NetworkPolicy 的职责,并串联各模块的学习顺序。

Kubernetes 网络的核心作用是让集群中的 Pod、Service、节点与集群外部客户端能够通信,并控制访问范围。

1. Kubernetes 网络解决的问题#

先看一个典型的微服务架构。

flowchart TB
    N0["外部用户 / 浏览器<br/>访问网站、调用 API"]
    N1["Ingress / LoadBalancer<br/>接收外部流量、进行路由"]
    N2["Service:前端服务"]
    N3["前端 Pod 1"]
    N4["前端 Pod 2"]
    N5["Service:后端 API"]
    N6["后端 Pod"]
    N7["数据库 Pod"]
    N0 --> N1
    N1 --> N2
    N2 --> N3
    N2 --> N4
    N3 --> N5
    N4 --> N5
    N5 --> N6
    N6 --> N7

示意图:实际流量是否经过 Ingress、Service,取决于部署方式和访问路径。

K8s 网络主要解决下面五个问题。

问题网络组件或机制作用
Pod 如何访问另一个 Pod?Pod 网络、CNI实现 Pod 之间的通信
Pod 重建后 IP 变了怎么办?Service、DNS通过稳定的服务名称访问
外部用户如何访问应用?Ingress、LoadBalancer、NodePort将外部流量引入集群
不同节点上的 Pod 如何通信?CNI、底层路由或隧道跨节点传输网络流量
如何限制 Pod 之间的访问?NetworkPolicy实施网络访问控制

2. 网络分层全景#

flowchart TB
    N0["外部流量入口<br/>Ingress · Gateway API · LoadBalancer · NodePort"]
    N1["服务发现与转发<br/>Service · EndpointSlice · CoreDNS · kube-proxy"]
    N2["Pod 网络与跨节点通信<br/>Pod IP · CNI · 路由 · Overlay · Underlay"]
    N3["Linux 网络底层<br/>Network Namespace · veth · Bridge · 路由表 · Netfilter · eBPF"]
    N4["贯穿所有层的能力<br/>NetworkPolicy<br/>MTU<br/>网络排障<br/>监控与可观测性"]
    N0 <--> N1
    N1 <--> N2
    N2 <--> N3
    N4 -.->|"贯穿"| N0
    N4 -.->|"贯穿"| N1
    N4 -.->|"贯穿"| N2
    N4 -.->|"贯穿"| N3

3. 各组件的职责与层次#

可以用这张表建立整体认知。

组件你可以把它理解成主要职责
CNI修路与配置网络为 Pod 配置网络连接
Pod IP办公室地址标识 Pod 的网络地址
Service固定的服务窗口为一组 Pod 提供稳定访问入口
CoreDNS电话簿解析 Service 等 DNS 名称
kube-proxy流量转发规则管理者在常见实现中配置 Service 转发规则
Ingress ControllerHTTP 流量调度员按域名、路径等规则转发请求
NetworkPolicy门禁规则限制 Pod 的网络访问

需要特别区分:这些组件不是完全相同层次的东西。例如,CNI 负责 Pod 网络配置,Service 负责服务发现和流量转发,而 Ingress Controller 负责更高层的 HTTP 路由。

4. 八个知识模块#

1. Pod 网络基础#

这是所有内容的起点。

Kubernetes 的基本网络模型要求不同 Pod 能够直接通信,不需要依赖手动配置的容器端口映射;实际如何实现由 CNI 和底层网络共同决定。

  • Pod IP 的分配与生命周期
  • Pod 内多个容器如何共享网络命名空间
  • 容器端口、Pod 端口和节点端口的区别
  • 同一 Pod 内通信、同节点 Pod 通信、跨节点 Pod 通信
  • Kubernetes 网络模型的基本要求
  • IPv4、IPv6、双栈网络

需要理解的典型问题:为什么两个不同节点上的 Pod 可以通过 Pod IP 直接通信?

2. Linux 网络底层#

理解这一部分,才能看懂 CNI 插件具体做了什么。

网络命名空间与虚拟网卡

  • Network Namespace
  • veth pair
  • Linux Bridge
  • 网络接口与 IP 地址配置

路由与数据包转发

  • 路由表、默认网关
  • ARP、邻居表
  • IP 转发、NAT
  • MTU、分片与 PMTU

内核包处理机制

  • Netfilter
  • iptables、nftables
  • conntrack
  • eBPF 与 XDP 基础

3. CNI 与 Pod 跨节点通信#

CNI 是 Kubernetes 容器网络插件体系中非常重要的一环。它负责 Pod 网络的配置,具体网络数据面的实现则由相应插件完成。

重点知识:

知识点要理解的问题
CNI 接口与插件容器创建时,网络如何被配置?
IPAMPod IP 从哪里分配?
Underlay 网络Pod 网络如何利用底层路由网络?
Overlay 网络如何通过隧道承载 Pod 流量?
VXLAN如何封装、传输跨节点流量?
BGP如何向其他节点或路由设备传播路由?
MTU为什么跨节点通信可能出现大包丢失?

常见方案:

  • Flannel:常用于理解基础的 Overlay 网络。
  • Calico:可以学习路由、BGP、NetworkPolicy。
  • Cilium:可以学习 eBPF、服务转发和可观测性。

建议先掌握一种方案的完整通信链路,再对比其他方案,而不是一开始同时研究所有插件。

4. Service 与流量转发#

Service 解决的是:Pod 会变化,服务访问入口应该尽量稳定。

Service 不只是 DNS。DNS 负责名称解析,Service 的数据转发通常由 kube-proxy 或 CNI 等实现。

  • ClusterIP
  • NodePort
  • LoadBalancer
  • Headless Service
  • ExternalName
  • selector 与 EndpointSlice
  • kube-proxy 的工作机制
  • iptables 与 IPVS 模式
  • CNI 替代 kube-proxy 的实现思路

特别需要搞清楚:访问 ClusterIP 后,数据包究竟如何找到后端 Pod?

这也是理解 K8s 网络数据面的关键问题。

5. DNS 与服务发现#

重点学习:

  • CoreDNS 的作用与配置
  • Service DNS 名称的格式
  • Pod 的 /etc/resolv.conf
  • ndots、搜索域与 DNS 查询行为
  • DNS 缓存与解析失败
  • nslookup、dig 等排障命令
  • 跨 Namespace 服务访问
  • Headless Service 的 DNS 行为

例如,backend.default.svc.cluster.local 通常对应 default 命名空间中的 backend Service。

注意 DNS 解析成功不代表服务一定可达;它只解决名称解析问题。

6. 外部流量入口#

重点区分这些概念:

组件主要用途
NodePort在节点端口上暴露 Service
LoadBalancer通过负载均衡器对外提供服务
Ingress定义 HTTP/HTTPS 域名与路径路由规则
Ingress Controller实际执行 Ingress 路由规则
Gateway API更丰富、结构化的流量路由与网关配置模型

Ingress 必须有对应的 Controller 执行规则;仅创建 Ingress 对象不会自动提供代理能力。

还需要学习:

  • TLS 终止
  • 七层路由与四层转发
  • 外部负载均衡器与集群内部转发
  • externalTrafficPolicy
  • 客户端源 IP 保留
  • 健康检查和故障切换

7. 网络安全与隔离#

K8s 网络不只是连通,还要控制访问范围。

  • NetworkPolicy 的 Pod 选择器
  • Ingress 与 Egress 规则
  • Namespace 之间的网络隔离
  • DNS 流量放行
  • 默认拒绝策略
  • CNI 对 NetworkPolicy 的实现
  • Service Mesh 中的 mTLS 与服务间身份认证

要特别注意:NetworkPolicy 的支持程度取决于网络插件,不能认为创建策略对象就一定能拦截流量。

8. 网络排障与可观测性#

这是生产环境最有价值的模块之一。

常用命令:

PRTCL // BASH
Terminal window
# 查看 Pod 和节点地址
kubectl get pods -A -o wide
kubectl get nodes -o wide
# 查看 Service 和后端端点
kubectl get svc -A
kubectl get endpointslices -A
# 查看 DNS 和网络配置
kubectl exec -it <pod> -- cat /etc/resolv.conf
kubectl exec -it <pod> -- ip route
# Linux 网络排障
ip addr
ip route
ip neigh
ss -lntp
tcpdump -ni any

如果容器中没有 ip、curl 或 tcpdump,可以使用临时调试容器或临时调试 Pod。

常见故障可以按链路排查:

  1. DNS 是否解析正确?
  2. Service 是否有可用 EndpointSlice?
  3. Pod 是否正常监听目标端口?
  4. 路由是否正确?
  5. CNI、iptables、eBPF 或 NetworkPolicy 是否影响流量?
  6. MTU、防火墙或底层网络是否丢包?

5. 学习顺序与能力检查#

如果目标是从 CKA 基础逐步深入到底层实现,建议这样安排:

第 1 周

Pod 网络与 Linux 基础

Pod IP、Network Namespace、veth、路由、Bridge。

第 2 周

Service、DNS 与转发

ClusterIP、NodePort、EndpointSlice、CoreDNS、kube-proxy。

第 3 周

CNI 与跨节点网络

Flannel、Calico、VXLAN、BGP、MTU。

第 4 周

网络策略、入口与生产排障

Ingress、Gateway API、NetworkPolicy、抓包与故障定位。

1. 学完后应该具备什么能力?#

最终,你应该能够解释并实际排查下面这条链路:

flowchart TB
    N0["客户端"]
    N1["外部负载均衡器"]
    N2["Ingress Controller"]
    N3["Service"]
    N4["后端 Pod"]
    N5["Linux 网络栈 / CNI 数据面"]
    N6["目标进程"]
    N0 --> N1
    N1 --> N2
    N2 --> N3
    N3 --> N4
    N4 --> N5
    N5 --> N6

这只是一个示例路径,实际的入口和转发顺序会随部署方式变化。

6. 职责检查清单#

Pod 网络负责连通,Service 负责稳定访问,DNS 负责名称解析,Ingress 负责外部 HTTP 流量入口,NetworkPolicy 负责网络访问控制。

归档于 2026.08.21
// 档案结束
Classified
章节_06
协议编号: CC-BY-NC-SA-4.0

Kubernetes 网络概览

作者:Chavy发布日期:2026.08.21

基于 CC BY-NC-SA 4.0

© 2026 Chavy
Powered by Astro