keyfil/教程/20250402-使用KtConnect实现本地Debug.md

109 lines
4.4 KiB
Markdown
Raw Normal View History

2025-04-01 20:46:01 +08:00
<!-- Space: qifu -->
<!-- Parent: 后端技术&知识&规范 -->
<!-- Parent: 技术方案 -->
<!-- Parent: 基建 -->
<!-- Parent: 04-使用教程 -->
<!-- Title: 20250402-使用KtConnect实现本地Debug -->
<!-- Macro: :anchor\((.*)\):
Template: ac:anchor
Anchor: ${1} -->
<!-- Macro: \!\[.*\]\((.+)\)\<\!\-\- width=(.*) \-\-\>
Template: ac:image
Url: ${1}
Width: ${2} -->
<!-- Macro: \<\!\-\- :toc: \-\-\>
Template: ac:toc
Printable: 'false'
MinLevel: 2
MaxLevel: 4 -->
<!-- Include: 杂项/声明文件.md -->
<!-- :toc: -->
# 20250402-使用KtConnect实现本地Debug
## 解决问题
- 功能开发完成后无法快速测试验证的问题
- Feign无法调用集群服务的问题
- 发现BUG后无法本地DEBUG的问题
2025-04-01 20:46:01 +08:00
### 搭配ModHeader食用最佳
### 前置说明
- 实现本地服务远程调用feign集群服务只需要启动 `connect` 即可
- 对所有服务生效
- 实现集群流量分流到本地本地DEBUG只需要启动 `mesh` 即可
- 对单个服务生效,每个服务指令不一致
- 需要实现完整流程调用则需要启动 connect 和 mesh
## 快速使用
### 1. 下载 kt-connect
2025-04-01 20:46:01 +08:00
- 访问 release 页面https://github.com/alibaba/kt-connect/releases/tag/v0.3.7
- 或者直接使用wget下载
```shell
wget https://github.com/alibaba/kt-connect/releases/download/v0.3.7/ktctl_0.3.7_Windows_x86_64.zip
```
### 2. 下载 kubectl
- 官方下载链接https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/README.md
- 推荐版本https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.27.md#v1276
### 3. 获取 KubeConfig
#### 方法一、找运维获取
#### 方法二、通过kubesphere获取
![](https://picture.texous.cn/blog/20250430145918327.png)
2025-04-01 20:46:01 +08:00
### 4. 使本地服务可以使用serviceId访问服务
#### 4.1. 启动Connect服务
```shell
C:\Programs\Developer\ktctl_0.3.7\ktctl.exe connect --namespace qifu-develop --kubeconfig C:\Documents\Workspace\Env\.kube\kubeconfig.yaml
2025-04-01 20:46:01 +08:00
```
- 替换 `ktctl.exe` 路径
- 替换 `kubeconfig` 路径
2025-04-01 20:46:01 +08:00
### 5. 使集群请求可以转发到本地本地DEBUG
#### 5.1. 配置discovery配置为服务名
- 由于Nacos里面的服务最后基于ip访问因此集群内无法通过这种方式来访问本机注册的服务。
- 解决:添加 `spring.cloud.nacos.discovery.ip: ${spring.application.name}`
- 在discovery下注册指定ip为服务名这样pod在调ip时会走k8s的服务代理到对应的本机ip
2025-04-01 20:46:01 +08:00
#### 5.2. 启动本地服务
- 直接idea启动本地服务本地服务端口要和映射端口一致
#### 5.3. 启动Mesh服务
```shell
#- 启动mesh
C:\Programs\Developer\ktctl_0.3.7\ktctl.exe mesh qifu-saas-eg --namespace qifu-develop --expose 8933:8933 --versionMark ym-version:liuxiaohua --kubeconfig C:\Documents\Workspace\Env\.kube\kubeconfig.yaml
2025-04-01 20:46:01 +08:00
```
- 替换 `ktctl.exe` 路径
- 替换 `kubeconfig` 路径
- 替换 `qifu-saas-eg` 为自己的服务名
- 替换 `expose` 为自己服务的端口
- 替换 `--versionMark ym-version:liuxiaohua` 为自己想要自定义转发的请求头
#### 5.4. 打开浏览器配置ModHeader
##### 添加路由请求头
- 路由请求头要和 `--versionMark` 配置的一致
2025-04-01 20:46:01 +08:00
![](https://picture.texous.cn/blog/20250430151450020.png)
2025-04-01 20:46:01 +08:00
#### 5.5. 进行本地DEBUG和问题排查
2025-04-01 20:46:01 +08:00
### 6. 资源清理异常关闭或Mesh服务无法重新启动问题可选
- 正常停止 connect 和 mesh 会自动清理资源
- 异常停止资源清理
2025-04-01 20:46:01 +08:00
```shell
C:\Programs\Developer\ktctl_0.3.7\ktctl.exe clean --namespace qifu-develop
#- --dryRun 只打印要删除的Kubernetes资源名称不删除资源
#- --thresholdInMinus value 清理至少已失联超过多长时间的Kubernetes资源 (单位分钟默认值15)
#- --localOnly 仅清理本地日志和还原本地路由/DNS配置
2025-04-08 20:48:40 +08:00
```
## 参考文档
- [ktctl 快速使用文档](https://github.com/alibaba/kt-connect/blob/master/docs/zh-cn/guide/quickstart.md)
- [ktctl connect 文档](https://github.com/alibaba/kt-connect/blob/master/docs/zh-cn/cli/connect.md)
- [ktctl mesh 文档](https://github.com/alibaba/kt-connect/blob/master/docs/zh-cn/cli/mesh.md)
- [ktctl clean 文档](https://github.com/alibaba/kt-connect/blob/master/docs/zh-cn/cli/clean.md)
- 别的一些使用文档都可以在上面链接的文件夹中获取
- 一些启动问题参考https://www.cnblogs.com/zhangs1986/p/17003842.html