使用阿里开源的这款K8s环境本地测试联调工具,效率高的飞起
创始人
2025-07-12 18:00:18
0

在我们系统部署到 k8s集群以后,开发测试模式也会有一定变化,下面是一些常见的问题,如果处理不好,直接影响我们的效率

  • 本地服务如何访问k8s集群里面的服务进行功能测试?
  • 本地如何快速访问k8s集群中资源,比如访问某个微服务的 swagger?
  • 如何把k8s集群里面流量转发到本地服务,进行功能测试?
  • 如何临时快速部署一个服务到 k8s集群 里面进行功能验证?

以上问题,我相信大多数开发者都会遇到过,而且常用的方式应该是把服务部署到 k8s中在进行测试,这种方式虽然简单,但是效率很低,因为我们的系统还在单元测试,遇到的bug会比较多,每次改动都要重新发布,时间都花费在系统打包部署上面了

下面推荐一个阿里开源的k8s工具,它可以帮助我们解决以上问题

KtConnect介绍

图片图片

KtConnect(Kt为Kubernetes Toolkit集群工具包的简写)由阿里开源,是一款基于k8s环境用于提高本地测试联调效率的小工具,它提供了本地和测试环境集群的双向互联能力

地址:https://github.com/alibaba/kt-connect

特性

  • Connect:建立数据代理通道,实现本地服务直接访问Kubernetes集群内网(包括Pod IP和Service域名)
  • Exchange:让集群服务流量重定向到本地,实现快速验证本地版本和调试排查问题
  • Mesh:创建路由规则重定向特定流量,实现多人协作场景下互不影响的本地调试
  • Preview:暴露本地服务到集群,实现无需发布即可在线预览集成效果

快速体验

在这篇文档里,使用一个简单的示例,来快速演示通过KtConnect完成本地直接访问集群中的服务、以及将集群中指定服务的请求转发到本地的过程。

安装

brew install kt-connect

图片图片

部署实例应用

为了便于展示结果,首先在集群中部署一个Tomcat服务并创建一个默认首页:

kubectl create deployment tomcat --image=tomcat:9 --port=8080
kubectl expose deployment tomcat --port=8080 --target-port=8080
kubectl exec deployment/tomcat -c tomcat -- /bin/bash -c 'mkdir webapps/ROOT; echo "hello world v1" > webapps/ROOT/index.html'

图片图片

查询Pod和服务的IP地址:

kubectl get pod -o wide --selector app=tomcat
kubectl get svc tomcat

图片图片

可知Tomcat实例的Pod IP为172.18.25.22,服务的Cluster IP为192.168.220.59,记下待用。

连接集群网络

使用ktctl connect命令建立从本地到集群的网络通道,注意该命令需要管理员权限。

sudo ktctl connect

图片图片

本地访问集群资源

输出以上日志以后,就可以在本地直接访问集群资源了,可通过浏览器或curl命令来验证:

# 在本地直接访问PodIP
curl http://172.18.25.22:8080   
#在本地访问ClusterIP
curl http://192.168.220.59:8080
#使用作为域名访问服务
curl http://tomcat:8080
#使用.域名访问服务
curl http://tomcat.default:8080
# 使用集群内完整域名访问服务
curl http://tomcat.default.svc.cluster.local:8080

图片图片

将集群流量转发到本地

为了验证集群访问本地服务的场景,我们在本地也启动一个Tomcat的容器,并为其创建一个内容不同的首页。

docker run -d --name tomcat -p 8080:8080 tomcat:9
docker exec tomcat /bin/bash -c 'mkdir webapps/ROOT; echo "hello world local v2" > webapps/ROOT/index.html'

图片图片

KtConnect提供了两种能够让集群流量重定向到本地服务的命令,使用场景上稍有不同。

  • Exchange:将集群指定服务的所有流量转向本地
  • Mesh:将集群指定服务的部分流量(按Header或Label规则)转向本地
Exchange命令

将k8s集群里访问指定服务的所有请求拦截并转发到本地的指定端口上。通常用于调试在测试环境里,当前服务未部署到 k8s 集群,又想快速验证的场景

图片图片

使用ktctl exchange命令将先前部署到集群中的tomcat服务流量全部转到本地8080端口:

ktctl exchange tomcat --expose 8080

图片图片

在本地或者集群中访问示例开始时部署到集群的tomcat服务,查看输出结果:

如果未运行ktctl connect,只能从k8s集群内访问

curl http://tomcat:8080

图片图片

可以看到,访问集群里tomcat服务的请求转发到了本地的Tomcat实例

如果我们微服务部署在 K8s 中还是使用的eureka或者 nacos,这种方式可能不支持,因为这种方式是服务消费方直接调用的服务提供方的 pod ip 地址

Mesh命令

将集群里访问指定服务的部分请求拦截并转发到本地的指定端口。通常用于团队协作时,需要定向调试调用链中间位置的服务,又不希望影响其他开发者正常使用测试环境的场景。

图片图片

Mesh命令,能够直接实现HTTP请求的自动按需路由,为了便于验证结果,先停止ktctl exchange 命令。然后通过ktctl mesh命令创建代理Pod:

ktctl mesh tomcat --expose 8080

图片图片

查看以上红色标记部分,输出了一个特定的Header值。此时,直接访问集群里的tomcat服务,流量将正常进入集群的服务实例,若请求包含Mesh命令输出的Header,则会转发流量到本地服务实例

curl http://tomcat:8080
curl -H 'VERSION: feo3x' http://tomcat:8080

图片图片

实际测试中可以使用ModHeader插件,在浏览器发起http中自动追加自定义 header

图片图片

图片图片

将本地服务提供给其他开发者

在开发过程中,也可以利用KtConnect将本地服务快速"部署"到集群,变成一个临时的服务,供其他开发者或集群中的其他服务临时使用。

  • Preview:将本地服务注册为集群里的Service
  • Forward:将集群服务映射到本地,结合Preview命令可实现开发者之间跨主机使用Localhost地址互访
Preview命令

将本地运行的服务实例注册到集群上。主要用于将本地开发中的服务提供给其他开发者进行联调和预览。

下面使用ktctl preview命令将运行在本地8080端口的服务注册到测试集群,命名为tomcat-v2。

ktctl preview tomcat-v2 --expose 8080

图片图片

注册成功以后,集群里的服务就可以通过tomcat-v2名称来访问本地注册的服务实例了

图片图片

其他开发者也可以在执行ktctl connect后,直接通过tomcat-v2服务名称来预览该服务的实时情况:

图片图片

Forward命令

将任意IP或集群中的服务映射到本地的指定端口。用于在测试时,使用localhost地址便捷的访问集群中的特定IP或服务,典型场景是是访问其他开发者通过Preview命令注册的本地服务。

图片图片

如上图当开发者A运行了前述的Preview命令后,开发者B可以使用ktctl forward命令将它映射到自己本地的9090端口,然后进行调用

ktctl forward tomcat-v2 9090:8080

图片图片

执行完以上命令后,开发者就可以访问localhsot:9090 执行

图片图片

是不是感觉forward命令与kubectl port-forward命令相似,其实这块只是额外增加了断网自动重连的能力。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...