关键概念

Gateway API

Kong Gateway Operator 和 Kong Ingress Controller 都支持用 Kubernetes 的 Gateway API 来配置。
你只需要按照 Kubernetes 的标准方式(也就是和厂商无关的方式)来写 GatewayClassGateway 这些资源。

在 DB-less 模式 下,Kong Gateway Operator 会监听那些 GatewayClass 资源,前提是它们的 spec.controllerName 设置成了 konghq.com/gateway-operator。一旦检测到这样的 GatewayClass,Operator 就会:

  • 部署一个 Kong Ingress Controller,让它作为 控制平面(ControlPlane
  • 同时部署一个 Kong Gateway 实例,作为 数据平面(DataPlane

你可以使用 Gateway API 的一些资源(比如 HTTPRouteGRPCRouteTCPRouteUDPRoute)来配置流量路由。这些资源会被 Kong Ingress Controller 自动转换成 Kong 的内部配置对象,然后由 Kong Gateway 把流量代理(转发)到你内部的服务。

Gateway 配置

Kong Gateway Operator 提供了一个叫 GatewayConfiguration 的自定义资源(CRD),用来自定义部署 ControlPlaneDataPlane 的方式。

这些自定义配置主要用来设置容器的镜像,还有为容器注入一些必要的环境变量。

下面是一个 GatewayConfiguration 的示例,它用来给 Kong Gateway 提供企业版的授权(license)。

kind: GatewayConfiguration
apiVersion: gateway-operator.konghq.com/v1beta1
metadata:
 name: kong
 namespace: <your-namespace>
spec:
 dataPlaneOptions:
   deployment:
     podTemplateSpec:
       spec:
         containers:
         - name: proxy
           image: kong/kong-gateway:3.10.0.1
         env:
         - name: KONG_LICENSE_DATA
           valueFrom:
             secretKeyRef:
               key: license
               name: kong-enterprise-license

想了解更多关于 GatewayConfiguration 的信息,可以查看它的 CRD(自定义资源)参考文档

托管网关

Kong Gateway Operator (KGO) 在处理 Gateway 资源时的方式和 Kong Ingress Controller (KIC) 不同。KGO 的方法叫做“托管网关”(managed gateways),而 KIC 的方法被称为“非托管网关”(unmanaged gateways)。

托管网关

当 Kong Gateway Operator 检测到一个新的 Gateway 时,它会创建一个 控制平面(ControlPlane)(即 Kong Ingress Controller)和一个 数据平面(DataPlane)(即 Kong Gateway)。这个控制平面会管理(reconcile)一个 Gateway

由于 Kong Gateway Operator 管理着 Kong Gateway 部署的生命周期,它可以根据 Gateway 监听器中的信息动态地配置数据平面(DataPlane)。

例如,当你创建一个只有一个 HTTP 监听器(端口 80)的 Gateway 时,数据平面的入口服务(ingress service)将被配置为仅暴露端口 80。如果你再添加一个在端口 443 上的 Gateway HTTPS 监听器,Kong Gateway Operator 会自动检测到这个变化,并应用到数据平面。最终的结果是,入口服务会同时暴露端口 80(用于 HTTP 流量)和端口 443(用于 HTTPS 流量)。

端口 80 和 443 只是举例,你可以根据需要配置任何组合的 Gateway 监听器,Kong Gateway Operator 会根据这些配置自动调整你的数据平面(DataPlane)。

非托管网关

如果只使用 Kong Ingress Controller 而不使用 Kong Gateway Operator,那么所有的 Gateway 资源 会被合并成一个单一的配置。在这种情况下,Kong Gateway 的部署是在 Kong Ingress Controller 外部 创建的,这意味着我们无法根据 Gateway 监听器的变化动态地控制配置。

当使用 非托管模式(unmanaged mode) 时,所有 Gateway 实例 中的路由会被合并在一起,并发送到所有由单个 Kong Ingress Controller 管理的 Kong Gateway 实例。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容