Skip to content

面试题深度详解:网络(10 题)

覆盖 Service、CNI、DNS、Ingress、Gateway API、eBPF、网络排障等高频面试题。


Q11: Service 的 ClusterIP 是如何工作的(iptables/IPVS)

答题思路

从 ClusterIP 的本质(虚拟 IP)出发,解释 kube-proxy 如何通过 iptables/IPVS 实现流量转发。

技术原理深度剖析

iptables 模式:
- 每个 Service 需要多条 iptables 规则(KUBE-SERVICES → KUBE-SVC → KUBE-SEP)
- O(n) 规则链,Service 越多性能越差
- 随机选择后端(基于 -m statistic --probability)

IPVS 模式:
- 哈希表查找,O(1) 复杂度
- 支持负载均衡算法:rr/wrr/lc/sh/sed/nq
- 支持连接保持(session affinity)
- 内核模块 ip_vs 实现

性能对比:
- 100 Service:两者差异不大
- 1000 Service:IPVS 明显优于 iptables
- 10000 Service:iptables 几乎不可用,必须用 IPVS 或 eBPF

三级参考答案

B 级:

ClusterIP 是 K8s 内部的虚拟 IP。kube-proxy 通过 iptables 规则将发往 ClusterIP 的流量 DNAT 到后端 Pod IP。IPVS 模式性能更好,支持更多负载均衡算法。

A 级:

iptables 模式是 O(n) 线性匹配,每个 Service 需要多条规则,Service 数量多时性能下降。IPVS 模式使用内核哈希表,O(1) 查找,支持 rr/wrr/lc/sh 等算法,支持连接保持。大规模集群(>1000 Service)应使用 IPVS 模式。

S 级:

深入:iptables 规则的 KUBE-SERVICES 链使用 -m statistic --mode random --probability 实现随机选择后端。IPVS 使用 MASQ 模式时需要 conntrack 记录连接状态,大量短连接场景下 conntrack 表可能满。可通过 nf_conntrack_max 调优。EndpointSlice 替代 Endpoints 资源,解决大规模端点的性能问题。


Q12: Pod 跨节点通信的完整网络路径

答题思路

这是 K8s 网络模型的核心问题,需要画出完整的数据包路径。

三级参考答案

B 级:

同节点 Pod 通过 veth pair 和 bridge 通信,不离开宿主机。跨节点 Pod 通信依赖 CNI 插件,VXLAN 模式通过隧道封装,BGP 模式通过路由直接转发。

A 级:

跨节点 VXLAN 路径:Pod → veth → 宿主机 → VXLAN 封装 → 物理网络 → 目标宿主机 → VXLAN 解封 → veth → 目标 Pod。BGP 模式无封装,性能更好但需要同 L2/L3 网络。VXLAN 有约 5% 性能损耗,MTU 减少 50 字节。

S 级:

Cilium 使用 eBPF 替代 iptables 做网络转发,XDP 可在网卡驱动层直接处理数据包,延迟更低。MTU 问题排查:如果 Pod 间大包不通但小包通,通常是 MTU 不匹配(VXLAN 需要设置 MTU = 物理 MTU - 50)。conntrack 表满时跨节点通信会异常,可通过 conntrack -S 检查丢包统计。


Q13: Ingress Controller 的工作原理

答题思路

从 Ingress 资源的作用出发,解释 Ingress Controller 如何将外部流量路由到内部 Service。

三级参考答案

B 级:

Ingress Controller 是一个反向代理(如 nginx),Watch Ingress 资源的变化,自动更新代理规则,将外部 HTTP 流量路由到集群内部 Service。

A 级:

Ingress Controller 通过 Watch 机制监听 Ingress 和 Service 资源变更,动态生成反向代理配置,支持基于 Host 和 Path 的路由、TLS 终止、重写 URL 等功能。常见实现有 nginx-ingress、Traefik、Kong。Ingress 本身只是规则定义,需要 Ingress Controller 才能生效。

S 级:

nginx-ingress Controller 使用 Go 模板引擎生成 nginx.conf,配置变更后 reload nginx(reload 期间不影响现有连接)。Traefik 支持自动服务发现,无需 reload。Kong 基于 OpenResty(nginx + Lua),插件生态丰富。大规模场景下,Ingress Controller 本身可能成为瓶颈,需要 HPA 扩容或切换到 Gateway API。


