目前越来越多的开发者开始采纳 Kubernetes 管理基础设施环境,并通过 Kubernetes
完成日常的开发,测试以及生产发布活动,为了能够有效的帮助开发者提升在 Kubernetes 场景下的本地开发测试效率,阿里巴巴研发效能云效团队面向原生
Kubernetes 开源了一款轻量级的开发者工具 KT Connect。
**1.KT Connect 是什么**
KT Connect(Kubernetes Developer Tool) 是轻量级的面向 Kubernetes
用户的开发测试环境治理辅助工具。其核心是通过建立本地到集群以及集群到本地的双向通道,从而提升在持续交付生命周期中开发环节的效率问题以及开发测试环境的复用问题:
KT Connect 包含一组用于快速实现本地与集群联调的 Cli 命令集:connect, exchange, mesh 以及一个集中式的可视化
Dashboard。
• connect: 在 kubectl 的基础上基于 SSH 协议构建本地到 Kubernetes 集群的 VPN 网络,使得用户本地能够直接访问 Kubernetes 集群的内部网络如 PodIP, ClusterIP。同时基于内置的 DNS 服务,开发者本地可以直接访问集群内的 Service DNS 地址。
• exchange: 通过部署代理容器接管集群内对特定应用的全部流量并转发到开发者本地端口,从而帮助开发者将本地服务加入到集群中从而实现联调测试。
• mesh: 与 exchange 类似,区别在于 mesh 不会完全接管所有流量,而是在 Service 后部署一个带有特定版本号的 Pod 实例,配合 Istio 的流量管理规则,从而可以将特定流量转发到开发者本地。
通过 KT Connect 提供的上述能力,开发者可以从传统的“开发-构建-
部署”的场景中解脱,直接实现本地开发本地联调,从而可以极大的提升开发效率。同时通过 Mesh 提供混合能力,通过复用测试环境减少在基础设施层面的资源投入。
**2.KT Connect 的优势**
KT Connect 源于阿里巴巴研发效能在测试规模化环境治理上的丰富经验,同时受启发于像 Azure Dev Spaces 和 Telepresence
这样的开发者工具,而形成的一套面向原生 Kubernetes 用户的测试环境治理以及本地联调解决方案:
• 原生 Kubernetes 支持:兼容任意 Kubernetes 集群,同时支持以 kubectl 插件的方式运行;
• 轻量级:基于 Go 实现,且只在 connect 的 VPN 网络能力方面主要依赖 SSHUttle 工具,无其它任何第三方依赖;用户可以在任意能正常运行 kubectl 的环境中使用 KT Connect;
• 多种应用场景:通过与原生 Istio 的集成,支持用户独占式或者共享开发测试环境;
• 可视化:基于同一的 Dashboard 以及可视化能力,让用户更直观的了解测试环境的使用情况;
• 可扩展性:KT Connect 中提供了详细的元数据信息,用户可以快速基于 Kubernetes API 扩展 Dashboard 以及功能。
**3.KT Connect 的应用场景**
**3.1.本地联调测试**
开发人员可以为每一个变更单独创建一个开发测试环境并且与本地程序进行联调,在 Kubernetes 环境中通过分配单独的命名空间,并配合 connect 和
exchange 命令的组合,可以让开发人员在独占的开发测试环境中进行联调测试。
例如打通AWS托管集群并做本地联调:
以上图例验证本地与AWS集群连通,后续能进行本地开发调试。
**3.2.共享开发测试环境**
除了独占式的开发测试环境以外,结合 exchange
命令,一组开发人员可以同时在一个共享的开发测试环境中完成本地的联调测试。从而可以大大节省基础设施资源的投入。
3.2.1 通过exchange暴露本地端口给集群,打通集群和本地之间的tunnel,为了集群能访问本地
**3.3.持续交付流水线**
我们通常会有一个单独的主干环境,每一次变更发布到正式并合并到主干代码之后,都会走动触发主干环境的部署,那意味着主干环境是默认稳定的一个环境。那在基于
Kubernetes
的持续交付流水线中,我们也可以非常方便的模拟一个主干环境,并且默认通过主干环境来进行本地的联调测试,从而避免日常环境不稳定导致无法有效的开展本地联调测试的任务。
更多资料
项目地址:
https://github.com/alibaba/kt-connect
帮助和使用文档:
https://alibaba.github.io/kt-connect/#/
作者:邹成立
审核:梁 超
编辑:王 锐