k8s Gateway API 详解

Kubernetes Gateway API 是一个面向服务的、可扩展的 Kubernetes 流量管理标准,由 SIG-NETWORK 社区维护。它是 Ingress API 的演进版本,旨在解决 Ingress 在表达能力、扩展性和标准化方面的局限性。

 

Gateway API 的优势:

角色导向
:明确区分集群操作员、基础设施提供商和应用开发者的职责
表达式丰富 :支持更复杂的路由规则、流量管理和安全策略
协议无关 :原生支持 HTTP、HTTPS、TCP、UDP、gRPC、TLS 等多种协议
标准化 :通过 CRD(Custom Resource Definition)实现跨厂商的一致性
可扩展 :通过参数化配置支持厂商特定的扩展

 

 

 

整体架构

image

 

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

 

image

 

 

安装gateway api核心流程

安装 Gateway API CRD → 安装控制器 → 创建 Gateway 资源 → 创建 HTTPRoute 资源。

 

控制器可以是nginx gateway fabric 、 istio 、 Envoy、Kong 等

 

image

 

 

image

 

 

安装 nginx gateway  fabric 

image

 

 

 

 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

posted @ 2026-08-19 15:58  fengjian1585  阅读(10)  评论(0)    收藏  举报