跳到主要内容

Ingress 和 Gateway API 支持

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

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

Gateway API

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

Gateway API 版本

Helm Chart 参考中列出的兼容 Controller Chart 会安装 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_mode 注入 server_port 条件时,该条件必须等于网关实际的监听端口。控制器不会打开数据面端口。
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

当所有匹配的监听器都定义了 spec.listeners[].hostname 时,APISIX Ingress Controller 不会添加 server_port 条件。因此,将路由关联到此类监听器不会把生成的路由限制到该监听器端口。API7 Ingress Controller 可以在端口匹配中包含配置了主机名的监听器。如需 APISIX 执行端口匹配,请省略监听器主机名,并改为在 HTTPRoute 或 GRPCRoute 上配置主机名。模式触发条件请参阅配置参考,实际端口不匹配的恢复方法请参阅常见问题

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

HTTP 路由过滤器

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

Gateway API 过滤器APISIX 插件
RequestHeaderModifierproxy-rewrite
RequestRedirectredirect
RequestMirrorproxy-mirror
URLRewriteproxy-rewrite
ResponseHeaderModifierresponse-rewrite
CORScors
ExtensionRef同一命名空间中 PluginConfig 的插件

当 HTTPRoute 规则使用标准过滤器和 ExtensionRef 时,两者应配置不同的插件。不要在同一条规则中通过两种机制配置同一个底层插件;重叠的条目无法可靠合并,并可能导致路由无法转换。

Ingress

  • networking.k8s.io/v1

支持的资源

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

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

使用 APISIX 或 API7 网关时,*.example.com 这样的 Ingress 规则主机名按后缀匹配。它既匹配 foo.example.com,也匹配 bar.foo.example.com,但不匹配裸域名 example.com。这比 Kubernetes Ingress 文档所述的单标签通配符行为更宽泛。

如果路由只能接受特定子域名,请显式列出每个主机名。根据 Gateway API 规范,HTTPRoute 通配符同样可以匹配多个前导标签。