一、简介

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 exchangektctl mesh命令的最大区别在于,前者会将原应用实例流量全部替换为由本地服务接收,而后者仅将包含指定Header的流量导流到本地,同时保证测试环境正常链路始终可用。

Logo

开源、云原生的融合云平台

更多推荐