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 层、控制器以及待测试的应用服务之间的关系。
4.5 环境验证清单
在开始演练之前,请逐项确认以下环境条件已满足:
- 集群版本确认:
kubectl version --short显示 Server Version 为 v1.28.x 或 v1.29.x。 - CRD 安装确认:
kubectl get crd | grep gateway.networking.k8s.io返回至少 4 个 CRD。 - CRD 版本确认:
kubectl get crd httproutes.gateway.networking.k8s.io -o yaml | grep -A5 'versions:'应包含v1和v1beta1。 - Istio 安装确认:
kubectl get pods -n istio-system | grep istio-ingressgateway显示 Running 状态。 - Gateway API 支持确认:
kubectl get gatewayclass应返回至少一个istio类型的 GatewayClass。
环境就绪检查命令(一键执行):
echo "=== 集群版本 ===" && kubectl version --short && echo "=== CRD 列表 ===" && kubectl get crd | grep gateway && echo "=== GatewayClass ===" && kubectl get gatewayclass