乐趣区

关于kubernetes:Rainbond的-Gateway-API-插件制作实践

Gateway API 作为新一代的流量治理规范,对原有 Ingress 的扩大不标准、移植性差等问题做出了改良。从兼容 K8s 生态和优化网关体验登程,Rainbond 反对以插件的模式扩大平台网关能力,目前曾经有多家社区提供了 Gateway API 的实现,将其制作成平台插件后,一键部署后即可在平台中应用拓展网关能力。咱们能够制作不同的网关实现插件来应答不同的场景和需要,同时能够将本人制作的插件公布到利用商店供大家应用。

本篇文章将以 Envoy Gateway 为例具体介绍如何制作并公布你的 Kubernetes Gateway API 插件。最初公布到开源利用商店的 Gateway API 插件将能够被其余用户应用,同时积极参与奉献也有机会取得由咱们提供的小礼品。

前提条件

  • Rainbond 版本大于 v5.13
  • Rainbond 曾经对接过开源利用商店并领有推送权限

Rainbond 与 Gateway API 集成机制

在 Rainbond 中,之前仅反对内置网关,利用定义好路由规定后,内部流量即可间接拜访到对应利用。而 Gateway API 是以插件和能力扩大的模式与平台进行联合的。在平台中,只有装置了 Gateway API 自定义资源以及至多有一个网关实现后,才能够扩大平台网关能力。

如下图所示,如果 App 4App 5等利用想要应用反对 Gateway API 的网关实现,那么首先须要定义 Gateway API 的相干资源,而这类资源是由 Gateway API 根底资源插件 提供的,它次要蕴含了 Gateway API 资源类型的定义以及相干的 WebHook 资源。同时它在平台上裸露了 GatewayClass 和 Gateway 类型的资源,在平台能力扩大中能够看到。这样用户能够自定义网关行为和配置。

因而咱们只须要制作一个网关插件,即可读取 Gateway 类型的资源并生成对应的配置,向外提供网关能力。目前 Gateway API 已有多种实现,如 Envoy、Nginx、Istio 等。这里咱们抉择 Envoy 作为网关,这样内部流量进入 Envoy 后,即可依据对应的路由策略达到 App 4 等利用上。

制作自定义网关插件的步骤

实现 Gateway API 插件的残缺流程如上图所示,次要分为以下五步:

  1. 部署 Gateway API 根底资源:目前 Gateway API 次要由一系列自定义资源 (CRD) 组成,在集群中应用其能力时,须要先部署这些根底资源,能力使集群辨认该类型的资源。
  2. 抉择 Gateway API 网关实现:目前 Gateway API 已有多家 上游实现,这些网关实现都能够自由选择,提供对外服务的能力。
  3. 平台部署网关并测试:须要将网关实现转化为平台资源进行部署测试。只有这样最初才能够一键公布到开源利用商店供别人应用。
  4. 制作和公布插件:定义插件相干元数据,并公布到开源利用商店。
  5. 欠缺插件信息并上架:欠缺插件的介绍后,能够让用户更好的应用该插件。

上面将会针对这几个步骤具体阐明。

部署 Gateway API 根底资源

在制作上游网关实现插件之前,咱们须要装置 Gateway API 根底的 CRD 和控制器等资源,平台曾经将这些资源打包成插件利用上架到开源利用商店。咱们只须要在 平台治理 -> 应⽤市场 -> 开源应⽤商店 -> 搜寻 GatewayAPI-Base 并进行装置即可,因为 Gateway API 中 RBAC 相干资源对命名空间有依赖,所以咱们须要在装置时,新建一个团队,团队英文名设置为 gateway-system,这样将会将其装置至 gateway-system 命名空间下,最好独自创立⼀个应⽤,应⽤的名称⻅名知意,便于前期治理。

抉择 Gateway API 网关实现

k8s Gateway API 实现列表中有多个实现,制作的话能够去这里筛选,因为目前 k8s Gateway API 目前 HttpRoute 已反对到 Beta 版本,所以咱们须要筛选 HTTPRoute 资源反对到 beta 版本的上游实现,如 Istio、Cilium、Kong 等。因为 Envoy Gateway 已反对到 Beta 版本,所以咱们本次应用其作为网关插件的扩大。

