k8s业务程序联调工具-KtConnect

概述

原理

工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节点的作用。

场景:

研发本地访问测试环境用于调整测试业务程序。研发本地访问生产环境用于排查故障

两种模式:

 架构图

客户端安装

下载安装包

kt-connect/docs/zh-cn/guide/downloads.md at master · alibaba/kt-connect · GitHub

根据提示选择不同的客户端就好了,这里我是win直接运行命令 

C:\Users\shuaige\Desktop\离线包\k8s>ktctl.exe --version
ktctl version 0.3.7

配置ktctl的环境变量 

Win+R输入sysdm.cpl打开系统属性 → 高级 → 环境变量。

变量

变量名:KUBERNETES_MASTER  
变量值:https://10.10.101.35:6443

验证配置

# 运行命令
echo %KUBERNETES_MASTER%# 返回结果
https://10.10.101.35:6443

变量

变量名:KUBECONFIG  
变量值:C:\Users\<用户名>\.kube\config  

配置变量

准备配置文件

将集群的kubeconfig文件(如admin.conf)复制到C:\Users\<用户名>\.kube\config

~]# cat /etc/kubernetes/admin.conf
apiVersion: v1
clusters:
- cluster:certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJTC9Ia0c4WEc3cHN3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TlRBMU1qZ3dPREUwTlRSYUZ3MHpOVEExTWpZd09ERTVOVFJhTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUROcFljanplYUJmYUdnM3JMVFJEcWV5RHl3OHROUnN0YUoyVUYrcTZMN0p0UnVjQ3pqekJ4b66666666666666666666888888888888888888888888vTUIwR0ExVWREZ1FXQkJRQS9jV3hTQ1AvV2plRklsd0l6MmF6eG4xem1UQVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQjh2dW1aWDNGVQp2L3RmcDBTZG5pK0g1RG9FWGRNb2dtZ1NLTHhIK2pCd0dZazJVVnNJUS9yUE5Ja3Z4UGRSbnpSY0lkQ3RkNktZCjhJUVRDZVZDejVXM3AwM1RSVWtxcy8xUWxmOGkyL3ZuUXNaaTJRbmRzTkJKVDBhMllGWFQ4ZVBYeVV1MzJCR3YKVW44RkJvTkYwKzNBZzFpZldIOWhzYjhnZ3BsbVJ4S1FmOXpEaEJ5a0N5a0Z4d1NwdW9CWkYza3MzVUwzRUVpZQptZWZxK215YUVvNVlORXFUbFoyQ3FHV1lwS1RoNFRQVkZTYlh4eEZkYTJEYmxTcGR6Mmk0bysxNmlxNzlqa0tFCmtOcGdsWDQ0UG9aWkdNeFBuWTYrVlE5OG5YMFp4WWV4VmtBclJlMlJxV291QjlWbXhjWkFlS1pYVmk3bjJ5d20KcWVKVms4TFNtdFo3Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0Kserver: https://10.10.101.35:6443name: cluster.local
contexts:
- context:cluster: cluster.localuser: kubernetes-adminname: kubernetes-admin@cluster.local
current-context: kubernetes-admin@cluster.local
kind: Config
preferences: {}
users:
- name: kubernetes-adminuser:client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZ666666666666666666666666666666777777777777778888888888888888888R0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDeGRSYTYKcnhRUkpmY0xXYVNIZ3NKbzBnOGNYMFp0eERxeG1pL0t2U2J6UzdSV25iblBsUDV4aTlWRkdVcGZVbSt4MktnQgp5cVVhbXpPM3BUcm01SmJuTEdhN2VQVVdWYXdWSUh2V0puN3FHd2NwK2lyVTVaMGMzWjUvc3FXaEZoTnBxVHlkCktESjIwcDFyQy9yWGxPcDR1Ry9kQkhSQ3hWaloxQitWcEd1MjFwMWU4dGhNeE5uRkNwaGFUV3VaVkc4cGVWdkEKRlJTMUdoM3p6emJOTFU3L3lHVFZHelVpUFhKOTVYNSs3WW10SHFkc3dCYjZiQmJ1234567890BHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUIvYlZLWDIrTGE0NnF6czNlOTNXME1WYXBqClNlcmdiSjR3SXJvTlBwSW03QUp6dWREdjlQL0xYRm1xeUppS1QxQVhuWmpVZWhuanVrMFhSWWI4QldOT1VYdW8KbWc0RkdBUUFoMmpzVTVjSHFrVUNUaVBmTVJO6666666666666666666666666666666666666666666666666666666666666CZ0xQQlR2T3RiMWlQZThlOXlYdDFoNzVDCkRoM0Q5Q3M4UXlLOGoyRnk1QjZjVW5CWFdEL3YzdWpoQ3Jpc2o3YjVaNk1uNWFNeVJDY3FlOTIzc21wSWJkdmcKWWU3VWI5dUU5ZGs4REhzOE52UXFnZ0ZQRnNlYnFKSGZ1bEJ0eTY2bEtReXR0SWlpcEhab1ZqMytnSzkwCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0Kclient-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSB888888888888888888888888888Bc1hVV3VxOFVFU1gzQzFta2g0TENhTklQSEY5R2JjUTZzWm92eXIwbTgwdTBWcDI1Cno1VCtjWXZWUlJsS1gxSnZzZGlvQWNxbEdwc3p0NlU2NXVTVzV5eG11M2oxRmxXc0ZTQjcxaVorNmhzSEtmb3EKMU9XZEhOMmVmN0tsb1JZVGFhazhuU2d5ZHRLZGF3djYxNVRxZUxodjNRUjBRc1ZZMmRRZmxhUnJ1234567890Vc0eDAwODAzOE1KeG0wbVdIZ3VlSVJFcWRkNTFvMHNPTm0KQWUrcThhV1dGZjVONHFjdmFDN3pPTmlOdmIzYXVOVzQwMVRONWZ1QXBUMm15eElwVWFvYTV6MGlPTHAwNVhRMQpjUW53YjVSUHhKaXNBVFhhTEdPNm16UVRhRHd2SWpZWDFWRVpuTTlILzY0N2IyRG96dkR4T2VkREFvYU4zNmpNCkZEN1E2aWE3VmhCb0MzaVViT25GTGRkbGhndjZ4TktFbjhlVHdJTWpTSGw123456789000000000000000011111111111111111111111111111111111mh4VFNoa1FLQmdHNGJpcndOYTIrZXYxSVJKN0ZnVjkwdk9mVUVKLzNobk8zK2JTajkKMVAvQ2tIUGVqY2dhY2pCREdQVEg1VnFzb2hreFN3TGQ5WnFUYTZldFJKdDNWUzMwZ2h5YkVJVUlkNzBqSlhScwpBUFc2anpWZ3U1czE0cHh1b1ZhSzU3T1AxRFJWVitSRGlvZDM3MkJMZ01qeXRzTW1wYXR0OURzeUVEbEZRWG54CkhHM2hBb0dCQUlzWEhDVmNoL0ltNWI2SnlHaXlqMlN3T0pVaXIvU25wN0kwVm1rbDVFNFIxL1drQmExL0hSNUEKNlhIWFJBTDhuU2ExUXBpVGVWc010QjY1dnY1cFJTN1ZQWTVhUi9vM0Jnb1VUKzFpT1MxS2U0VllHdjBZWktFcwpyOTFlc0t4aFAwbWZDM1hXRGNLRnViYVk4ZUdOek9KM1dmT0dla1UzSHp2N21QZm5USzdHCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==

