加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

阿里工程师开发了一款免费工具,提升Kubernetes应用开发效率

发布时间:2019-03-28 22:47:33 所属栏目:建站 来源:郑云龙
导读:对于使用了Kubernetes作为应用运行环境的开发者而言,在同一个集群中我们可以使用命名空间(Namespace)快速创建多套隔离环境,在相同命名空间下,服务间使用Service的内部DNS域名进行相互访问。 基于Kubernetes强大的隔离以及服务编排能力,可以实现一套
副标题[/!--empirenews.page--]

阿里工程师开发了一款免费工具,提升Kubernetes应用开发效率

对于使用了Kubernetes作为应用运行环境的开发者而言,在同一个集群中我们可以使用命名空间(Namespace)快速创建多套隔离环境,在相同命名空间下,服务间使用Service的内部DNS域名进行相互访问。 基于Kubernetes强大的隔离以及服务编排能力,可以实现一套定义编排(YAML)多处部署的能力。

不过,一般来说Kubernetes使用的容器网络与开发者的所在的办公网络直接并不能直接连通。 因此,如何高效的利用Kubernetes进行服务间的联调测试,成为在日常开发工作中一道绕不开的坎。本文我们就来聊一聊,如何加速基于Kubernetes的研发效率。

使用自动流水线

为了能够让开发者能够更快的将修改的代码部署到集群测试环境中,一般来说我们会引入持续交付流水线,将代码的编译,镜像的打包上传以及部署通过自动化的方式来解决。如下所示:

阿里工程师开发了一款免费工具,提升Kubernetes应用开发效率

从一定程度上来说,这种方式可以避免开发人员进行大量重复性的工作。但是,虽然整个过程自动化了,但是开发人员也不得不每次进行代码变更之后都需要等待流水线的运行。对于开发人员来说,每次代码变更后等待流水线运行或许已经成为整个开发任务过程中体验最糟糕的部分。

打破网络限制,本地联调

理想状态下是开发者可以直接在本地启动服务,并且这个服务就可以无缝的和远程的kubernetes集群中的各个其它服务实现互相调用。需要解决两个问题:

  • 我依赖了其它的服务:运行在本地的代码可以直接通过podIP,clusterIP甚至是Kubernetes集群内的DNS地址访问到部署在集群中的其它应用,如下图左;
  • 其它的服务依赖了我:运行在Kubernetes集群中的其它应用可以在不做任何改变的情况下访问我到运行的本地的代码,如下图右。

阿里工程师开发了一款免费工具,提升Kubernetes应用开发效率

要实现刚才说的两种本地联调方式,主要需要解决以下3个问题:

  • 本地网络与Kubernetes集群网络直接的连通问题
  • 在本地实现Kubernetes中内部服务的DNS解析;
  • 如果将对集群中其它Pod访问的流量转移到本地;
云效开发者工具KT

为了简化在Kubernetes下进行联调测试的复杂度,云效在SSH隧道网络的基础上并结合Kubernetes特性构建了一款面向开发者的免费辅助工具KT(点击前往下载),如下所示:

阿里工程师开发了一款免费工具,提升Kubernetes应用开发效率

当本地运行的服务C’希望能够直接访问集群中default命名空间下的Service A和Service B时,运行如下命令:

  1. $ ktctl -namespace=default 

KT会自动在集群中部署SSH/DNS代理容器,并构建本地到Kubernetes集群的VPN网络并通过DNS代理实现集群服务DNS域名解析,在运行KT之后,开发者的本地程序可以直接像运行在集群中的服务一样通过service名字调用集群中部署的其它应用:

而如果希望集群中的其它Pod(比如图中的PodD和PodE)能够通过ServiceC访问到本地运行的程序C‘,通过如下命令,指定需要替换的目标Deployment以及指定本地服务端口:

  1. #-swap-deployment指定需要替换的目标Deployment  
  2.   
  3. # -expose 指定本地服务运行的端口  
  4.   
  5. ktctl -swap-deployment c-deployment -expose=8080  

KT在构建VPN网络的同时,还会自动通过代理容器接管集群原有的PodC实例,并直接转发的本地的8080端口。实现集群应用联调本地。

经过上述两个命令,开发者就可以真正的使用云原生的方式来开发调试Kubernetes中的应用了。

工作原理

下面解析KT的工作原理,如果你已经迫不及待的想尝试KT的功能,可以直接前往下载KT工具。

KT主要由两部分组成:

  • 在本地运行的命令行工具ktctl
  • 运行在集群中的SSH/DNS代理容器。

在工作原理上KT实际上是结合Kubernetes自身能力实现的一个基于SSH的VPN网络。这这部分,笔者将详细介绍云效Kubernetes开发者工具KT的工作原理:

打通SSH协议通道

在Kubernetes命令行工具kubectl中内置的port-forward命令可以帮助用户建立本地端口到Kubernetes集群中特定Pod实例端口间的网络转发。

当我们在集群中部署一个包含sshd服务的容器后,通过port-forward可以将容器的SSH服务端口映射到本地:

  1. # 将对本地2222端口转发到kt-porxy实例的22端口 
  2.  
  3. $ kubectl port-forward deployments/kt-proxy 2222:22 
  4.  
  5. Forwarding from 127.0.0.1:8080 -> 8080 
  6.  
  7. Forwarding from [::1]:8080 -> 8080 

在运行端口转发后,就可以直接通过本地的2222端口通过SSH协议进入到Kubernetes集群的kt-proxy实例中。从而打通本地与集群之间的SSH网络链路。

本地动态端口转发与VPN

在打通SSH网络之后,我们就可以利用SSH通道实现本地到集群的网络请求,其中最基本的方式就是使用SSH动态端口转发的能力。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读