K8s 网络 CNI / 网络模型 面试问答(精简口述版)
K8s 网络 CNI / 网络模型 面试问答(精简口述版)
Q1:K8s 网络模型四大基本原则(必考)
A:
- 所有 Pod 之间可以直接通信,不需要 NAT
- 节点上所有 Pod 可以和节点本身直接通信
- 节点之间可以直接通信
- Pod 访问 Service、Service 访问后端 Pod 会做 NAT(这条是 Service 四层转发,不属于基础 Pod 网络)
Q2:什么是 CNI?
A:Container Network Interface,容器网络接口。是一套标准。
CNI 插件负责给 Pod 分配 IP、配置 Pod 网络。kubelet 创建 Pod 时调用 CNI 插件。
常见插件:Calico、Flannel、Weave。
Q3:CNI 插件做哪些事?
A:创建网络命名空间、创建 veth pair 虚拟网卡、分配 IP、配置路由。Pod 删除时清理网络资源。
Q4:Flannel 原理?
A:Overlay 网络,三层隧道。
每个节点上运行 flanneld;Pod 跨节点通信时,数据包封装在 UDP 包内,通过宿主机网络转发。
优点简单;缺点:没有网络策略,性能一般,适合测试环境。
Q5:Calico 原理?
A:BGP 协议,可 Underlay 也可以 Overlay(IPIP)。
不使用隧道时直接路由;支持NetworkPolicy 网络策略,可以做 Pod 间访问控制。生产最常用。
Q6:NetworkPolicy 网络策略是什么?
A:K8s 原生 Pod 防火墙,控制 Pod 的入 / 出流量。
基于 Pod 标签、命名空间、IP 段来放行 / 拒绝流量。
⚠️ 注意:需要 CNI 插件支持(Calico 支持,Flannel 默认不支持 NetworkPolicy),不配置策略默认全部允许。
Q7:Pod 网络 IP 特点?
A:Pod IP 是集群内唯一 IP。Pod 重建 / 漂移,IP 会变化,所以业务不能依赖 Pod IP,要用 Service。
同一 Pod 内多个容器共享同一个网络命名空间,localhost互通。
Q8:veth pair 是什么?
A:一对虚拟网卡,像一根网线,一端在宿主机网络命名空间,一端在 Pod 网络命名空间。Pod 的流量通过 veth pair 进出。
Q9:Service 和 CNI 网络的关系?
A:CNI 负责 Pod 之间底层连通;Service 是四层负载均衡,由 kube-proxy 在节点上维护 iptables/ipvs 规则,不属于 CNI。
Q10:ClusterIP、PodIP、NodeIP 区别
A:
- PodIP:Pod 本身 IP,CNI 分配,会变
- NodeIP:宿主机物理网卡 IP
- ClusterIP:Service 虚拟 IP,集群内固定,不是真实网卡,由 kube-proxy 维护转发
Q11:Ingress 和 Service 的区别
A:Service 四层 TCP/UDP;Ingress 七层 HTTP/HTTPS,支持域名、路径路由,外部流量入口。Ingress 后端绑定 Service。
Q12:Pod 跨节点不通,排查思路?
A:
- 先看 Pod IP 是否正常,CNI 插件 Pod 是否 Running
- 同节点 Pod 能不能互通,定位是同节点问题还是跨节点问题
- 检查节点防火墙、内核 ip 转发是否开启
- Calico:BGP 邻居是否正常;Flannel:隧道是否正常
- NetworkPolicy 策略是否拦截流量
Q13:Pod 能 ping 通 PodIP,但访问端口不通,排查?
A:大概率不是底层网络问题:
- 应用没监听对应端口
- 应用监听在 127.0.0.1,没有监听 0.0.0.0
- NetworkPolicy 拒绝端口
- Pod 内部防火墙
Q14:ipvs vs iptables(kube-proxy 模式,这里回顾)
A:
- iptables:纯 iptables 规则,无需额外内核模块。大规模集群规则太多,性能下降。
- ipvs:内核 ipvs 模块,专门负载均衡,支持多种调度算法,大集群性能更好。
Q15:什么是 Overlay 和 Underlay 网络
A:
- Underlay:底层物理网络直接路由,Pod 包不封装,性能高,依赖物理网络规划。
- Overlay:数据包封装,在现有网络之上构建虚拟网络,不依赖底层网络改造,会有少量性能损耗(IPIP/VXLAN)。
浙公网安备 33010602011771号