启动客户端

开起ktctl.exe 服务

C:\Users\shuaige\Desktop\离线包\k8s>ktctl.exe connect
6:35PM INF Using cluster context kubernetes-admin@cluster.local (cluster.local)
6:35PM INF KtConnect 0.3.7 start at 144 (windows amd64)
6:35PM INF Fetching cluster time ...
6:35PM INF Fetching cluster time ...
6:35PM INF Fetching cluster time ...
6:35PM INF Fetching cluster time ...
6:35PM INF Fetching cluster time ...
6:35PM INF Fetching cluster time ...

这时k8s服务端会运行一个pod容器

]# kubectl get pods -o wide
NAME                             READY   STATUS             RESTARTS        AGE    IP             NODE                                      NOMINATED NODE   READINESS GATES
kt-rectifier-56666             0/1     ImagePullBackOff   0               69s    10.233.109.5   test-010010101027  <none>           <none>

拉取镜像失败,在pod中找到配置的镜像地址,修改成私有仓库地址,查看pod已经running运行了。

kubectl edit pod kt-rectifier-czhqm# 大概在27行的位置27     image: registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-shadow:v0.3.7# 修改成私有地址27     image: harbor.aliyun.com/repo/kt-connect-shadow:v0.3.7NAME                     READY   STATUS    RESTARTS   AGE
pod/kt-rectifier-6666   1/1     Running   0          11m

运行命令启动工具

