关于KubeVela以及项目简介
- KubeVela:KubeVela 是一个开箱即用的现代化应用交付与管理平台,它使得应用在面向混合云环境中的交付更简单、快捷。使用 KubeVela 的软件开发团队,可以按需使用云原生能力构建应用,随着团队规模的发展、业务场景的变化扩展其功能,一次构建应用,随处运行。
- 官网:https://kubevela.io/zh/
- 项目名称:支持多驱动应用网关规则管理
- 项目描述:在 Kubernetes 生态系统中,应用最广泛的应用南北流量(网关)管理 API 有两种,分别是 Ingress 和Gateway API。Ingress 主要覆盖 HTTP 协议,Kubernetes SIG 目前驱动后者,以便实现一个标准的 API,用于更多的协议流量管理。
KubeVela 是一个应用交付平台。它的优点是可以向下集成类似需求的API,兼容不同的实现并用户提供了统一的管理流程和向上的体验。
项目要求:基于 Ingress 或Gateway API 开发一套兼容多个负载均衡器的网关管理功能,使用户在不同环境下部署不同网关实现的应用时无需更改流量管理策略配置。
– 基于 Ingress API 需要支持 Nginx、Istio、Traefik、阿里云 CLB 等。
– 基于 Gateway API 需要支持 Istio、Traefik、Kong 等。 - 项目导师:悦达(曾庆国)
- 项目链接:https://github.com/kubevela/kubevela/issues/3983
开发详情
语言和应用的基础
KubeVela 本身是一个的应用交付与管理控制平面,它架在 Kubernetes 集群、云平台等基础设施之上,通过开放应用模型来对组件、云服务、运维能力、交付工作流进行统一的编排和交付。最终要通过差异化配置等操作来交付一个应用来测试本次项目提供的兼容多个负载均衡器的网关管理功能。
KubeVela 使用 CUE 作为核心引擎,利用CUE 语言灵活简洁的语法、丰富的内置函数及其参数校验能力,根据启动参数和插件元数据渲染和部署插件应用和附属资源。我们可以通过 CUE 扩展 Kubevela 的高级功能,以支持本次项目的开发。所以 KubeVela 和 CUE 的使用的熟练程度会对开发进度产生重要影响。
流量管理API的选择
Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。
而 Gateway API 则是旨在改进 Ingress 等当前标准来发展 Kubernetes 服务网络。
在本次项目中选择以 Gateway API 为基础进行开发
- gateway-api: https://gateway-api.sigs.k8s.io/
思考相同与不同
本次项目聚焦于兼容和封装,需要集成多个Gateway API的实现者(包括Istio、traefik等),向用户提供httpRoute、httpsRoute、tcpRoute这几个trait的统一接口,使用户在不同环境下部署不同网关实现的应用时无需更改流量管理策略配置,只需要修改实现者。
我在这里将 httpRoute 等 rait 以及 Gateway API 的 CRD 放到另一个额外的 gateway-traits addon 中,Gateway API的实现者无需对 httpRoute 等 trait 进行支持,只需关注自己的实现。
支持者的适配
首先要对实现者进行初步的调研,因为各个实现者内部的不同,将其作为 addon 加入到 KubeVela 中需要不断的学习与尝试。在这个过程中对 KubeVela 的操作更加熟练,对 cue 也更加熟悉。
- 对已经实现的 traefik addon 进行版本的更新
- 将 istio 作为 addon 加入到实现者中去
收获与体验
之前对于开源社区的接触只是完成了一些简单的 issue,这次向 KubeVela 加入一个新功能感觉收获是非常多的。包括对开源有了更多的了解,学习到了新技术、新知识。对自己来说,这次开发过程并不是一帆风顺的,在开发中也遇到了一些困难,导师的帮助和建议对项目的开发和完善起到很重要的作用,这次开源经历也让我在很多方面成长了许多。与在学校学习的经历不同,开源活动会激发个人的主观能动性,自己动手去实践、去探索。能为社区贡献出自己的一份力量,是一件非常有成就感的事情。