题目与范围
迁移需要保留外部可观察的状态码、路径、响应头和后端选择,从 Ingress 与控制器注解迁移到 Gateway API 资源。核心能力是代理边界的兼容性工程,因此分类为 backend。Kubernetes 博客记录了多个容易遗漏的行为,包括主机范围的正则影响、隐式重定向和 URL 规范化。
面试官考察点
应先盘点真实流量行为,而非只做 YAML 翻译。优秀回答会区分 Gateway API 的可移植语义与实现相关正则,识别需要显式过滤器表达的隐式行为,并提出差分测试和回滚方案。同时讨论所有权、证书与监听器依赖、可观测性和分阶段 DNS 或流量切换。
先澄清的问题
- 部署中的 Ingress-NGINX 版本、注解、Gateway API 控制器和一致性级别是什么?
- 哪些域名使用
use-regex、rewrite-target、认证、金丝雀或自定义片段? - 客户端是否依赖 301、路径大小写、重复斜杠或编码片段?
- 新 Gateway 能否并行运行并接收镜像或采样流量?
- Gateway、HTTPRoute、后端策略和 TLS 资源分别由谁负责?
- 回滚触发条件是什么,多久能切回旧控制器?
30 秒答题框架
“先从清单、访问日志和黑盒探针建立行为清单。按行为生成 Gateway API 资源,显式建模正则、重写、重定向和 TLS,不能假设注解可直接转换。对旧、新控制器执行差分测试,灰度或镜像流量,比较状态码、Location、后端收到的路径和延迟,并保留 DNS 或流量回滚。只有没有未解释差异时才迁移单个域名。”
分步作答
步骤 1:盘点可观察契约
解析每个域名和路径,再用请求验证。Ingress-NGINX 的正则可能大小写不敏感并按前缀匹配,同一注解还可能影响一个主机下多个 Ingress。把重定向、规范化路径、响应头、认证、超时和后端选择记录为可测试契约。
步骤 2:区分可移植与控制器特性
把普通主机/路径路由映射到 Gateway 和 HTTPRoute。正则匹配属于实现相关能力,必须验证目标控制器语义。支持时用 HTTPRoute 过滤器显式表达重写和重定向;不支持的注解或片段要成为有负责人的迁移阻塞项。
步骤 3:建立差分测试矩阵
每个契约都测试正常和对抗路径:大小写变化、末尾斜杠、.、..、重复斜杠、编码字符、缺失路由和后端故障。比较状态码、Location、后端收到的路径、响应头、服务选择和错误正文。两套控制器使用相同夹具和请求头。
步骤 4:证明控制器和策略就绪
检查 Gateway、HTTPRoute 的状态条件、监听器附着、证书就绪、跨命名空间引用策略,以及每个过滤器的实现支持。资源被 API 接受,并不代表数据面实现了全部请求能力。
步骤 5:灰度与回滚
让新 Gateway 并行运行,从少量域名或流量切片开始。可行时只镜像幂等请求,否则重放脱敏夹具。出现未解释的路由差异、4xx/5xx 变化、重定向漂移或延迟回归就中止。观察窗口结束前保留旧控制器和 DNS 或流量权重。
参考答案
“我会把现有 Ingress-NGINX 行为视为外部契约。盘点清单、注解、日志和探针后,按契约显式建模 Gateway 与 HTTPRoute。正则、重写、末尾斜杠重定向和 URL 规范化需要验证控制器语义,隐式行为要转成显式过滤器。建立差分矩阵比较状态码、Location、后端路径、响应头和服务选择,再带回滚地灰度。状态条件和一致性声明只是必要条件,最终要以黑盒证据作为发布门槛。”
常见错误
- 逐项翻译 YAML → 注解可能带有隐藏的主机范围影响 → 盘点运行时行为并测试。
- 认为
Exact匹配完全相同 → 旧控制器可能有正则或规范化副作用 → 探测大小写、斜杠和编码变体。 - 只依赖资源 Accepted → 数据面支持仍可能不完整 → 检查条件并验证黑盒响应。
- 先切 DNS → 回滚变慢且不可见 → 旧路径可用时先做流量灰度。
- 忽略后端可见路径 → 重写会破坏应用 → 断言后端收到的路径和响应头。
- 只测正常请求 → 重定向和异常 URL 可能导致故障 → 加入负例和对抗夹具。
追问
追问 1:正则迁移为什么会改变流量?
Ingress-NGINX 可能对同一主机下路径应用大小写不敏感的前缀式正则。Gateway API 的正则是实现相关的,而 Exact、Prefix 不会静默变成正则。
追问 2:如何保留末尾斜杠重定向?
用 HTTP 重定向过滤器显式建模,并测试有无斜杠两种请求。不能假设 Gateway 自动添加旧的 301。
追问 3:什么是安全回滚信号?
固定基线和观察窗口内,出现未解释的状态码、Location、后端路径、服务选择、错误率或延迟差异即可回滚。
追问 4:迁移工具能证明什么?
转换器可以加速盘点并生成候选资源,但不能证明控制器特性、注解交互或应用兼容性。差分测试仍应是发布门槛。