【Kubernetes】KtConnect使用介绍

Kt Connect简介

KT ConnectKubernetes 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-exchangepod

  • 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

不同于ExchangeMesh模式要求K8S集群有一个在运行的服务,Preview模式可以将本地电脑运行的程序部署到K8S集群中作为一个全新的Service对外提供服务,非常便于新建服务的开发调试、预览等作用。

猜你喜欢

转载自blog.csdn.net/friendlytkyj/article/details/131419707