# 运行命令
ktctl connect -i harbor.aliyun.cn/repo/kt-connect-shadow:v0.3.7# 返回结果
6:54PM INF Using cluster context kubernetes-admin@cluster.local (cluster.local)
6:54PM INF KtConnect 0.3.7 start at 14048 (windows amd64)
6:54PM INF Fetching cluster time ...
6:54PM INF Using tun2socks mode
6:54PM INF Successful create config map kt-connect-shadow-froxd
6:54PM INF Deploying shadow pod kt-connect-shadow-froxd in namespace default
6:54PM INF Waiting for pod kt-connect-shadow-froxd ...
6:55PM INF Pod kt-connect-shadow-froxd is ready
6:55PM INF Port forward local:13003 -> pod kt-connect-shadow-froxd:22 established
6:55PM INF Socks proxy established
2025/06/05 18:55:04 Installing driver 0.14
2025/06/05 18:55:04 Extracting driver
2025/06/05 18:55:04 Installing driver
2025/06/05 18:55:05 Creating adapter
6:55PM INF Tun device KtConnectTunnel is ready
6:55PM INF Adding route to 10.233.0.0/16
6:55PM INF Adding route to 10.10.101.128/25
6:55PM INF Adding route to 10.10.101.64/26
6:55PM INF Adding route to 10.10.101.0/27
6:55PM INF Adding route to 10.10.101.48/28
6:55PM INF Adding route to 10.10.101.40/29
6:55PM INF Adding route to 10.10.101.36/30
6:55PM INF Adding route to 10.10.101.32/31
6:55PM INF Adding route to 10.10.101.34/32

查看现有集群的中的业务

 kubectl get pods -o wide# 查看返回
nginx-6474b87897-6666          1/1     Running   0               86m     10.233.109.4   test-010010101027-security-cm5   <none>           <none>

验证是否连接集群成功

默认如果不用这个工具连接集群,集群内资源是无法访问的,无法做到本地和集群内业务程序之间联调测试 ,这个地址是 10.233.109.4 k8s内网的虚拟IP地址。

现在连接工具后,可以在本地电脑直接访问到K8s内网的虚拟IP地址,等于和k8s网络环境是一致的。

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

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

相关文章

RFID推动新能源汽车零部件生产系统管理应用案例

RFID推动新能源汽车零部件生产系统管理应用案例 一、项目背景 新能源汽车零部件场景 在新能源汽车零部件生产领域&#xff0c;电子冷却水泵等关键部件的装配溯源需求日益增长。传统 RFID 溯源方案采用 “网关 RFID 读写头” 模式&#xff0c;存在单点位单独头溯源、网关布线…

C#封装HttpClient:HTTP请求处理最佳实践

C#封装HttpClient&#xff1a;HTTP请求处理最佳实践 在现代的.NET应用程序开发中&#xff0c;与外部服务进行HTTP通信是一项常见需求。HttpClient作为.NET框架中处理HTTP请求的核心组件&#xff0c;为我们提供了强大而灵活的API。然而&#xff0c;直接使用原生的HttpClient可能…

【Redis/2】核心特性、应用场景与安装配置

文章目录 一、初识 Redis1.1 Redis 概述1. Redis 简介2. Redis 的发展历程 1.2 Redis 核心特性1. 高性能2. 丰富的数据类型3. 持久化4. 原子操作5. 主从复制6. 高可用性与分布式7. 内存存储与低延迟8. 灵活的过期策略9. 事务支持10. 简单的 API总结 1.3 Redis 应用场景Redis 适…

AI大模型在测试领域应用案例拆解:AI赋能的软件测试效能跃迁的四大核心引擎(顺丰科技)

导语 5月份QECon深圳大会已经结束&#xff0c;继续更新一下案例拆解&#xff0c;本期是来自顺丰科技。 文末附完整版材料获取方式。 首先来看一下这个案例的核心内容&#xff0c;涵盖了测四用例设计、CI/CD辅助、测试执行、监控预警四大方面&#xff0c;也是算大家比较熟悉的…

【HTML】HTML 与 CSS 基础教程

作为 Java 工程师&#xff0c;掌握 HTML 和 CSS 也是需要的&#xff0c;它能让你高效与前端团队协作、调试页面元素&#xff0c;甚至独立完成简单页面开发。本文将用最简洁的方式带你掌握核心概念。 一、HTML&#xff0c;网页骨架搭建 核心概念&#xff1a;HTML通过标签定义内…

Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot

Redis 集群报错 CROSSSLOT Keys in request dont hash to the same slot 的原因及解决方案 1. 错误原因 在 Redis 集群模式下&#xff0c;数据根据 哈希槽&#xff08;Slot&#xff09; 分散存储在不同的节点上&#xff08;默认 16384 个槽&#xff09;。当执行涉及多个 key …

.Net Framework 4/C# LINQ*

一、什么是 LINQ LINQ 是一种在 C# 等编程语言中集成的查询功能&#xff0c;它允许开发者使用编程语言本身的语法进行数据查询&#xff0c;而不是嵌入式的字符串 SQL 语句。LINQ 查询可以应用于对象、XML 和数据库等多种数据源。 二、LINQ 查询的基本构成 LINQ 查询通常包含以…

