一、简介
KtConnect(Kt为Kubernetes Toolkit集群工具包的简写)是一款基于Kubernetes环境用于提高本地测试联调效率的小工具
Connect:建立数据代理通道,实现本地服务直接访问Kubernetes集群内网(包括Pod IP和Service域名)
Exchange:让集群服务流量重定向到本地,实现快速验证本地版本和调试排查问题(所有流量都可重定向到本地)
Mesh:创建路由规则重定向特定流量,实现多人协作场景下互不影响的本地调试(指定版本的流量)
Preview:暴露本地服务到集群,实现无需发布即可在线预览集成效果
二、下载安装
下载地址:
kt-connect/docs/en-us/guide/downloads.md at master · alibaba/kt-connect · GitHub
windows:
下载并解压,将包中的wintun.dll和可执行文件ktctl.exe一起放到PATH环境变量指定的任意位置。
三、配置
1、问运维要配置
1、可知Tomcat实例服务的Cluster IP为例如(172.16.255.111),记下待用。
2、问运维要下载服务器端的~/.kube/config到本地,配置kubectl的config,config文件通常在C:\Users\{用户}\.kube\下,将clusters:clusters:clusters:的地址改为K8s的masterIP(172.16.255.111)。
3、config文件例子:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: xx2
server: https://172.16.255.111:端口
name: cluster.local
contexts:
- context:
cluster: cluster.local
user: kubernetes-admin
name: kubernetes-admin@cluster.local
current-context: kubernetes-admin@cluster.local
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: xx1
client-key-data: xxxx111
2、在Windows下可以在CMD,点击"以管理员身份运行",然后在打开的窗口里执行:
ktctl connect --excludeIps 172.16.255.111/24
然后就可以访问了
3、将集群流量转发到本地
1、如果你本地启动的服务能连上注册中心,并且在容器内能访问你的服务,那你后面都不用配置了
2、** Exchange命令 **
ktctl exchange tomcat --expose 8080
将集群里访问指定服务的所有请求拦截并转发到本地的指定端口。
┌──────────┐ ┌─ ── ── ── ┌──────────┐
│ ServiceA ├─┬─►x│ ServiceB │ ┌─►│ ServiceC │
└──────────┘ │ ── ── ── ─┘ │ └──────────┘
exchange │
│ ┌──────────┐ │
└──►│ ServiceB'├─┘ (本地服务实例)
└──────────┘
3、** Mesh命令 **
$ ktctl mesh tomcat --expose 8080
00:00AM INF KtConnect start at <PID>
... ...
--------------------------------------------------------------
Now you can access your service by header 'VERSION: feo3x'
--------------------------------------------------------------
命令返回的'VERSION: feo3x',请求接口时header放入'VERSION: feo3x'流量即可到达该服务
不加headler的不会到该服务
将集群里访问指定服务的部分请求拦截并转发到本地的指定端口。通常用于团队协作时,需要定向调试调用链中间位置的服务,又不希望影响其他开发者正常使用测试环境的场景。
┌──────────┐ ┌──────────┐ ┌──────────┐
│ ServiceA ├─┬──►│ ServiceB │─┬─►│ ServiceC │
└──────────┘ │ └──────────┘ │ └──────────┘
mesh │
│ ┌──────────┐ │
└──►│ ServiceB'├─┘ (本地服务实例)
└──────────┘
ktctl exchange
与ktctl mesh
命令的最大区别在于,前者会将原应用实例流量全部替换为由本地服务接收,而后者仅将包含指定Header的流量导流到本地,同时保证测试环境正常链路始终可用。