k8s本地联调工具kt-connect

news2024/12/24 20:31:25

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对外提供服务,非常便于新建服务的开发调试、预览等作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Linux]多线程的同步和互斥(线程池 | 单例模式 | 其他常见的锁 | 读者写者问题)

文章目录线程池线程安全的单例模式单例模式的特点饿汉方式和懒汉方式单例模式实现线程池其他常见的锁读者写者问题线程池 线程池是一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分…

K26 SOM从emmc启动linux——2

问题 在K26 SOM从emmc启动linux文章中,使用EMMC启动后,出现下图打印: 这里本身是存在问题的,没有显示系统名称,打印中有错误提示。 解决办法 在Image Packaging Configuration中将petalinux-initramfs-image修改成p…

教你快速实现“基于Docker快速构建基于Prometheus的MySQL监控系统”

🍁 个人网站:知识浅谈 📌 资料分享群:资源分享 🍖400多套PPT模板:商务模板&学生答辩 🤞这次都给他拿下🤞 基于Docker快速构建基于Prometheus的MySQL监控系统 先来捋一下数据流的…

Java Lambda表达式原理解析

前言 java中有lambda,在使用java的过程中我们没少用(啥?用的kotlin?你别说话)但是你知道lambda的实现原理吗? 接下来就来解析lambda实现,不过在lambda之前我们与一个熟悉的老伙计谈谈心————匿名类,为什么因为他们有点类似. 匿名类的实现方式 从字节码的层面上来说ne…

长光卫星冲刺科创板上市,预计2025年底前实现300颗卫星在轨

近日,长光卫星技术股份有限公司(下称“长光卫星”)在上海证券交易所递交招股书,准备在科创板上市。 本次冲刺科创板上市,长光卫星计划募资26.83亿元,将用于“吉林一号”卫星星座建设项目(二期&a…

第五章:数据完整性

一、实体、参照、用户自定义完整性 1、【单选题】CREATE TABLE时定义属性上的约束条件,检查列值是否满足一个条件表达式的定义关键词为: 正确答案: A 2、【多选题】创建患者住院主记录表pat_visit,并定义主码{patient_id,visit_…

《图解TCP/IP》阅读笔记(第七章 7.1、7.2、7.3)—— 路由控制概念与路由控制算法

第七章 路由协议 本章旨在将详细介绍路由控制以及实现路由控制功能的相关协议 7.1 路由控制的定义 在互联网这片汪洋大海中,数据就好似一叶扁舟,没有灯塔的指引,是难以寻得目的地的。这种进行正确方向引导的转发数据的处理,就叫…

[LeetCode周赛复盘] 第 94 场双周赛20221225

[LeetCode周赛复盘] 第 94 场双周赛20221225 一、本周周赛总结二、 [Easy] 6273. 最多可以摧毁的敌人城堡数目1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6274. 奖励最顶尖的 K 名学生1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6295. 最小化两个数组中的最大值1. 题…

从入门到项目实战 - Vue 键盘事件

Vue 中键盘事件的使用上一节:《 Vue 事件处理 》| 下一节:《 Vue 中鼠标事件的使用 》jcLee95 邮箱 :291148484163.com CSDN 主页:https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 本文地址:https:/…

【TypeScript】TS泛型讲解及其使用

目录 泛型 泛型函数使用 泛型约束 多泛型使用 泛型接口 泛型类 泛型工具类型 泛型 泛型是可以在保证类型安全的前提下,让函数等与多种类型一起工作,从而实现复用,常用于:函数、接口、class中。日常我们创建的函数&#xf…

车牌检测模型训练(含源码和数据集)

车牌检测模型训练(含源码和数据集) 本教程利用NVIDIA TAO进行车牌检测模型的训练: 模型框架:SSD数据集: CRPD, 连接:https://github.com/yxgong0/CRPD训练框架: NVIDIA TAO, 安装教程连接: https://docs.nvidia.com/tao/tao-toolkit/text/tao_toolkit_quick_start_guide.html…

目标检测之YOLOv3算法分析

基本原理 特征网络 输入输出 输入416∗416∗3416*416*3416∗416∗3大小的图片(不唯一,但图片大小必为32的倍数),输出3个尺度的feature map,分别为13∗13∗25513*13*25513∗13∗255,26∗26∗25526*26*25526∗26∗255…

RV1126笔记十九:吸烟行为检测及部署<六>

若该文为原创文章,转载请注明原文出处。 模型测试 一、pt文件测试 pt文件是在windows下训练生成的,测试环境为py3.8 1、首先查看虚拟环境列表,然后切换于是py3.8的虚拟环境。 conda env list // 查看虚拟环境列表 conda activate yolo // 切换虚拟环境 2…

leetcode:1739. 放置盒子【找规律!】

目录题目截图题目分析ac code总结题目截图 题目分析 样例有规律,它希望我们先按每层1, 3, 6这样叠起来,比如能跌i层那么至少有i * ( i 1) // 2个底层多出来的东西再做考虑多出来的东西考虑1 2 3…能加到多少个比如说如果多出来3个的话,放…

【小5聊】Asp.Net Core3.1基础之跨域设置以及设置不对的地方

最近微软的.Net Core平台更新换代速度非常快,还没把2.1整熟悉,就把2.1淘汰了。 目前最新版本已经到了7.0,.net core3.1还在长期维护范围内,估计能用一段时间。 所以,.net core2.1升级到3.1,跨域方法的设置也…

gerber 文件格式 [一]

在电路设计这块, 目前还绕不开 gerber 文件的工程交互, 所以来了解一下. 目前官网的文档gerber-layer-format-specification-revision-2022-02_en.pdf. gerber 文件是一个ascii码的命令文档, 格式比较简单,主要命令有下面这些 命令名称说明G04注释对文档生成没有影响MO模式设…

基于天鹰算法改进的DELM预测-附代码

天鹰算法改进的深度极限学习机DELM的回归预测 文章目录天鹰算法改进的深度极限学习机DELM的回归预测1.ELM原理2.深度极限学习机(DELM)原理3.天鹰算法4.天鹰算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考:https:…

一文弄懂 React HOC

1. 提出问题 1.HOC 能解决什么问题? 2.HOC 的使用场景? 2. HOC 能解决什么问题? 1.拦截组件渲染,包括是否渲染组件、懒加载组件 2.往组件的 props 中混入所需的东西,比如给非 Route 组件的 props 混入 history 对象…

node.js+uni计算机毕设项目交流微信小程序LW(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

信号量和共享内存

信号量 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线…