在 Rainbond 上部署并测试

筛选好实现后,你能够在实现的官网中看到如何装置实现,拿 envoy 为例,envoy 官网给出了两组 Yaml 如下:

kubectl apply -f https://github.com/envoyproxy/gateway/releases/download/v0.3.0/install.yaml
kubectl apply -f https://raw.githubusercontent.com/envoyproxy/gateway/v0.3.0/examples/kubernetes/http-routing.yaml
  • install.yaml 此 YAML 文件中寄存的便是咱们插件所需的根底资源。
  • http-routing.yaml 这个 YAML 文件咱们须要进行解决,只保留咱们插件所需的 GatewayClass 资源和 Gateway 资源,HttpRoute 资源不须要保留,在平台定义网关策略后将会主动生成。

将整顿好的资源 YAML 后,在利用视图的 k8s 资源管理处创立,功能位置:利用视图 —> k8s 资源 —> 增加

⚠️留神:如果有 RoleBinding 等须要标识命名空间的资源,则须要确保标识的命名空间和以后上传的团队所对应的命名空间是否统一,免得造成权限有余等问题,示例如下:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
...
subjects:
- kind: ServiceAccount
  name: certgen
  namespace: envoy-gateway-system

上传创立实现后,咱们还须要在 平台治理视图 -> 扩大 -> 能力 中解决一下 Gateway 资源,将网关的 Service 名称或前缀标记进去,后续在创立 HTTP 策略的时候便可获取并展现你的域名解析地址。

labels:
    service-name: envoy-envoy-gateway-system-envoy

NodePort 是从节点上获取的 IP,默认为 NodeInternalIP,如果存在 NodeExternalIP 则优先应用 NodeExternalIP。

LoadBalancerIP 是从 Service 资源上的 ExternalIPs 获取 IP,如果不存在则不展现。

实现以上操作后,咱们须要进行测试,次要查看以下几项。

  1. 查看组件是否都运行失常,状态是否都为运行中。
  2. 查看利用下的 k8s 资源是否都创立胜利。
  3. 当所有资源的状态都失常后,参考 Gateway API 网关应用文档进行应用测试,查看是否能够失常应用。

制作和公布插件

如果想将该网关实现作为平台网关插件进行公布,那么还须要筹备标记利用为插件的 RBDPlugin 资源,定义好该资源后,才能够在 平台治理 -> 插件 中查看到该插件并进行治理。示例如下:

apiVersion: rainbond.io/v1alpha1
kind: RBDPlugin
metadata:
  name: RBDPlugin 资源名称
spec:
  alias: 插件别名
  author: 插件制作人
  description: 插件简介
  icon: 插件图标
  version: 插件版本

定义好该资源后,咱们能够进行公布了,在利用拓扑图页面,点击左侧 公布 按钮,抉择 公布到云利用商店,即可将其公布到开源利用商店。

欠缺插件信息并上架

公布到开源利用商店的插件或利用,咱们须要登录开源利用商店编辑其信息并上架后,该利用才可被其余用户查看和应用。能够参考如何分享插件或利用到 Rainbond 利用商店。

登录实现后点击右上角控制台,抉择治理利用。这时候应该能够看到刚刚公布的 Envoy 插件。点击利用名称进入详情页面,此时须要编辑利用的名称、Logo、详细信息。

当利用根底信息补充实现后,咱们须要为其增加一个套餐,才能够上架。套餐在这里的作用次要是将利用的版本治理起来。用户应用不同的套餐装置的版本也不同。

在补充完利用的根本信息和套餐后,就能够筹备上架了。只有上架的利用才能够被其余用户浏览和应用。回到治理利用的页面,抉择上架即可。

最终成果

咱们能够在开源利用商店查看到咱们制作的网关插件,如下图所示,其余用户也能够在 Rainbond 中一键部署应用,具体应用能够参考 Gateway API 应用文档。

退出移动版