4. 实验环境准备:Kubernetes集群版本、Gateway API CRD版本、Ingress Controller选择

本章节是演练的基础保障环节。在开始多版本路由切换之前,必须精确锁定实验环境的三个核心维度:Kubernetes 集群版本、Gateway API CRD 版本以及Ingress Controller 的实现与版本。任何版本不匹配都可能导致 CRD 安装失败、路由规则不生效或控制器行为异常。

4.1 Kubernetes 集群版本选择

Gateway API 的演进与 Kubernetes 版本紧密相关。不同版本的 Gateway API CRD 对集群的 API 能力要求不同。本演练推荐使用 Kubernetes v1.28 或 v1.29 版本,这两个版本对 Gateway API 的 v1 和 v1beta1 资源提供了最稳定的支持。

Kubernetes 版本 Gateway API 兼容性 推荐理由
v1.27 支持 v1beta1,v1 部分支持 可用于测试,但 v1 资源可能缺少某些特性
v1.28 完全支持 v1 和 v1beta1 推荐:稳定、特性完整、社区广泛验证
v1.29 完全支持 v1 和 v1beta1 推荐:最新稳定版,支持 Gateway API 最新特性
v1.30+ 完全支持 v1,v1beta1 可能被标记为废弃 适合前瞻性测试,但需注意 API 废弃策略
版本选择建议:本演练所有操作基于 Kubernetes v1.28.5 验证。如果你使用其他版本,请确保集群的 admissionregistration.k8s.io/v1 和 apiextensions.k8s.io/v1 API 已启用。

4.2 Gateway API CRD 版本选择

Gateway API 项目本身独立于 Kubernetes 发布周期,以独立 CRD 包的形式提供。本演练需要安装 v1.1.0 版本的 CRD,该版本同时包含 v1 和 v1beta1 两个 API 版本,是实现多版本路由切换的基础。

安装命令如下:

# 安装 Gateway API v1.1.0 标准 CRD 包
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/standard-install.yaml

安装完成后,验证 CRD 是否就绪:

# 检查关键 CRD 是否已安装
kubectl get crd | grep gateway.networking.k8s.io

# 预期输出应包含以下 CRD:
# gatewayclasses.gateway.networking.k8s.io
# gateways.gateway.networking.k8s.io
# httproutes.gateway.networking.k8s.io
# referencegrants.gateway.networking.k8s.io
重要提示:不要使用 experimental-install.yaml 安装包,除非你明确需要 BackendTLSPolicy 等实验特性。标准安装包已经包含本演练所需的全部资源。

4.3 Ingress Controller 选择

Gateway API 需要后端控制器来实际处理流量。本演练选择 Istio 1.21+ 作为 Ingress Controller(Gateway API 实现),原因如下:

  • 原生支持 Gateway API: Istio 从 1.16 开始内置支持 Gateway API,无需额外安装适配器。
  • 多版本路由能力: Istio 的 VirtualService 与 Gateway API 的 HTTPRoute 可以共存,便于演示切换过程。
  • 社区成熟度高: 文档完善,故障排查工具链丰富。

下表对比了主流控制器的 Gateway API 支持情况:

Ingress Controller Gateway API 支持版本 多版本路由切换能力 本演练适用性
Istio 1.21+ v1.1.0 (v1 + v1beta1) 优秀:原生支持,切换平滑 首选
Contour 1.28+ v1.1.0 (v1 + v1beta1) 良好:需注意 CRD 版本对齐 可选
nginx-ingress 3.0+ v1.0.0 (仅 v1beta1) 有限:不支持 v1 资源 不推荐
Traefik 3.0+ v1.1.0 (v1 + v1beta1) 良好:但文档较少 可选

4.4 实验环境架构总览

下图展示了本演练的完整实验环境拓扑,包括集群、CRD 层、控制器以及待测试的应用服务之间的关系。

实验环境架构总览 Kubernetes 集群 v1.28.5 Gateway API CRD 层 (v1.1.0) GatewayClass / Gateway / HTTPRoute / ReferenceGrant API 版本: v1 (稳定) + v1beta1 (旧版) Ingress Controller: Istio 1.21.2 Gateway API 实现:istio-ingressgateway 支持 v1 和 v1beta1 路由规则同时生效 后端应用服务 app-v1 (稳定版) app-v2 (新版) app-canary (金丝雀) 说明:多版本路由切换通过修改 HTTPRoute 的 backendRefs 权重实现,无需重启控制器

4.5 环境验证清单

在开始演练之前,请逐项确认以下环境条件已满足:

  1. 集群版本确认: kubectl version --short 显示 Server Version 为 v1.28.x 或 v1.29.x。
  2. CRD 安装确认: kubectl get crd | grep gateway.networking.k8s.io 返回至少 4 个 CRD。
  3. CRD 版本确认: kubectl get crd httproutes.gateway.networking.k8s.io -o yaml | grep -A5 'versions:' 应包含 v1 和 v1beta1。
  4. Istio 安装确认: kubectl get pods -n istio-system | grep istio-ingressgateway 显示 Running 状态。
  5. Gateway API 支持确认: kubectl get gatewayclass 应返回至少一个 istio 类型的 GatewayClass。
环境就绪检查命令(一键执行):
echo "=== 集群版本 ===" && kubectl version --short && echo "=== CRD 列表 ===" && kubectl get crd | grep gateway && echo "=== GatewayClass ===" && kubectl get gatewayclass