跳到主要内容

Ingress 和 Gateway API 支持

Ingress Controller 会协调 Kubernetes Gateway API 和 Ingress 资源。下表列出生产清单中可用的 API 和字段。

请参阅配置示例,了解何时以及如何使用各类资源。

Gateway API

Gateway API 将基础设施、Gateway 和 Route 配置分离,使其可以分别由不同团队管理。请参阅使用 Kubernetes RBAC 委派 Gateway API 访问权限配置用户权限,并参阅配置跨命名空间引用授权 Route 挂载和跨命名空间资源引用。

Gateway API 版本

APISIX Ingress Controller Chart 1.3.0 会安装支持矩阵使用的 Gateway API 1.6.0 standard-channel CRD,包括 v1 L4 Route API。由 Chart 管理的安装无需单独执行 CRD 安装命令。

如果集群平台负责管理 Gateway API CRD,请让相应所有者在 Controller release 前安装 1.6.0 standard bundle,并配置 Controller Chart 跳过其捆绑的 CRD。

手动管理 bundle 时,请使用服务端 apply,因为这些 CRD 会超过客户端注解大小限制:

kubectl apply --server-side --force-conflicts \
-f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.0/standard-install.yaml

如果 CRD 已由 Chart、GitOps release 或其他平台组件管理,请勿运行此手动命令。

资源支持级别

下表概述当前实现对 Gateway API 资源的支持级别。它描述已实现的行为,并非上游一致性声明。

资源核心扩展特定实现API 版本
GatewayClass支持不适用不支持v1
Gateway部分支持部分支持不支持v1
HTTPRoute支持部分支持不支持v1
GRPCRoute支持支持不支持v1
ReferenceGrant支持不支持不支持v1
TLSRoute支持支持不支持v1
TCPRoute支持支持不支持v1
UDPRoute支持支持不支持v1
BackendTLSPolicy不支持不支持不支持v1

有关完整配置选项,请参阅 Gateway API 1.6.0 API definitions。部分字段不受支持或仅部分支持,具体如下。

不支持/部分支持的字段

以下字段在 Gateway API 规范中有定义,但在 Ingress Controller 中要么部分实现,要么尚未支持。

HTTPRoute

字段状态说明
spec.timeouts不支持此字段不受支持,因为 ADC 提供了更精细的超时配置(连接、读取、写入),而 spec.timeouts 只允许设置通用的总超时和上游超时,因此无法直接映射。要配置路由超时,可以使用 BackendTrafficPolicy
spec.retries不支持此字段不受支持,因为 APISIX 不支持 retries 中的功能。要配置路由重试,可以使用 BackendTrafficPolicy
spec.sessionPersistence不支持APISIX 不支持 Cookie 生命周期的配置。作为替代,你可以使用 chash 负载均衡器
spec.rules[].backendRefs[].filters[]不支持后端引用级别的过滤器未实现,因为数据平面不支持此级别的过滤;仅支持规则级别的过滤器(spec.rules[].filters[])。

Gateway

字段状态说明
spec.listeners[].port部分支持两个控制器都会在路由通过端口指向监听器时,将此字段与路由的 parentRefs[].port 比较。它们还可以根据 listener_port_match_modeautoexplicitoff)使用此字段进行 server_port 路由匹配。两个控制器都不会动态打开数据面端口,因此 APISIX 或 API7 网关必须已监听指定端口。
spec.listeners[].tls.certificateRefs[].group部分支持仅支持 "";其他 group 值会导致验证失败。
spec.listeners[].tls.certificateRefs[].kind部分支持仅支持 Secret
spec.listeners[].tls.mode部分支持实现了 TerminatePassthrough 对于 Gateway 监听器实际上不受支持。
spec.tls.frontend.default.validation.caCertificateRefs部分支持核心行为支持 ConfigMap,实现特定扩展还支持 Secret。CA 引用使用 ca.crt 键。不支持 AllowInsecureFallback
spec.tls.frontend.perPort支持每端口配置会覆盖该端口监听器的默认客户端证书校验。
spec.addresses不支持控制器不读取或作用于 spec.addresses

有关可运行的客户端证书校验示例,请参阅配置客户端与网关之间的 mTLS

HTTP 路由过滤器

Ingress Controller 将 HTTPRoute 资源中的标准 Gateway API 过滤器映射到相应的插件:

Gateway API 过滤器APISIX 插件
RequestHeaderModifierproxy-rewrite
RequestRedirectredirect
RequestMirrorproxy-mirror
URLRewriteproxy-rewrite
ResponseHeaderModifierresponse-rewrite
CORScors
ExtensionRef通过 PluginConfig 定义的用户插件

当同时使用标准过滤器和 ExtensionRef(引用 PluginConfig CRD)时:

  • 如果先应用标准过滤器,PluginConfig 会覆盖任何重叠的插件设置。
  • 如果先应用 PluginConfig,标准过滤器会合并到其配置中,任何重叠的字段将被过滤器覆盖。

Ingress

  • networking.k8s.io/v1

支持的资源

控制器支持标准的 Kubernetes Ingress API,包括:

支持基本的基于主机和路径的路由。有关支持的 Ingress 注解和使用示例,请参阅注解参考