k8s Gateway API 详解
Kubernetes Gateway API 是一个面向服务的、可扩展的 Kubernetes 流量管理标准,由 SIG-NETWORK 社区维护。它是 Ingress API 的演进版本,旨在解决 Ingress 在表达能力、扩展性和标准化方面的局限性。
Gateway API 的优势:
角色导向
:明确区分集群操作员、基础设施提供商和应用开发者的职责
表达式丰富
:支持更复杂的路由规则、流量管理和安全策略
协议无关
:原生支持 HTTP、HTTPS、TCP、UDP、gRPC、TLS 等多种协议
标准化
:通过 CRD(Custom Resource Definition)实现跨厂商的一致性
可扩展
:通过参数化配置支持厂商特定的扩展
整体架构

Gateway API 将原本 Ingress 一个资源承担的职责,拆分成了三层:

安装gateway api核心流程
安装 Gateway API CRD → 安装控制器 → 创建 Gateway 资源 → 创建 HTTPRoute 资源。
控制器可以是nginx gateway fabric 、 istio 、 Envoy、Kong 等


安装 nginx gateway fabric

istio作为控制器,
Istio 通过 Gateway API 还能管理集群内的服务间流量(东西向流量),而不仅仅是入口流量,这是它作为服务网格相比独立网关方案的一大优势
Istio 特有的一步:控制器安装
与之前直接使用 helm install 安装 NGF 控制器不同,Istio 的安装方式更丰富。除了使用官方提供的 istioctl 命令行工具,也可以通过 Helm 来安装。核心是需要安装两个组件:
控制平面 (istiod):负责配置管理和下发。
入口网关 (ingress gateway):实际处理流量的代理(Envoy)
安装流程如下
# 1. 安装 Gateway API CRD (与 NGF 完全相同) kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.1/standard-install.yaml # 2. 添加 Istio Helm 仓库 helm repo add istio https://istio-release.storage.googleapis.com/charts helm repo update # 3. 创建命名空间 kubectl create namespace istio-system # 4. 安装 Istio 基础 CRD helm install istio-base istio/base -n istio-system --wait # 5. 安装 Istio 控制平面 (istiod) helm install istiod istio/istiod -n istio-system --wait # 6. 安装入口网关 (这一步相当于部署了 Gateway API 的控制器) kubectl create namespace istio-ingress helm install istio-ingress istio/gateway -n istio-ingress --create-namespace --wait
Envoy Gateway 是 Kubernetes Gateway API 官方推荐的重要实现之一,它以轻量、高性能的 Envoy Proxy 为数据平面,专门用于处理南北向流量。其部署流程与你熟悉的 Nginx 和 Istio 方案在核心思路上是相通的,只是在具体工具和资源名称上有所差异。
在之前的 Nginx 安装中,Helm 命令是直接安装控制器并自行管理 CRD。但对于 Envoy Gateway,有一个需要特别注意的版本问题:
CRD 版本冲突:从 Envoy Gateway v1.7.2 版本开始,其 Helm Chart 内部打包的 Gateway API CRD 版本可能低于集群中已安装的版本。此时,如果直接安装 Chart,可能会因试图“降级”CRD 而被 Kubernetes 的验证准入策略(ValidatingAdmissionPolicy)拒绝。
解决方案:在 Helm 安装时添加 --skip-crds 参数,明确告诉 Helm 跳过安装它自带的 CRD,直接使用我们第一步已经安装好的、版本正确的 CRD。
# 1. (通用步骤) 安装 Gateway API CRD
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.1/standard-install.yaml # 2. 安装 Envoy Gateway 控制器 (注意 --skip-crds) helm install eg oci://docker.io/envoyproxy/gateway-helm \ --version v1.7.2 \ -n envoy-gateway-system --create-namespace \ --skip-crds \ --wait
参考:
https://mp.weixin.qq.com/s/k3Vhl3L1Mx6MEPNAEe9m1A
浙公网安备 33010602011771号