题干与适用场景
集群中的 Gateway 负责接收外部 HTTPS,请求转发到只接受 TLS 的内部 Service。请说明如何使用 Gateway API 的 BackendTLSPolicy 配置上游 TLS、验证证书和主机名,并处理策略无效、跨命名空间引用与回滚。
面试官考察点
- 是否区分客户端 TLS 终止与 Gateway 到后端的 TLS origination。
- 是否理解策略通过 targetRef 附着到 Service,并由实现负责状态反馈。
- 是否能说清 CA、服务端名称、客户端证书和不安全跳过校验的风险。
- 是否考虑跨命名空间授权、兼容性、观测、回滚和渐进迁移。
回答前需要澄清的问题
- TLS 是在 Gateway 终止后重新加密,还是端到端透传?后端证书的 SAN 使用哪个服务名称?
- CA、客户端证书和私钥由哪个命名空间管理,是否需要 ReferenceGrant 或其他授权?
- Gateway 实现是否支持当前 BackendTLSPolicy 版本和目标 Route 类型?
- 证书轮换、策略无效或后端暂时不支持 TLS 时,流量如何观察、回滚和隔离?
30 秒回答框架
我会把需求拆成两段 TLS:客户端到 Gateway 的终止,以及 Gateway 到 Service 的上游 TLS。BackendTLSPolicy 附着到 Service,声明校验材料和可选客户端身份;实现必须报告策略是否有效。上线前验证 CA、服务端名称、端口、跨命名空间授权和实现兼容性,禁止用跳过证书校验来绕过问题。先在一组后端灰度,监控策略状态、握手错误和证书过期,再准备可逆回滚。
分步骤深入解答
1. 明确 TLS 连接边界
Gateway API 官方 TLS 指南把上游 TLS 配置放在附着到 Service 的 BackendTLSPolicy 中。客户端 TLS 终止后,Gateway 作为 TLS 客户端连接后端;后端证书必须由配置的信任材料验证,服务端名称也要与证书身份匹配。不能把外部监听器的证书直接当成后端验证配置。
2. 设计策略附着与验证材料
策略通过 targetRef 指向 Service,验证配置可使用 CA 证书引用或规范定义的知名 CA 选项。若后端要求双向 TLS,还要配置客户端证书和私钥,并限制 Secret 的读取范围。下面是面试中用于讨论字段关系的简化示例,实际字段以实现支持的 API 版本为准:
apiVersion: gateway.networking.k8s.io/v1alpha3
kind: BackendTLSPolicy
metadata:
name: payments-upstream-tls
spec:
targetRefs:
- group: ""
kind: Service
name: payments
validation:
hostname: payments.internal.example
wellKnownCACertificates: System部署前检查策略状态、引用对象存在性和控制器是否报告无效原因;不能只看资源创建成功。
3. 处理命名空间与证书轮换
策略与目标 Service 的命名空间边界要清晰。跨命名空间引用需要实现支持的授权机制,不能因为 Gateway 能访问 Service 就默认允许读取证书 Secret。证书轮换应使用新旧 CA 重叠窗口或双证书策略,观察握手成功率后再撤销旧材料,并验证控制器是否会重新建立连接。
4. 观测、灰度与回滚
灰度时先绑定一组 Service 或独立端口,记录策略状态、TLS 握手失败、后端名称不匹配、证书过期和连接重试。策略变为无效时,预期行为应是拒绝不安全连接并产生可定位事件,而不是静默降级为明文。回滚要恢复上一份有效策略或路由目标,并保留证书与审计记录。
高质量示范回答
我会先确定两段连接:外部 TLS 在 Gateway 终止,Gateway 再以 TLS 客户端连接 Service。BackendTLSPolicy 通过 targetRef 附着到 Service,声明 CA、服务端名称以及可选的客户端证书;控制器状态是配置是否生效的主要反馈。实施时限制 Secret 和跨命名空间授权,核对实现支持的 API 版本与 Route 类型。用灰度 Service 验证证书 SAN、CA、轮换、握手错误和连接重建,禁止把跳过校验当作修复。策略无效或证书异常时拒绝不安全连接、告警并按预案回滚。
常见错误
- 只配置客户端到 Gateway 的证书,忘记上游 TLS origination。
- 把
targetRef指向错误资源,或假设任何控制器都支持相同 API 版本。 - 只导入 CA,不验证后端证书的服务端名称。
- 用跳过证书校验或明文回退掩盖 CA、SAN 或轮换问题。
- 允许跨命名空间读取 Secret,却没有明确授权和审计边界。
- 资源创建成功就认为策略生效,忽略 status、握手指标和控制器事件。
追问及应对
BackendTLSPolicy 与客户端 TLS 终止有什么关系?
客户端 TLS 终止保护浏览器或调用方到 Gateway 的链路;BackendTLSPolicy 保护 Gateway 到 Service 的链路。两段可以使用不同证书和信任域,必须分别验证身份与轮换。
后端证书名称不匹配怎么办?
让后端证书为 Gateway 连接时使用的服务端名称签发,或调整策略中的 hostname 与证书 SAN 一致。不要关闭名称验证;先检查 DNS、SNI、Service 名称和证书链。
策略变成无效状态时如何发布?
把无效状态接入告警和发布门禁,停止扩大灰度,检查引用、CA、Secret 权限和实现兼容性。只有状态恢复为有效并完成握手验证后才继续;紧急回滚应回到上一份已验证策略。