4. 环境准备:Kubernetes集群版本要求、Gateway API CRD安装、Gateway Controller部署
在开始使用 Gateway API 进行资源配额管理之前,必须确保底层环境满足 Gateway API 的运行时要求。本章将依次覆盖三个核心环节:集群版本校验、CRD 安装以及 Controller 部署。任何环节的缺失或版本错配都会导致后续配额模型无法生效。
4.1 Kubernetes 集群版本要求
Gateway API 依赖 Kubernetes 内置的 CRD 机制和网络功能,不同 API 版本对集群版本有明确的最低要求。下表列出了主流 Gateway API 版本与 Kubernetes 版本的兼容关系:
| Gateway API 版本 | 最低 Kubernetes 版本 | 推荐 Kubernetes 版本 | 关键依赖特性 |
|---|---|---|---|
| v1alpha2 (实验性) | 1.20 | 1.22+ | CRD v1、EndpointSlice |
| v1beta1 (Beta) | 1.23 | 1.25+ | Service IP 保留、IngressClassParams |
| v1 (GA) | 1.25 | 1.27+ | GRPCRoute、BackendTLSPolicy |
版本检查命令:使用
kubectl version --short 确认集群版本。如果版本低于 1.23,建议先升级集群,否则 v1beta1 及以上版本的 CRD 可能无法正常注册。
4.2 Gateway API CRD 安装
CRD(Custom Resource Definition)是 Gateway API 的基石。安装 CRD 后,Kubernetes 才能识别 GatewayClass、Gateway、HTTPRoute 等资源类型。推荐使用官方 YAML 清单或 Helm Chart 进行安装。
4.2.1 安装方式对比
| 安装方式 | 命令/示例 | 适用场景 |
|---|---|---|
| 官方标准 YAML | kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/standard-install.yaml |
快速验证、CI/CD 环境 |
| 实验性 YAML | kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/experimental-install.yaml |
需要 GRPCRoute、BackendTLSPolicy 等实验特性 |
| Helm Chart | helm install gateway-api gateway-api/gateway-api --version 1.1.0 |
生产环境、版本管理 |
4.2.2 验证 CRD 安装
安装完成后,执行以下命令确认 CRD 已注册:
kubectl get crd | grep gateway.networking.k8s.io
预期输出应包含以下核心 CRD:
gatewayclasses.gateway.networking.k8s.iogateways.gateway.networking.k8s.iohttproutes.gateway.networking.k8s.ioreferencegrants.gateway.networking.k8s.io
版本锁定建议:在生产环境中,始终将 CRD 版本与 Controller 版本对齐。例如,使用 v1.1.0 的 CRD 时,Controller 也应选择支持 v1.1.0 的版本,避免 API 字段不兼容。
4.3 Gateway Controller 部署
CRD 安装完成后,需要部署一个 Gateway Controller 来实际处理 Gateway 和 Route 资源。Controller 负责监听资源变化、配置底层数据面(如 Envoy、HAProxy、Nginx)。
4.3.1 常见 Controller 选择
| Controller 名称 | 数据面 | 部署复杂度 | 推荐场景 |
|---|---|---|---|
| Istio | Envoy | 中 | 服务网格 + 网关统一管理 |
| Contour | Envoy | 低 | 轻量级入口网关 |
| nginx-gateway | Nginx | 低 | Nginx 生态用户 |
| Kong | Kong Gateway | 中 | API 网关 + 插件扩展 |
4.3.2 部署步骤(以 Contour 为例)
以下步骤演示如何快速部署 Contour 作为 Gateway Controller:
- 安装 Contour
kubectl apply -f https://projectcontour.io/quickstart/contour-gateway.yaml
- 验证 Controller Pod 运行
kubectl get pods -n projectcontour -l app=contour
- 确认 GatewayClass 已注册
kubectl get gatewayclass
预期输出应包含一个名为 contour 的 GatewayClass,状态为 Accepted=True。
4.4 环境准备完整流程
下图展示了从集群检查到 Controller 就绪的完整流程,以及各步骤之间的依赖关系:
4.5 常见故障排查
环境准备阶段最容易出现以下三类问题,提前了解可大幅缩短调试时间:
故障 1:CRD 安装后资源无法创建
现象:
原因:CRD 安装未完成或版本不匹配。
解决:重新执行 CRD 安装命令,并检查 CRD 的
现象:
kubectl apply -f httproute.yaml 报错 no matches for kind "HTTPRoute"。原因:CRD 安装未完成或版本不匹配。
解决:重新执行 CRD 安装命令,并检查 CRD 的
spec.versions 是否包含你使用的 API 版本。
故障 2:GatewayClass 状态为 False
现象:
原因:Controller 未运行或无法连接到 API Server。
解决:检查 Controller Pod 日志
现象:
kubectl get gatewayclass 显示 Accepted=False。原因:Controller 未运行或无法连接到 API Server。
解决:检查 Controller Pod 日志
kubectl logs -n <namespace> <pod-name>,确认网络连通性和 RBAC 权限。
故障 3:Gateway 创建后处于 Pending 状态
现象:
原因:Controller 未监听该 GatewayClass 或 Gateway 的
解决:确认 GatewayClass 名称完全匹配,并检查 Controller 的启动参数中是否指定了
现象:
kubectl get gateway 显示 STATUS=Pending。原因:Controller 未监听该 GatewayClass 或 Gateway 的
gatewayClassName 字段拼写错误。解决:确认 GatewayClass 名称完全匹配,并检查 Controller 的启动参数中是否指定了
--gateway-class。
4.6 环境就绪检查清单
完成所有步骤后,使用以下清单进行最终确认:
- 集群版本:≥ 1.23(推荐 1.27+)
- CRD 注册:
kubectl get crd | grep gateway.networking.k8s.io返回至少 4 个 CRD - GatewayClass 就绪:
kubectl get gatewayclass显示Accepted=True - Controller Pod 运行:
kubectl get pods -n <controller-namespace>显示Running - 示例资源测试:创建一个简单的 HTTPRoute 并绑定到 Gateway,确认状态变为
Programmed=True