k8s本地联调工具kt-connect
1、Kt Connect简介
KT Connect ( Kubernetes Developer Tool ) 是轻量级的面向 Kubernetes 用户的开发测试环境治理辅助工具。其核心是通过建立本地到集群以及集群到本地的双向通道,从而提升在持续交付生命周期中开发环节的效率问题以及开发测试环境的复用问题。其官网如下
KT: A simple kubernetes development toolkit
2、Kt Connect能帮我们实现什么
a、直接访问Kubernetes集群
开发者通过KT可以直接连接Kubernetes集群内部网络,在不修改代码的情况下完成本地开发与联调测试
b、转发集群流量到本地
开发者可以将集群中的流量转发到本地,从而使得集群中的其它服务可以联调本地
c、Service Mesh支持
对于使用Istio的开发者,KT支持创建一个指向本地的Version版本
d、基于SSH的轻量级VPN网络
KT使用shhuttle作为网络连接实现,实现轻量级的SSH VPN网络
e、作为kubectl插件,集成到Kubectl
开发者也可以直接将ktctl集成到kubectl中
3、实践步骤
a、安装kubectl命令行工具,并配置本地可以访问Kubernetes集群
以在window环境安装kubectl命令行工具为例(ps:本文的k8s是直接使用云厂商的k8s服务)
3.1下载kubectl
请到kubernetes版本发布页面下载与集群版本对应的或者更新的kubectl。其下载链接如下
kubernetes/README.md at master · kubernetes/kubernetes · GitHub
3.2、 安装kubectl后,配置一下环境变量 ,并用管理员cmd命令验证一下安装是否成功
C:\WINDOWS\system32>kubectl version --client
Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.9", GitCommit:"4fb7ed12476d57b8437ada90b4f93b17ffaeed99", GitTreeState:"clean", BuildDate:"2020-07-15T16:18:16Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"windows/amd64"}
3.3、 配置config文件
在C:\Users\Administrator目录下新建.kube文件夹,并在该文件夹下新建config文件,并把kubeconfig内容拷贝到config文件中。
3.4、 验证是否可以访问Kubernetes集群
C:\WINDOWS\system32>kubectl cluster-info
Kubernetes master is running at https://apiserver地址 CoreDNS is running at https:/apiserver地址/api/v1/namespaces/kube-system/services/coredns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
b、安装KT Connect
以在window安装为例,下载Windows可执行文件,并解压.exe文件到PATH路径下。其下载地址如下
https://alibaba.github.io/kt-connect/#/zh-cn/
将下载的文件与上面的文件放在一起
c、验证KT Connect是否安装成功
C:\WINDOWS\system32>ktctl -v
使用
kt-connect只会在指定连接的命名空间(namespace)里面新建一个自用的pod,然后部署一个kt-connect-shadow的镜像。分为四大模式:
1. Connect模式
本地网络可以直接通过serviceid直接访问k8s集群网络中的服务,但是并没有加到集群里面其他服务里面,其他服务的流量并不会转发到本地电脑。
ktctl --debug --image=10.3.87.5:8080/kt-connect-shadow:latest --namespace=k8s-project connect
或
ktctl.exe connect --kubeconfig .\kubeconfig --namespace feature-N --debug(--kubeconfig,确保有足够权限和能正确连接K8S集群的API Server)
在idea程序的VM options中添加
-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=2223
在Java程序中所有网络请求完全通过KT Connect进行转发。从而可以直接在代码中访问Kubernetes集群中的服务。
注:
Failed to setup port forward local:28344 -> pod kt-connect-shadow-gseak:53 error="error upgrading connection: error sending request: Post " https://10.0.8.101:8443/api/v1/namespaces/feature-N/pods/kt-connect-shadow-gseak/portforward ": dial tcp 10.0.8.101:8443: connectex: A socket operation was attempted to an unreachable host.",
如果出现以上报错的话,有可能是kt-connect路由BUG,可能本地电脑的路由与新加的通往API Server的路由有冲突,增加参数--excludeIps 10.0.8.101/32即可,如果网段冲突比较多,可以扩大网段范围,例如--excludeIps 10.0.8.0/24 参考 issue-302 。
ktctl.exe connect --kubeconfig .\kubeconfig --namespace feature-N --excludeIps 10.0.8.101/32 --debug
2. Exchange模式
Connect和Exchange模式都是单向的,一个是从集群外部到集群内部,一个是从集群内部到集群外部。
将集群里访问指定服务的所有请求拦截并转发到本地的指定端口。
ktctl exchange join-bpm-camunda --expose 8080 --debug --image=10.3.87.5:8080/kt-connect-shadow:latest --namespace=k8s-project
具体原理就是将service里面的pod替换成一个serviceA-kt-exchange的pod。
1.Exchange模式的流量方向是单向的,并不会将本地电脑主动发起的请求代理过去,如果K8S集群跟研发本地电脑不在一个网段内,需要另外开一个命令行运行Connect模式,确保本地服务可以正常连接K8S集群的其他服务,参考 issue-216 。
2.Exchange模式是通过拦截service进行流量转发,假如集群的请求没有经过service,例如直接解析到pod之类,可能就会出现拦截失败的情况(同理Mesh模式也是如此),所以出现问题记得跟运维同学确认K8S集群内的路由情况。
由于Nacos里面的服务最后基于ip访问,因此集群内无法通过这种方式来访问本机注册的服务。
解决:
添加 spring.cloud.nacos.discovery.ip: ${spring.application.name}
在discovery下注册指定ip为服务名,这样pod在调ip时会走k8s的服务代理到对应的本机ip
3. Mesh模式
mesh与exchange的最大区别在于,exchange会完全替换原有的应用实例。mesh命令创建代理容器,但是会保留原应用容器,代理容器会动态生成version标签,以便用于可以通过Istio流量规则将特定的流量转发到本地,同时保证环境正常链路始终可用。
ktctl mesh join-bpm-camunda --expose 8080 --debug --image=10.3.87.5:8080/kt-connect-shadow:latest --routerImage=10.3.87.5:8080/kt-connect-router:v0.3.6 --namespace=k8s-project
执行命令后可以看到输出日志里面包含类似文字:
2:30PM INF Now you can access your service by header 'VERSION: xxxxx'
这个模式本地电脑的服务和K8S集群里面相同的服务同时对外响应请求,但是只有通过指定的http请求头VERSION: xxxx的请求才会转发到本地电脑,相比Exchange模式,保证了其他人服务正常使用,同时研发又能进行本地调试。每次生成的请求头VERSION的值都是动态生成的,如果要固定这个值,可以通过参数--versionMark写死,例如固定值为test-version,命令如下:
ktctl mesh join-bpm-camunda --expose 8080 --debug --image=10.3.87.5:8080/kt-connect-shadow:latest --routerImage=10.3.87.5:8080/kt-connect-router:v0.3.6 --namespace=k8s-project --versionMark debug-version
具体原理就是将serviceA里面的Pod替换成一个serviceA-kt-router的路由镜像,负责根据请求头进行流量代理转发,另外生成一个serviceA-kt-stuntman服务,这个就是线上正常运行的serviceA,还有一个serviceA-kt-mesh-xxxxx服务,这个就负责将代理流量到本地电脑。
4. Preview模式
ktctl preview join-bpm-camunda-debug --expose 8080 --image=10.3.87.5:8080/kt-connect-shadow:latest --namespace=k8s-project
不同于Exchange和Mesh模式,要求K8S集群有一个在运行的服务,Preview模式可以将本地电脑运行的程序部署到K8S集群中作为一个全新的Service对外提供服务,非常便于新建服务的开发调试、预览等作用。
k8s本地联调工具kt-connect相关推荐
- k8s本地开发工具telepresence及部署
背景 k8s内部的pod ip .svc ip 无法被集群外用户访问,目前内部信息化集群需要通过svc ip访问到应用的swagger页面,解决方案主要有三种,分别为ingress转发.NodePor ...
- Kt Connect 对windows的支持
说一下 kt connect的特点 连接:直接访问远程Kubernetes集群.KT Connect sshuttle用作访问远程Kubernetes集群网络的vpn工具. 交换:开发人员可以交换工作 ...
- CLR_via_C#.3rd 翻译[1.5 本地代码生成工具NGen.exe]
1.5 The Native Code Generator Tool: NGen.exe 本地代码生成工具NGen.exe NGen.exe是和.NET框架绑定在一起的.当用户的机器上安装了一个应用程 ...
- k8s可视化管理工具Rancher安装和使用
k8s系列入门级教程-k8s可视化管理工具Rancher安装和使用 <超低成本的k8s集群搭建教程> 使用rke安装企业级k8s集群-待填坑 prometheus+grafana监控搭建教 ...
- java微信公众号开发怎样进行本地联调
第一次做微信公众号开发,积累了些微信开发的经验,前段时间项目紧没有及时总结,之后逐渐总结出来分享给大家 做微信公众号开发,首先要解决的是怎么进行本地联调.总不能每次开发完代码,上传到服务器,然后通过日 ...
- 如何评估移动GPU性能:以及4个需要了解的Android GPU 本地性能测试工具
众所周知,Android终端基本都配有GPU:无论手机还是VR,AR设备,GPU在其中扮演了越来越重要的地位. 当我们拿到一款GPU时,我们最关心的就是性能了. 不服跑个分.跑分是目前最常见的测试性能 ...
- java接口联调json传参,前端接口联调工具
前端接口联调工具 作者介绍 黄仲萍,达达-京东到家-移动研发部iOS研发.曾在外企工作并有驻PaloAlto经历,有多年iOS开发经验,对iOS应用程序架构设计与组件封装有一定的经验与见解.目前负责& ...
- 本地k8s环境搭建工具kind、microk8s安装;windows 包管理工具Chocolatey;lens k8s可视化工具
类似工具还有minik8s Chocolatey windows安装 Chocolatey类似mac的homebrew工具 cmd 终端管理运行 @powershell -NoProfile -Exe ...
- k8s 和 管理工具 rancher
k8s学习 Kubernetes(K8S) 入门进阶实战完整教程,黑马程序员K8S全套教程 更多看 Kubernetes详细教程.md 常用命令 k8s常用命令(需要可查ctrl+f) #查看pod ...
最新文章
- runtime的用法
- 很简单的自定义友好链接实现 .net core 2
- ARM构架之cache初探
- Make Even(800)
- boost::iterator_archetypes用法的测试程序
- 安全编程: 防止缓冲区溢出
- wordcloud词云使用方法
- 工业视觉中的目标检测——兼谈天池大赛优胜方案
- struts2文件下载
- win 7 连接打印机
- flowable工作流_使用Bash Shell实现flowable配置文件修改定制
- C语言求1+2!+3!+...+20!
- 3D游戏编程4--打飞碟
- python平方上标怎么输出,plot绘图同样适用
- php mysql布局教程_请教php关于mysql数库库布局的问题
- 我的世界服务器无限开号,我的世界开挂指令大全表一览!39条命令无限可能性
- 虚拟机服务器磁盘扩容步骤,vmware ESXi 虚拟机扩容磁盘空间
- 红楼解梦五--饥饿疗法
- Java面向对象程序设计综合练习2(编程题)
- 用计算机解决问题时 为什么要用计算思维,在问题解决活动中培养计算思维