Kt Connect简介
KT Connect
(Kubernetes Developer Tool
)是轻量级的面向Kubernetes
用户的开发测试环境治理辅助工具。其核心是通过建立本地到集群以及集群到本地的双向通道,从而提升在持续交付生命周期中开发环节的效率问题以及开发测试环境的复用问题。
官网
https://alibaba.github.io/kt-connect/#/
GitHub
:https://github.com/alibaba/kt-connect
- 快速开始:
https://alibaba.github.io/kt-connect/#/zh-cn/guide/quickstart
0.3.7
版本下载页面:https://github.com/alibaba/kt-connect/releases/tag/v0.3.7
0.3.7
版本下载地址:https://objects.githubusercontent.com/github-production-release-asset-2e65be/195961934/02cfc78d-6296-4a8e-abe4-7ba36ef9589c?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230625%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230625T013458Z&X-Amz-Expires=300&X-Amz-Signature=41914bd96959ef533091fe132a271615c9d85e6644834c0ab61928e186a94851&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=195961934&response-content-disposition=attachment%3B%20filename%3Dktctl_0.3.7_Windows_x86_64.zip&response-content-type=application%2Foctet-stream
原理
同Telepresence
类似,但不同的是,kt-connect
只会在指定连接的命名空间(namespace
)里面新建一个自用的pod
,然后部署一个kt-connect-shadow
的镜像。相比Telepresence
,它在模式进行了细分扩展,分为四大模式:
Connect模式
ktctl.exe connect --kubeconfig .\kubeconfig --image registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-shadow:v0.3.7 --namespace cop --debug
这个模式下,kt-connect
起到的是一个类似于VPN的作用,研发本地电脑可以访问到连接的命名空间(namespace
)内的所有服务,但是并没有加到集群里面其他服务里面,其他服务的流量并不会转发到本地电脑。
Exchange模式
ktctl.exe exchange serviceA --kubeconfig .\kubeconfig --namespace cop --expose 8080 --debug
这个模式类似于Telepresence
拦截模式,将指定服务的所有流量拦截下来转发到研发本地电脑的端口,使用这个模式能对环境里的访问请求直接进行调试。
具体原理就是将service
里面的pod
替换成一个serviceA-kt-exchange
的pod
。
- Exchange模式的流量方向是单向的,并不会将本地电脑主动发起的请求代理过去,如果K8S集群跟研发本地电脑不在一个网段内,需要另外开一个命令行运行Connect模式,确保本地服务可以正常连接K8S集群的其他服务,参考 issue-216 。
- Exchange模式是通过拦截service进行流量转发,假如集群的请求没有经过service,例如直接解析到pod之类,可能就会出现拦截失败的情况(同理Mesh模式也是如此),所以出现问题记得跟运维同学确认K8S集群内的路由情况。
Mesh模式
kctl.exe mesh serviceA --kubeconfig .\kubeconfig --namespace cop --expose 8080 --debug
执行命令后可以看到输出日志里面包含类似文字:
2:30PM INF Now you can access your service by header 'VERSION: xxxxx'
这个模式本地电脑的服务和K8S集群里面相同的服务同时对外响应请求,但是只有通过指定的http
请求头VERSION: xxxx
的请求才会转发到本地电脑,相比Exchange
模式,保证了其他人服务正常使用,同时研发又能进行本地调试。每次生成的请求头VERSION的值都是动态生成的,如果要固定这个值,可以通过参数--versionMark
写死,例如固定值为test-version
,命令如下:
kctl.exe mesh serviceA --kubeconfig .\kubeconfig --namespace feature-N --expose 12001 --debug --versionMark test-version
具体原理就是将serviceA
里面的Pod替换成一个serviceA-kt-router
的路由镜像,负责根据请求头进行流量代理转发,另外生成一个serviceA-kt-stuntman
服务,这个就是线上正常运行的serviceA
,还有一个serviceA-kt-mesh-xxxxx
服务,这个就负责将代理流量到本地电脑。
Preview模式
kctl.exe preview serviceB --kubeconfig .\kubeconfig --namespace cop --expose 12001
不同于Exchange
和Mesh
模式要求K8S
集群有一个在运行的服务,Preview
模式可以将本地电脑运行的程序部署到K8S
集群中作为一个全新的Service
对外提供服务,非常便于新建服务的开发调试、预览等作用。