keyfil/教程/20250402-使用KtConnect实现本地Debug.md
liuxiaohua 8e77b2f75d
All checks were successful
Publish to Confluence / confluence (push) Successful in 1m0s
[2025-04-30] 添加本地DEBUG教程
2025-04-30 15:34:50 +08:00

109 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 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的问题
### 搭配ModHeader食用最佳
### 前置说明
- 实现本地服务远程调用feign集群服务只需要启动 `connect` 即可
- 对所有服务生效
- 实现集群流量分流到本地本地DEBUG只需要启动 `mesh` 即可
- 对单个服务生效,每个服务指令不一致
- 需要实现完整流程调用则需要启动 connect 和 mesh
## 快速使用
### 1. 下载 kt-connect
- 访问 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)
### 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
```
- 替换 `ktctl.exe` 路径
- 替换 `kubeconfig` 路径
### 5. 使集群请求可以转发到本地本地DEBUG
#### 5.1. 配置discovery配置为服务名
- 由于Nacos里面的服务最后基于ip访问因此集群内无法通过这种方式来访问本机注册的服务。
- 解决:添加 `spring.cloud.nacos.discovery.ip: ${spring.application.name}`
- 在discovery下注册指定ip为服务名这样pod在调ip时会走k8s的服务代理到对应的本机ip
#### 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
```
- 替换 `ktctl.exe` 路径
- 替换 `kubeconfig` 路径
- 替换 `qifu-saas-eg` 为自己的服务名
- 替换 `expose` 为自己服务的端口
- 替换 `--versionMark ym-version:liuxiaohua` 为自己想要自定义转发的请求头
#### 5.4. 打开浏览器配置ModHeader
##### 添加路由请求头
- 路由请求头要和 `--versionMark` 配置的一致
![](https://picture.texous.cn/blog/20250430151450020.png)
#### 5.5. 进行本地DEBUG和问题排查
### 6. 资源清理异常关闭或Mesh服务无法重新启动问题可选
- 正常停止 connect 和 mesh 会自动清理资源
- 异常停止资源清理
```shell
C:\Programs\Developer\ktctl_0.3.7\ktctl.exe clean --namespace qifu-develop
#- --dryRun 只打印要删除的Kubernetes资源名称不删除资源
#- --thresholdInMinus value 清理至少已失联超过多长时间的Kubernetes资源 (单位分钟默认值15)
#- --localOnly 仅清理本地日志和还原本地路由/DNS配置
```
## 参考文档
- [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