背景
微服务项目,有 A B C 三个模块,对A 进行开发,开发完编译images,部署一条龙ok没问题万事大吉,但往往会出问题…再来一次…麻烦效率低。假如在本地running 直接调用 B C 服务,打通本地与测试环境 k8s 集群的 service 互联互通,开发起来就 soeasy 了
介绍
KtConnect是阿里巴巴开源的一个工具,提供了本地和测试环境集群的双向互联能力。
安装
KtConnect 为 golang 开发,编译后直接是一个可执行文件,按照对应系统下载后解压即可直接使用,下载地址 。
解压至 tar-zxvf ktctl_xxxxx.tar.gz -C /usr/local/bin/
使用
本地连接测试集群接入 nacos
- 将 k8s master 下的
~/.kube/config
copy 到本机 - 执行命令
sudo ktctl connect --kubeconfig ~/config -i xxxxx/jenkins/kt-connect-shadow:v0.3.7 --excludeIps 192.168.1.1/16
# 正常启动
6:49PM INF Route to tun device completed
6:49PM INF Setting up dns in local mode
6:49PM INF Port forward local:9117 -> pod kt-connect-shadow-qlmnb:53 established
6:49PM INF Setup local DNS with upstream [tcp:127.0.0.1:9117 udp:10.30.52.44:53]
6:49PM INF Creating udp dns on port 10053
6:49PM INF ---------------------------------------------------------------
6:49PM INF All looks good, now you can access to resources in the kubernetes cluster
6:49PM INF ---------------------------------------------------------------
###### 配置项
--kubeconfig ~/config # k8s 文件
-i xxxxx/jenkins/kt-connect-shadow:v0.3.7 # 默认是访问 registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-shadow:v0.3.7,可以使用 docker save\load 处理,较麻烦,更推荐是docker tag\push 推送到公司内网的 registry 上
--excludeIps 192.168.1.1/16 # 忽略IP,避免出现无法访问其他组价,如 mysql。
至此,就可以使用 service:port 访问集群上的对应服务了,也可以正常走 nacos 服务调用
服务流量转发
在本地运行,也会将服务注册到 nacos 上,当你做 debug,刚好请求分发到本地服务上,对其他同学会有影响。这里可以使用 ktctl mesh 根据 header 做流量转发
ktctl mesh --kubeconfig ~/config -i xxx/jenkins/kt-connect-shadow:v0.3.7 data-source --expose 8081:8080 --routerImage xxx/jenkins/kt-connect-router:v0.3.7
# 启动成功
7:09PM INF Reverse tunnel 0.0.0.0:8081 -> 127.0.0.1:8081 established
7:09PM INF ---------------------------------------------------------------
7:09PM INF Now you can access your service by header 'VERSION: xoybh'
7:09PM INF ---------------------------------------------------------------
7:09PM INF Service dam-wmodeling unlocked
--kubeconfig ~/config # 同上
-i # 同上
--expose 8081:8080 # 本地服务端口:目标服务端口
--routerImage xxx/jenkins/kt-connect-router:v0.3.7 # 类似 -i, 指定另一个mesh 功能的docker镜像
测试
# -H "VERSION: xoybh" 是执行 mesh 后输出的 head 密码
curl -X GET "http://data-source:8080/service-api/enum/compareType" -H "accept: */*" -H "x-tenant-id: tt" -H "VERSION: xoybh"
详细参数配置使用查看官方文档
KtConnect Docs