Q14: NetworkPolicy 的实现原理和常见陷阱

答题思路

从 NetworkPolicy 的"默认允许"行为入手,解释常见陷阱。

三级参考答案

B 级:

NetworkPolicy 是 K8s 的网络防火墙,通过 podSelector 匹配 Pod,定义入站和出站规则。默认策略是"允许所有",需要显式创建 default-deny 策略。

A 级:

NetworkPolicy 由 CNI 插件实现(Calico/Cilium 支持,Flannel 不支持)。常见陷阱:1) 默认允许所有流量,需要创建 default-deny;2) DNS 端口(53/UDP)需要显式放行;3) 只作用于 podSelector 匹配的 Pod;4) namespaceSelector 匹配的是 namespace 标签,不是名称。

S 级:

Calico 通过 iptables 规则实现 NetworkPolicy,Cilium 通过 eBPF 程序实现。Calico 的 GlobalNetworkPolicy 可以跨 namespace 应用。Cilium 支持 L7(HTTP/gRPC)级别的网络策略。NetworkPolicy 的 ingress/egress 规则是 AND 关系(from 和 ports 都匹配才允许),但多个 ingress/egress 规则之间是 OR 关系。


Q15: CoreDNS 在 K8s 中的角色和优化方法

答题思路

从 CoreDNS 的核心功能(服务发现 DNS)出发,再讲性能优化。

三级参考答案

B 级:

CoreDNS 是 K8s 的内置 DNS 服务器,为 Service 提供 DNS 解析(如 my-service.default.svc.cluster.local),也为 Pod 提供 DNS 解析。

A 级:

CoreDNS 通过 kubernetes 插件解析集群内 DNS,通过 forward 插件转发外部 DNS。优化方法:1) 调整缓存大小和 TTL;2) 使用 NodeLocal DNSCache 减少 CoreDNS 压力;3) 调整 forward 并发数;4) 使用 pods insecure 避免 Pod DNS 查询失败。

S 级:

NodeLocal DNSCache 在每个节点运行本地 DNS 缓存,命中率 > 95%,大幅减少 CoreDNS 压力。CoreDNS 的 Corefile 配置中,cache 插件支持正向和负向缓存,loop 插件检测 DNS 转发循环。大规模集群建议将 CoreDNS 副本数与节点数成正比(每 100 节点 1 个 CoreDNS 副本)。DNS 查询超时通常是 conntrack 表满或 CoreDNS Pod 资源不足。


Q16: 如何实现 K8s 集群的外部流量入口(南北向流量)

答题思路

列举南北向流量的实现方案,对比优劣。

三级参考答案

B 级:

南北向流量实现方案:NodePort(节点端口暴露)、LoadBalancer(云厂商 LB)、Ingress(HTTP 反向代理)、Gateway API(新一代入口)。

A 级:

NodePort 简单但不适合生产(端口范围限制、节点 IP 暴露)。LoadBalancer 适合公有云,自动创建外部 LB。Ingress 适合 HTTP 流量,支持 Host/Path 路由和 TLS。Gateway API 是 Ingress 的下一代替代,支持 TCP/UDP/gRPC,角色分离更清晰。私有云可用 MetalLB 提供 LoadBalancer 类型 Service。

S 级:

生产架构推荐:云厂商 LB(如阿里云 SLB)→ Ingress Controller(多副本 HPA)→ 内部 Service。多集群入口可用 Global Accelerator 或 DNS 加权。Gateway API 支持 HTTPRoute/TCPRoute/TLSRoute,通过 ReferenceGrant 实现跨命名引用。Cilium Gateway API 实现基于 eBPF,性能优于传统 Ingress。


Q17: Calico BGP 模式和 VXLAN 模式的区别和选择

答题思路

从两种模式的网络原理出发,给出选型建议。

三级参考答案

B 级:

BGP 模式通过路由协议直接转发 Pod 流量,无封装,性能好。VXLAN 模式通过隧道封装,跨 L3 网络可用。同网络用 BGP,跨网络用 VXLAN。

A 级:

BGP 模式:Pod IP 直接路由,无封装开销,性能接近物理网络。要求所有节点在同一 L2/L3 网络,BGP Peer 配置正确。VXLAN 模式:VTEP 隧道封装,跨 L3 可用,但有约 5% 性能损耗和 MTU 减少。Calico 还支持 IPIP 模式(IP-in-IP 封装),比 VXLAN 轻量但不支持跨 L3。

