diff --git a/教程/20250402-使用KtConnect实现本地Debug.md b/教程/20250402-使用KtConnect实现本地Debug.md index 3133cb1..6bbcaca 100644 --- a/教程/20250402-使用KtConnect实现本地Debug.md +++ b/教程/20250402-使用KtConnect实现本地Debug.md @@ -22,49 +22,88 @@ # 20250402-使用KtConnect实现本地Debug - -## 前置说明 -- 快速开始:https://github.com/alibaba/kt-connect/blob/master/docs/zh-cn/guide/quickstart.md +## 解决问题 +- 功能开发完成后无法快速测试验证的问题 +- Feign无法调用集群服务的问题 +- 发现BUG后无法本地DEBUG的问题 -## 使用 -### 下载 kt-connect +### 搭配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 ``` -### Mesh 服务 -用于将指定服务的部分流量重定向到本地。基本用法如下: +### 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 -```bash -ktctl mesh <目标服务名> --expose <本地端口>:<目标服务端口> -``` +### 3. 获取 KubeConfig +#### 方法一、找运维获取 +#### 方法二、通过kubesphere获取 +![](https://picture.texous.cn/blog/20250430145918327.png) -命令可选参数: - -``` ---mode value 实现流量重定向的路由方式,可选值为 "auto"(默认)和 "manual" ---expose value 指定目标服务的一个或多个端口,格式为`port`或`local:remote`,多个端口用逗号分隔,例如:7001,8080:80 ---versionMark value 指定本地服务路由的版本标签值,格式可以是 `<标签值>`,`<标签名>:` 或 `<标签名>:<标签值>` ---skipPortChecking 不必检查指定的本地端口是否有服务监听 ---routerImage value (仅用于auto模式)指定Router Pod使用的镜像地址 -``` - -关键参数说明: - -- `--mode`提供了两种服务重定向路由的方式。 - 默认的`auto`模式采用Router Pod实现HTTP请求的自动路由,无需额外配置服务网格组件,适用于集群中未部署服务网格的场景。 - `manual`模式仅将本地服务"混入"集群中,并打上特定的版本Label,开发者自行通过服务网格组件(如Istio)灵活配置路由规则。 -- `--expose`是一个必须的参数,它的值应当与目标Service的`port`属性值相同,若本地运行服务的端口与目标Service的`port`属性值不一致,则应当使用`<本地端口>:<目标Service端口>`的方式来指定。 -- `--versionMark`用于指定路由到本地的Header或Label名称和值。默认值为"version:\<随机生成值\>",可仅指定标签值,如`--versionMark demo`;可用标签名加冒号的格式仅指定标签名,如`--versionMark kt-mark:`;也可以同时指定标签的名称和值,如`--versionMark kt-mark:demo`。 - 在`auto`模式下,该值实际上是用于路由的Header。在`manual`模式下,该值为附加在通往本地服务的Shadow Pod上额外的Label。 - -#### 例子 -- KubeConfig 文件需要找运维拿 +### 4. 使本地服务可以使用serviceId访问服务 +### 4.1. 启动Connect服务 ```shell -.\ktctl.exe mesh <目标服务名> --namespace qifu --expose <本地端口>:<目标服务端口> --kubeconfig /env/.kube/KubeConfig +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配置 ``` ## 参考文档 -- https://www.cnblogs.com/zhangs1986/p/17003842.html \ No newline at end of file +- [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 \ No newline at end of file diff --git a/草稿/00-本地快捷指令.md b/草稿/00-本地快捷指令.md new file mode 100644 index 0000000..20972a3 --- /dev/null +++ b/草稿/00-本地快捷指令.md @@ -0,0 +1,27 @@ +## 本地快捷指令 +### KT 启动 +#### 查看集群信息 +```shell +#- 查看集群信息 +C:\Programs\Developer\ktctl_0.3.7\kubectl.exe cluster-info +``` + +#### 启动Connect +```shell +C:\Programs\Developer\ktctl_0.3.7\ktctl.exe connect --namespace qifu-develop --kubeconfig C:\Documents\Workspace\Env\.kube\kubeconfig.yaml +``` + +#### 启动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 +``` + +#### 资源清理 +```shell +C:\Programs\Developer\ktctl_0.3.7\ktctl.exe clean --namespace qifu-develop + +#- --dryRun 只打印要删除的Kubernetes资源名称,不删除资源 +#- --thresholdInMinus value 清理至少已失联超过多长时间的Kubernetes资源 (单位:分钟,默认值:15) +#- --localOnly 仅清理本地日志和还原本地路由/DNS配置 +``` \ No newline at end of file