考点:
- DNS 与服务发现
- HTTP/HTTPS 基础与报文结构
- HTTP/1.1、HTTP/2、HTTP/3 区别
- TLS/SSL 握手、证书校验、HTTPS 加密过程
- Cookie / Session / Token / JWT
- 正向代理、反向代理、网关、Ingress
- 长连接、短连接、Keep-Alive、连接复用
- WebSocket、gRPC 的特点与适用场景
- 应用层负载均衡、限流、重试、超时、熔断
- 常见应用层问题排查方法
Q1:DNS 解析过程是怎样的?在 K8s 里 Service 是如何被解析到 Pod 的?
核心要点
- 用户访问域名时,通常会先查本地缓存、操作系统缓存、hosts 文件,再向本地 DNS 服务器发起递归查询。
- DNS 查询过程中可能涉及根域名服务器、顶级域服务器、权威 DNS 服务器。
- 在 K8s 中,集群内部通常由 CoreDNS 提供服务发现。
- Pod 访问
service-name.namespace.svc.cluster.local时,会由 CoreDNS 返回对应 Service 的 ClusterIP。 - 若是 Headless Service,则返回后端 Pod IP 列表,而不是虚拟 IP。
- 这是 K8s 服务发现的基础,和 Ingress、Service Mesh、微服务调用强相关。
易错点
- 容易把 Service 名称解析结果 和 Pod IP 混为一谈。
- 容易忽略 ClusterIP Service 和 Headless Service 的区别。
- 容易只会说公网 DNS,不会结合 K8s 里的 CoreDNS。
- 容易误以为 DNS 一定是递归到底,实际上客户端通常是递归请求,本地 DNS 再进行迭代查询。
深挖点
- CoreDNS 的配置一般看哪个对象?答:
ConfigMap。 - 如果 CoreDNS 故障,集群里会出现什么现象?答:服务名无法解析,应用互调失败。
- 如何排查 DNS 问题?
nslookupdigcat /etc/resolv.conf- 查看 CoreDNS Pod 日志
- 为什么有时解析慢?
- 上游 DNS 不稳定
- CoreDNS 负载高
- DNS 缓存命中率低
- 应用频繁重复解析
- CoreDNS 的配置一般看哪个对象?答:
Q2:HTTP 和 HTTPS 的区别是什么?为什么生产环境基本都用 HTTPS?
核心要点
- HTTP 是明文传输,HTTPS 是 HTTP + TLS/SSL。
- HTTPS 提供三类核心能力:
- 加密性:防止内容被窃听
- 完整性:防止报文被篡改
- 身份认证:确认服务端身份
- HTTP 默认端口一般是 80,HTTPS 默认端口一般是 443。
- 在 K8s 中,Ingress/Nginx/网关常承担 HTTPS 终止职责。
易错点
- 不能简单说“HTTPS 更安全”,要能说明具体安全在什么地方。
- 容易误以为 HTTPS 会把所有内容都完全隐藏,实际上 域名、IP、证书部分信息 不一定完全隐藏。
- 容易把 HTTPS 和“接口一定安全”画等号,实际上还要结合鉴权、限流、WAF 等。
深挖点
- HTTPS 为什么比 HTTP 慢?
- 多了 TLS 握手
- 加解密有计算开销
- 现在为什么影响没那么大?
- TLS 1.3 优化
- 会话复用
- 长连接
- 硬件性能提升
- K8s 中 HTTPS 证书通常怎么管理?
- Secret
- cert-manager
- ACME 自动签发
- HTTPS 为什么比 HTTP 慢?
Q3:HTTPS/TLS 握手过程你怎么讲?证书校验是怎么做的?
核心要点
- 客户端先发起握手,声明支持的 TLS 版本、加密套件等。
- 服务端返回证书、公钥、协商好的加密参数。
- 客户端验证证书合法性:
- 是否在有效期内
- 域名是否匹配
- 是否由受信任 CA 签发
- 证书链是否完整
- 验证通过后,双方协商会话密钥,后续用对称加密传输应用数据。
- 非对称加密主要用于身份验证和密钥交换,对称加密用于真正的数据传输。
易错点
- 容易说成“HTTPS 全程都用非对称加密”,这是不对的。
- 容易忽略证书校验中的 域名匹配。
- 容易把 CA、证书、公钥、私钥的关系讲乱。
深挖点
- 为什么数据传输不用纯非对称加密?
- 性能差,成本高。
- 自签证书为什么浏览器默认不信任?
- 不在受信任 CA 链中。
- 运维里常见证书问题有哪些?
- 证书过期
- 证书域名不匹配
- 证书链不完整
- Secret 挂载后应用未热更新
- 常用排查命令
openssl s_client -connect host:443curl -v https://host
- 为什么数据传输不用纯非对称加密?
Q4:HTTP/1.1、HTTP/2、HTTP/3 的主要区别是什么?
核心要点
- HTTP/1.1
- 默认支持长连接
- 存在队头阻塞问题
- 常通过多个 TCP 连接并发请求来缓解
- HTTP/2
- 二进制分帧
- 多路复用
- 头部压缩
- 一个 TCP 连接上可并发多个流
- HTTP/3
- 基于 QUIC
- QUIC 基于 UDP
- 进一步优化握手和队头阻塞问题
- 在云原生场景里,网关、Ingress、Service Mesh 往往会涉及 HTTP/2 和 gRPC。
- HTTP/1.1
易错点
- 不要说 HTTP/2 消除了所有队头阻塞,它只是解决了应用层的部分问题,TCP 层仍可能存在影响。
- 不要把“HTTP/3 基于 UDP”直接理解为“不可靠”,QUIC 自身实现了可靠性机制。
- 不要把长连接和 Keep-Alive 完全等同于 HTTP/2。
深挖点
- 为什么 gRPC 常基于 HTTP/2?
- 多路复用
- 流式传输
- 更高性能
- 为什么 QUIC 更适合弱网场景?
- 连接建立更快
- 丢包恢复机制更灵活
- 实际生产中为什么 HTTP/3 没有完全替代 HTTP/2?
- 生态成熟度
- 网络设备兼容性
- 运维观测和代理链路支持差异
- 为什么 gRPC 常基于 HTTP/2?
Q5:GET 和 POST 有什么区别?幂等性是什么意思?为什么运维要关心它?
核心要点
- GET 通常用于获取资源,POST 通常用于提交数据。
- GET 一般是幂等的,POST 通常不是幂等的。
- 幂等指:多次执行同一请求,结果和执行一次相同。
- 运维要关注幂等性,因为网关、代理、重试机制、超时重发都可能导致请求被重复提交。
- 在服务治理里,重试策略必须结合接口幂等性设计。
易错点
- 不能说“GET 没有请求体,POST 才有请求体”,这是不严谨的。
- 不能把“安全方法”和“幂等方法”混为一谈。
- 不能简单认为 POST 一定不幂等,业务上也可以通过幂等号设计实现幂等。
深挖点
- 哪些方法通常是幂等的?
- GET
- PUT
- DELETE
- 为什么支付、下单接口必须做幂等?
- 防止重复扣费、重复创建订单。
- K8s/网关中哪些机制会触发重复请求?
- 超时重试
- 代理层重发
- 客户端失败重试
- 负载均衡切换
- 哪些方法通常是幂等的?
Q6:Cookie、Session、Token、JWT 有什么区别?
核心要点
- Cookie:浏览器保存在本地的小数据,常随请求自动携带。
- Session:服务端保存的会话状态,客户端通常通过 Cookie 携带 Session ID。
- Token:服务端签发给客户端的凭证,客户端后续请求主动携带。
- JWT:一种自包含的 Token 格式,包含头、载荷、签名。
- 在分布式和 K8s 场景下,Token/JWT 通常比传统 Session 更利于横向扩展。
易错点
- Cookie 不是天然不安全,不安全往往来自配置不当。
- JWT 不是天然“更安全”,它只是更适合某些分布式场景。
- 不要把“无状态”理解成系统里完全没有状态,通常只是服务端不保存会话状态。
深挖点
- Session 在多副本部署中有什么问题?
- 会话不共享
- 需要粘性会话或集中式 Session 存储
- JWT 的风险是什么?
- 一旦签发,吊销困难
- Token 泄露影响较大
- 载荷不能存敏感明文
- Cookie 常见安全属性有哪些?
HttpOnlySecureSameSite
- Session 在多副本部署中有什么问题?
Q7:什么是正向代理、反向代理?K8s 里的 Ingress 更接近哪一种?
核心要点
- 正向代理:代理客户端,服务端通常不知道真实客户端是谁。
- 反向代理:代理服务端,客户端通常无感知后端真实节点。
- Ingress / Nginx Ingress / APISIX / Traefik 本质上更接近 反向代理。
- 反向代理常用于:
- 路由转发
- TLS 终止
- 负载均衡
- 限流
- 鉴权
- 灰度发布
易错点
- 很多人只会背定义,不会结合实际场景。
- 容易把 Nginx、网关、Ingress 全混在一起说。
- Ingress 不是 Service,它们职责不同:
- Service 解决集群内服务访问
- Ingress 解决集群外七层入口访问
深挖点
- Ingress 和 四层负载均衡有什么区别?
- Ingress 更偏七层,能看 Host、Path、Header。
- 反向代理为什么能做灰度?
- 可以按路径、Header、Cookie、权重做转发策略。
- 若面试官继续追问,可延伸到:
- Ingress Controller 工作原理
- 配置下发
- 动态 reload
- upstream 健康检查
- Ingress 和 四层负载均衡有什么区别?
Q8:WebSocket 和 HTTP 有什么关系?在运维场景中要注意什么?
核心要点
- WebSocket 建立过程通常先通过 HTTP/HTTPS 发起升级握手,然后升级为全双工长连接。
- 它适合实时通信场景,如:
- 在线聊天
- 实时监控
- 推送通知
- 在 K8s 中,如果经过 Ingress/代理层,需要确认是否支持 Upgrade 头和长连接配置。
易错点
- WebSocket 不是完全独立于 HTTP 的起步协议。
- 容易忽略代理层超时配置,导致连接被意外断开。
- 容易把 WebSocket 和 SSE 混淆。
深挖点
- 为什么 WebSocket 更适合实时推送?
- 服务端可主动推送数据。
- 经过 Nginx/Ingress 时常见问题有哪些?
- Upgrade 头未透传
- 连接超时过短
- 负载均衡导致会话漂移
- 如何排查?
- 浏览器开发者工具
- Nginx/Ingress 日志
- 连接数与超时配置检查
- 为什么 WebSocket 更适合实时推送?
Q9:gRPC 是什么?为什么云原生里经常提到它?
核心要点
- gRPC 是一种高性能 RPC 框架,通常基于 HTTP/2。
- 使用 Protocol Buffers 作为接口定义和序列化方式。
- 支持:
- 一元调用
- 服务端流
- 客户端流
- 双向流
- 在微服务、Service Mesh、内部服务通信中很常见。
易错点
- 不要把 gRPC 简单等同于“就是 HTTP 接口”。
- 不要忽略它对代理、网关、可观测性的要求更高。
- 不要只谈性能,不谈调试复杂度和浏览器兼容问题。
深挖点
- gRPC 为什么性能通常比 REST 更高?
- Protobuf 更紧凑
- HTTP/2 多路复用
- 为什么很多公网 API 不直接用 gRPC?
- 浏览器支持、生态、调试便利性等因素。
- Ingress 转发 gRPC 需要注意什么?
- 是否支持 HTTP/2
- 超时配置
- 流式请求支持
- 错误码映射
- gRPC 为什么性能通常比 REST 更高?
Q10:应用层常见故障怎么排查?比如“服务能通 IP,但域名不通;HTTPS 握手失败;接口偶发 502”。
核心要点
- 先分层排查:域名解析 -> TCP 连通 -> TLS 握手 -> HTTP 状态码 -> 应用日志。
- 常见工具:
nslookupdigcurl -vopenssl s_clientkubectl logskubectl describe
- 502 常见于:
- 上游服务不可达
- 端口配置错误
- 探针异常导致无可用后端
- 代理和后端协议不匹配
- 504 常见于:
- 上游响应超时
- 499 常见于:
- 客户端提前断开连接(Nginx 语境下)
易错点
- 只盯着应用日志,不看代理层和 DNS。
- 看见 502 就说是应用代码问题,实际上可能是网关配置问题。
- 忽略 Service、Endpoints、Pod Ready 状态。
深挖点
- 如果域名不通但 IP 通,优先怀疑什么?
- DNS 配置
- CoreDNS
- resolv.conf
- hosts
- 如果 HTTPS 失败但 HTTP 正常,优先查什么?
- 证书
- SNI
- TLS 版本
- 代理配置
- 如果 Ingress 返回 502,排查顺序是什么?
- Ingress 规则
- Service 端口
- Endpoints
- Pod 监听端口
- 应用健康状态
- 如果域名不通但 IP 通,优先怀疑什么?
速记笔记
DNS
- K8s 内部服务发现核心是 CoreDNS
- ClusterIP 返回虚拟 IP,Headless Service 返回 Pod IP 列表
HTTP/HTTPS
- HTTP 明文;HTTPS = HTTP + TLS
- HTTPS 解决:加密、完整性、身份认证
TLS
- 非对称加密:身份验证/密钥交换
- 对称加密:真正传输数据
- 常见问题:证书过期、域名不匹配、证书链不全
HTTP版本
- 1.1:长连接,但存在队头阻塞
- 2:二进制分帧、多路复用、头部压缩
- 3:基于 QUIC/UDP,弱网体验更好
接口设计
- 幂等性非常关键,尤其是重试场景
- 网关/代理/客户端都可能导致重复请求
鉴权
- Cookie 存客户端
- Session 存服务端
- Token/JWT 更适合分布式部署
- JWT 方便扩展,但吊销困难
代理与入口
- 正向代理代理客户端
- 反向代理代理服务端
- Ingress 本质上是集群入口的七层反向代理
实时通信
- WebSocket:先 HTTP Upgrade,再全双工通信
- gRPC:基于 HTTP/2,适合内部高性能服务调用
排障口诀
- 先 DNS,再 TCP,再 TLS,再 HTTP,再应用
- 先入口,再 Service,再 Endpoints,再 Pod,再日志