【docker】容器技术如何改变软件开发与部署格局

在当今数字化时代&#xff0c;软件开发与部署的效率和灵活性至关重要。就像古人云&#xff1a;“工欲善其事&#xff0c;必先利其器。”Docker 作为一款强大的容器技术&#xff0c;正如同软件开发领域的一把利器&#xff0c;极大地改变了应用的开发、交付和运行方式。本文将深入…

MySQL的优化部分介绍

1、定期维护表&#xff1a; ANALYZE TABLE t_order_package; OPTIMIZE TABLE t_order_package; -- 每月在低峰期执行 2、数据归档&#xff08;如果create_time较旧&#xff09;&#xff1a; -- 归档旧数据到历史表 INSERT INTO t_order_package_archive SELECT * FROM t_or…

Go基本语法——go语言中的四种变量定义方法

前言 在go语言中&#xff0c;定义一个变量有四种方式&#xff0c;本文单从语法的层面来介绍这几种方式 单变量定义方法 1.var 变量名 类型&#xff0c;不进行初始化 例如&#xff0c;定义一个变量a后为其赋值&#xff0c;并且打印其值&#xff0c;运行结果如下 //1.不进行…

C++ 对 C 的兼容性

C 对 C 语言的兼容性是有限且有条件的&#xff0c;并非完全无缝兼容。这种兼容性主要体现在语法、标准库和运行时特性上&#xff0c;但存在一些关键差异和不兼容点。以下是详细分析&#xff1a; 一、C 对 C 的兼容性表现 1. 语法兼容&#xff1a;大部分 C 代码可直接编译 基…

ES6 核心语法手册

ES6 核心语法手册 一、变量声明 关键字作用域是否可重定义是否可修改特性let块级作用域❌✅替代 var 的首选const块级作用域❌❌声明常量&#xff08;对象属性可修改&#xff09; // 示例 let name "Alice"; name "Bob"; // ✅const PI 3.14; // PI …

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架

1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…

gRPC协议

目录 1. gRPC协议介绍及构成 协议分层 协议关键字段 2. 示例&#xff1a;Greeter 服务 步骤1&#xff1a;定义 .proto 文件 步骤2&#xff1a;生成代码 3. Java代码示例 依赖配置&#xff08;Maven pom.xml&#xff09; 服务端实现 客户端实现 运行流程 关键机制 …

深度学习 w b

在深度学习中&#xff0c;权重 w 和 偏置 b 是神经网络的核心参数&#xff0c;它们的形态&#xff08;shape&#xff09;取决于网络结构和数据维度。以下是关于 w 和 b 的详细解析&#xff1a; 1. 数学表示与物理意义 权重 w&#xff1a; 连接神经元之间的强度&#xff0c;决定…

el-table 树形数据,子行数据可以异步加载

1、 <el-tableborder:header-cell-style"tableStyle?.headerCellStyle"ref"tableRef":data"tableData"row-key"id":default-expand-all"false" // 默认不展开所有树形节点:tree-props"{ children: children, hasC…

Vue中渲染函数的使用

Vue中渲染函数的使用 1. render函数2. h()的使用3. render函数和h函数的区分 vue中的渲染函数&#xff1a; 1.template2.render函数3.jsx -> js extension(jsx也是编译成render函数&#xff0c;可编程能力更强) 1. render函数 1.1. 认识h函数 1.1.1. Vue推荐在绝大多数情况…

【氮化镓】GaN HMETs器件物理失效分析进展

2021 年 5 月,南京大学的蔡晓龙等人在《Journal of Semiconductors》期刊发表了题为《Recent progress of physical failure analysis of GaN HEMTs》的文章,基于多种物理表征技术及大量研究成果,对 GaN HEMTs 的常见失效机制进行了系统分析。文中先介绍失效分析流程,包括使…

每日Prompt:治愈动漫插画

提示词 现代都市治愈动漫插画风格&#xff0c;现代女子&#xff0c;漂亮&#xff0c;长直发&#xff0c;20岁&#xff0c;豆沙唇&#xff0c;白皙&#xff0c;气质&#xff0c;清纯现代都市背景下&#xff0c;夕阳西下&#xff0c;一位穿着白色露脐短袖&#xff0c;粉色工装裤…

2025年牛客网秋招/社招高质量 Java 面试八股文整理

Java 面试 不论是校招还是社招都避免不了各种面试。笔试&#xff0c;如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的。关键在于理解企业的需求&#xff0c;明确自己的定位&#xff0c;以及掌握一定的应试技巧。 笔试部分&#xff0c;通常是对基础知识、…