
1. Kubernetes网络与服务发现面试核心要点解析在容器编排领域Kubernetes的网络模型和服务发现机制一直是技术面试的高频考点。我整理了实际面试中最常被问及的12类问题及其技术原理结合自己参与大规模集群运维的经验深入剖析这些题目背后的知识体系。2. 基础网络模型剖析2.1 Pod网络实现原理Kubernetes要求每个Pod拥有唯一IPIP-per-Pod模型这个设计使得容器间通信无需NAT端口分配简化网络策略精准控制主流CNI插件实现方式对比插件类型典型代表网络性能配置复杂度适用场景OverlayFlannel(VXLAN)中等简单中小规模集群路由方案Calico(BGP)高中等需要网络策略混合模式Cilium(eBPF)极高复杂高性能场景实际经验生产环境推荐CalicoBGP模式我们在500节点集群中实测Pod间延迟0.5ms2.2 Service网络深度解构Service的三种典型类型及其实现差异ClusterIP核心实现kube-proxy的iptables/ipvs规则流量路径Pod - iptables - 目标Pod典型问题如何解释-A KUBE-SERVICES -d 10.96.0.1/32 -p tcp --dport 443 -j KUBE-SVC-NPX46M4PTMTKRN6Y这条规则NodePort端口映射机制NodeIP:30000-32767常见误区忘记配置节点安全组规则导致访问失败LoadBalancer云厂商实现差异AWS的NLB vs GCP的L4 LB我们遇到的坑ALB控制器需要显式注解alb.ingress.kubernetes.io/target-type: ip3. 服务发现机制详解3.1 DNS解析全流程以my-svc.my-namespace.svc.cluster.local为例CoreDNS收到查询请求检查/etc/resolv.conf中的search域返回A记录ClusterIP或SRV记录Headless Service关键配置参数dnsConfig: searches: - my-namespace.svc.cluster.local - svc.cluster.local options: - name: ndots value: 53.2 EndpointSlice新特性相比传统Endpoints的优势单个Service可分散到多个Slice默认每个100个Endpoint包含拓扑等元信息更高效的watch机制排查案例某次服务异常因EndpointSlice控制器卡死导致通过以下命令发现kubectl get endpointslices --all-namespaces -w4. 高阶面试题精讲4.1 网络策略实战典型问题如何限制frontend只能访问backend的80端口正确实现apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: frontend-to-backend spec: podSelector: matchLabels: role: frontend policyTypes: - Egress egress: - to: - podSelector: matchLabels: role: backend ports: - protocol: TCP port: 80常见错误忘记指定policyTypes混淆ingress/egress方向端口协议未明确定义4.2 Ingress高级配置面试高频考点路径重写规则annotation:nginx.ingress.kubernetes.io/rewrite-target灰度发布实现annotation:nginx.ingress.kubernetes.io/canary连接优雅终止configmap:worker-shutdown-timeout性能优化参数kind: ConfigMap apiVersion: v1 metadata: name: nginx-config data: keep-alive: 75 upstream-keepalive-connections: 10005. 故障排查体系5.1 网络诊断工具链推荐排查路径Pod内测试ping target服务发现验证nslookup my-svc端口连通性telnet IP PORT流量追踪tcpdump -i eth0 -nn -vv port 80iptables检查iptables-save | grep service5.2 典型故障案例案例1DNS解析超时现象应用间歇性连接失败根因CoreDNS Pod被调度到高负载节点解决方案配置Pod反亲和性affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: k8s-app operator: In values: [kube-dns] topologyKey: kubernetes.io/hostname案例2NodePort访问失败现象外部请求返回Connection refused检查清单kubectl get svc确认端口映射节点安全组规则节点本地防火墙firewalld/ufwkube-proxy日志journalctl -u kube-proxy6. 性能优化实践6.1 大规模集群网络调优实测有效的参数调整# 增大conntrack表大小 sysctl -w net.netfilter.nf_conntrack_max1000000 # 缩短TCP超时 sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established600 # 启用IPVS模式 kube-proxy --proxy-modeipvs --ipvs-schedulerrr6.2 eBPF加速方案Cilium的典型性能收益延迟降低50%旁路kube-proxyCPU消耗减少30%支持7层网络策略部署注意事项内核版本要求≥4.19需要禁用其他CNI插件首次部署建议使用独立测试集群7. 最新特性解读7.1 Gateway API演进与传统Ingress对比优势角色分离Infra vs App团队更灵活的流量路由多实现标准化示例配置apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: http-app-route spec: parentRefs: - name: internet-gateway rules: - matches: - path: type: PathPrefix value: /shop backendRefs: - name: shop-service port: 807.2 服务网格集成模式Istio与Kubernetes服务发现的协同自动注入sidecarVirtualService扩展K8s Service金丝雀发布精细控制关键调试命令# 查看Envoy配置 istioctl proxy-config all pod -o json # 流量镜像配置示例 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - mirror: host: reviews-test route: - destination: host: reviews8. 面试实战技巧8.1 问题拆解方法论遇到Service不通如何排查类问题时分层检查Pod层基础网络Service层DNS/Endpoint外部访问层Ingress/LB工具链运用graph TD A[现象描述] -- B{Pod间通吗?} B --|Yes| C{能解析Service吗?} B --|No| D[检查CNI插件] C --|Yes| E{Endpoint正常吗?} C --|No| F[检查CoreDNS]8.2 架构设计类问题示例设计千万级QPS的微服务网络架构 回答要点采用CiliumBPF提升性能分片部署CoreDNS使用EndpointSlice优化控制面多集群Service统一发现分级监控体系PrometheusELK9. 推荐学习路径9.1 官方文档重点必读章节Services NetworkingNetwork PoliciesDNS for Services and Pods9.2 实验环境搭建Minikube快速验证网络行为minikube start --network-plugincni --cnicalico kubectl create deployment nginx --imagenginx kubectl expose deployment nginx --port80 kubectl run testpod --imagebusybox --rm -it -- ping nginx.default.svc.cluster.local10. 进阶资源推荐10.1 性能调优指南《Kubernetes网络权威指南》Cilium官方性能白皮书KubeCon相关演讲视频10.2 开源项目实践参与Kubernetes网络SIG贡献CNI插件文档复现官方issue中的网络案例11. 避坑指南11.1 常见配置错误误用hostNetwork导致端口冲突忘记配置readinessProbe导致流量丢失NetworkPolicy规则冲突DNS策略配置不当11.2 版本升级注意从1.21升级到1.22时移除对beta.kubernetes.io/os标签的支持EndpointSlice默认启用kube-proxy模式检测更严格12. 监控与日志12.1 关键监控指标# Service不可用告警 sum(up{jobkubernetes-service-endpoints} 0) by (namespace, service) # DNS查询延迟 histogram_quantile(0.99, sum(rate(coredns_dns_request_duration_seconds_bucket[5m])) by (le))12.2 日志分析技巧# 追踪kube-proxy日志 journalctl -u kube-proxy -f | grep -E Dropping|Failed # 解析CoreDNS查询 kubectl logs -l k8s-appkube-dns -n kube-system --tail100 | grep -A 5 ERROR