跳到主要内容

Ingress Controller 文档

Ingress Controller 将 Ingress、Gateway API 和 APISIX 自定义资源等 Kubernetes 资源转换为同步到网关的配置。平台团队由此可以通过声明式 Kubernetes 清单管理路由、上游、TLS、插件及其他网关行为。当网关运行在 Kubernetes 中,且路由和网关策略需要与其服务的工作负载采用相同的声明式工作流时,Ingress Controller 尤其适用。

本文档由 API7 Ingress Controller 和 APISIX Ingress Controller 共用,并统一将二者称为 AIC。部分共享的 Kubernetes 资源标识符仍保留 APISIX 命名,并同时受两个控制器支持。除非页面明确指出产品差异,否则其中的资源工作流均适用于两个控制器。

支持的资源

AIC 支持以下 Kubernetes 资源:

  • Gateway API 1.6 是现代、可扩展的 Kubernetes 原生流量管理 API。两个控制器支持多监听器、HTTP、gRPC、TCP、UDP 和 TLS 路由、下游 mTLS 以及更丰富的流量策略。字段级支持请参阅 Ingress 和 Gateway API 支持
  • Ingress 是用于将基础 HTTP/S 流量路由到后端服务的旧版 Kubernetes 原生 API。它不支持 Gateway API 或 APISIX CRD 中的全部高级配置。
  • APISIX CRD 可对路由、插件、上游和其他网关能力进行细粒度控制。L4RoutePolicy 可将 stream 插件挂载到 Gateway API TCP、UDP 和 TLS 路由。

已安装 Controller 所支持的资源可以在同一个 Kubernetes 集群中共存。应用清单前,请确认已安装的产品版本支持相应资源或字段。部分功能只适用于特定资源类型,因此组合使用多种资源时应避免配置冲突。

下图展示 Ingress Controller 如何组合标准 Gateway API 资源和自定义资源,在 Kubernetes 环境中定义路由、流量策略和网关行为:

API7/APISIX Ingress Controller 的 Kubernetes 资源模型:Gateway 引用 GatewayClass 和 GatewayProxy;HTTPRoute 与 TCPRoute 挂载到 Gateway 并指向后端 Service;HTTPRoutePolicy 挂载到 HTTPRoute,BackendTrafficPolicy 挂载到 Service

AIC 如何处理 Kubernetes 资源

AIC 将 Ingress、Gateway API 和 APISIX CRD 资源转换为内部 ADC YAML,然后将配置同步到网关。

APISIX Ingress Controller 与 API7 Ingress Controller

两个控制器使用一致的 Kubernetes 资源 API,并共享本文档所述的许多功能。借助这一共享资源模型,团队可以在 API7 企业版与 APISIX 部署之间复用 Gateway API、Ingress 和 APISIX 自定义资源模式。

可用的资源和字段取决于已安装的 Controller 版本。特定于产品的行为和默认值,以及命名空间、上游 Service 和 GatewayProxy 连接配置等特定于部署的值可能不同。两种部署架构在控制器与各自网关的连接方式上也有所区别。

部署架构

以下架构图使用单控制器拓扑展示 API7 Ingress Controller 与 APISIX Ingress Controller 的不同部署模式。

API7 Ingress Controller

API7 Ingress Controller 支持一种部署模式:控制器直接与 API7 控制面(API7 控制台)通信。

API7 Ingress Controller 部署拓扑:API7 Ingress Controller 与 API7 网关数据面实例运行在 Kubernetes 集群中,并将 Kubernetes 资源转换为通过集群外 API7 控制面下发的配置

APISIX Ingress Controller

APISIX Ingress Controller 支持两种部署模式:独立模式和传统模式。

独立模式

相比使用 etcd 的传统模式,更推荐独立模式。该模式用于解决在 Kubernetes 内运行 APISIX 和 etcd 时可能出现的稳定性问题。

独立模式部署:APISIX Ingress Controller 和 APISIX 数据面均运行在 Kubernetes 集群中;APISIX 以 API 驱动的独立模式运行,控制器通过 APISIX Admin Service 向其推送配置,不依赖 etcd 集群

传统模式

在传统部署模式中,APISIX 使用 etcd 作为配置中心。

传统模式部署:APISIX Ingress Controller 将配置写入 etcd 集群,APISIX 数据面实例监听 etcd 中的变更;所有组件都运行在 Kubernetes 集群中