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

4.4 KiB
Raw Blame History

20250402-使用KtConnect实现本地Debug

解决问题

  • 功能开发完成后无法快速测试验证的问题
  • Feign无法调用集群服务的问题
  • 发现BUG后无法本地DEBUG的问题

搭配ModHeader食用最佳

前置说明

  • 实现本地服务远程调用feign集群服务只需要启动 connect 即可
    • 对所有服务生效
  • 实现集群流量分流到本地本地DEBUG只需要启动 mesh 即可
    • 对单个服务生效,每个服务指令不一致
  • 需要实现完整流程调用则需要启动 connect 和 mesh

快速使用

1. 下载 kt-connect

wget https://github.com/alibaba/kt-connect/releases/download/v0.3.7/ktctl_0.3.7_Windows_x86_64.zip

2. 下载 kubectl

3. 获取 KubeConfig

方法一、找运维获取

方法二、通过kubesphere获取

4. 使本地服务可以使用serviceId访问服务

4.1. 启动Connect服务

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服务

#- 启动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 配置的一致

5.5. 进行本地DEBUG和问题排查

6. 资源清理异常关闭或Mesh服务无法重新启动问题可选

  • 正常停止 connect 和 mesh 会自动清理资源
  • 异常停止资源清理
C:\Programs\Developer\ktctl_0.3.7\ktctl.exe clean --namespace qifu-develop

#- --dryRun                  只打印要删除的Kubernetes资源名称不删除资源
#- --thresholdInMinus value  清理至少已失联超过多长时间的Kubernetes资源 (单位分钟默认值15)
#- --localOnly               仅清理本地日志和还原本地路由/DNS配置

参考文档