S 级:

Calico BGP 模式使用 bird 或 GoBGP 作为 BGP daemon,与上游路由器建立 BGP Peer。rr(Route Reflector)模式解决全互联 BGP 的可扩展性问题。VXLAN 模式下 Calico 使用 Linux 内核的 vxlan 设备,性能不如 Cilium 的 eBPF 实现。混合模式:同 AZ 用 BGP,跨 AZ 用 VXLAN。


Q18: 什么是 eBPF,Cilium 如何利用 eBPF

答题思路

从 eBPF 的技术原理出发,解释 Cilium 如何利用它替代 iptables。

三级参考答案

B 级:

eBPF 是 Linux 内核的扩展技术,允许在内核中运行沙箱程序。Cilium 用 eBPF 程序替代 iptables 实现网络策略、负载均衡和可观测性,性能更高。

A 级:

eBPF 程序挂载在内核的 hook 点(如 TC、XDP、cgroup),在数据包处理路径上执行自定义逻辑。Cilium 将网络策略、Service 负载均衡、DNS 代理等全部通过 eBPF 实现,避免了 iptables 的 O(n) 规则匹配问题。Hubble 是 Cilium 的可观测性组件,基于 eBPF 提供 L3-L7 流量可视化。

S 级:

eBPF 程序经过内核验证器(verifier)确保安全性(无无限循环、无越界访问)。XDP(eXpress Data Path)在网卡驱动层处理数据包,延迟最低。Cilium 的 eBPF datapath 分两种模式:native(XDP 模式,需要网卡驱动支持)和 generic(TC 模式,兼容所有网卡)。eBPF 也用于可观测性(如 Tetragon 安全监控、Pixie 应用性能监控)。


Q19: Gateway API 相比 Ingress 的优势

答题思路

从 Ingress 的局限性出发,解释 Gateway API 如何改进。

三级参考答案

B 级:

Gateway API 是 Ingress 的下一代替代,支持 TCP/UDP/gRPC(不仅限 HTTP),支持角色分离(平台团队管 Gateway,应用团队管 Route)。

A 级:

Gateway API 的核心资源:GatewayClass(定义控制器类型)、Gateway(定义入口点和 TLS)、HTTPRoute/TCPRoute/TLSRoute(定义路由规则)。相比 Ingress,Gateway API 提供更细粒度的控制、标准化的扩展机制(Filter 链)、跨命名引用(ReferenceGrant)。

S 级:

Gateway API 支持 BackendRef 直接引用 Service、Pod 或外部后端。HTTPRoute 支持 header 匹配、query 参数匹配、权重路由(金丝雀发布)。TLS 模式支持 Terminate(网关解密)和 Passthrough(透传到后端)。多个 Gateway API 实现:Cilium Gateway、Envoy Gateway、nginx Gateway。从 Ingress 迁移可用 ingress2gateway 工具。


Q20: 如何排查 Pod 间网络延迟问题

答题思路

这是实战排障题,需要给出系统化的排查方法。

三级参考答案

B 级:

排查步骤:1) 确认延迟是单向还是双向;2) 使用 ping 测试基础连通性;3) 使用 curl 测试应用层延迟;4) 检查 CNI 插件状态和日志。

A 级:

系统化排查:1) 确认是同节点还是跨节点(跨节点延迟通常更高);2) 使用 tcpdump 抓包分析数据包路径;3) 检查 CNI 模式(VXLAN 比 BGP 延迟高);4) 检查 conntrack 表是否满(conntrack -S | grep drop);5) 检查 MTU 是否匹配(大包不通但小包通是 MTU 问题);6) 检查节点 CPU/网络是否有瓶颈。

S 级:

高级排查:使用 Cilium Hubble 观测 L3-L7 流量延迟分布。使用 tracepktpwru 跟踪数据包在内核中的完整路径。检查 IPVS 的连接保持是否导致请求不均。检查 CoreDNS 解析延迟(DNS 查询超时会影响应用层延迟)。使用 iperf3 测试节点间带宽和延迟基线。eBPF 工具如 tcplifetcptop 可精确测量 TCP 连接延迟。


上一章:面试题深度详解:架构与原理(10 题) 下一章:面试题深度详解:存储、调度与资源(10 题)