进学阁

业精于勤荒于嬉,行成于思毁于随

0%

微服务上云后本地如何联调?

Kt Connect

Kt Connect是阿里巴巴开源的一款云原生协同开发测试解决方案,目前包含以下几个核心功能,参加官方文档https://alibaba.github.io/kt-connect

核心功能

  1. 本地直接访问Kubernetes集群内网

通过KtConnect可以直接连接Kubernetes集群内部网络,在不修改代码的情况下完成本地联调测试

  1. 本地解析Kubernetes服务内网域名

直接使用服务名解析服务Cluster IP,本地开发也能获得真正的云原生体验

  1. 重定向集群服务流量到本地

将集群中的流量转移到本地,使得集群中的服务无需额外配置即可访问本地服务

  1. 测试环境多人协作互不干扰

通过自动或手工设定流量规则,在不影响测试环境正常使用的情况下,仅将指定请求重定向到本地

  1. 支持Windows/MacOS/Linux开发环境

不同的操作系统,相同的使用方式,让所有开发者轻松共享Kubernetes网络互通的便利

Kt Connect 安装使用

下面我们以windows为例,介绍一下Kt Connect的安装使用。

1. 安装

1、下载kubectl并解压放入D盘

在此链接中下载kubectl的可执行文件 ,注意下载对应我们线上kubernetes版本的kubectl ,如果想要下载对应其它版本,可以修改上面链接将版本号改为对应的即可 。

下载KTConnect文件 ,解压到同一路径之下。

2、配置环境变量

将Kt Connect的解压目录D:\kube\添加到PATH环境变量中

3、执行kubectl version命令查看已安装的 kubectl 版本号

2. 连接配置

1、 从Kubernets master节点下载集群配置文件kubeconfig

此文件默认位置在master节点中的$HOME/.kube/config

2、将C盘当前用户根目录下创建.kube文件夹,并将集群配置文件kubeconfig拷贝到此处

3. 连接集群

现在我们想连接kubernetes集群中namespace为workbench的项目,可以按照如下操作进行

1、运行命令连接指定集群

#xx为指定项目命名空间

ktctl –namespace=workbench connect

当连接上指定namespace后,可以在kubesphere平台看到本地创建的容器

2、 当连接上以后就可以直接在本地访问云上的接口了

直接通过dns访问服务接口

使用postman调本地接口通过feign调用集群服务,有正常响应

4. 可能出现的问题

问题1.运行 ktctl –namespace=workbench connect 可能会出现hosts权限拒绝

解决方案

方法1:

修改C盘 C:\Windows\System32\drivers\etc\ 此路径下hosts文件权限

在 hosts文件上点击鼠标右键,在弹出的选项中,点击打开“属性” , 选中用户后,点击编辑,勾选上下方的“修改”和“写入”权限,完成后,点击右下角的“应用”,再重新运行命令。

方法2:

如果方法1不行,在本地新建一个记事本文件,将 hosts文件打开全选再复制进新建的记事本中,将记事本名修改成hosts替换进C:\Windows\System32\drivers\etc\路径下hosts文件,重新运行命令。

问题2.

ktctl –namespace=**** connect 可以正常连接,但是一直提示

使用ipconfig -all

检查hosts文件正常

有可能是集群中主机socat没有安装

1
yum install -y socat

安装完毕问题解决

KT Exchange

上面我们通过Kt Connect 模式可以在本地直接连上K8S网络,有时候我们还需要另外一种模式,即将远程服务流量打到本地,方便本地进行联调。

如下所示:我在本地启动了一个网关服务,现在想让线上的服务全部打到我本地,方便我在本地进行debug。这时候我们就需要使用Kt Exchange 模式。

1、首先我在本地启动服务,服务的端口需要跟K8S中需要代理对象的Service端口保持一致

2、使用ktctl exchange启动服务代理流量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
PS C:\Users\> ktctl exchange workbench-gateway-service --namespace workbench --expose 8088






2:05PM INF Using cluster context kubernetes-admin@cluster.local (cluster.local)
2:05PM INF KtConnect 0.3.7 start at 13508 (windows amd64)
2:06PM INF Fetching cluster time ...
2:06PM INF Fetching cluster time ...
2:06PM INF Using selector mode
2:06PM INF Service workbench-gateway-service locked
2:06PM INF Successful create config map workbench-gateway-service-kt-exchange-qefhw
2:06PM INF Deploying shadow pod workbench-gateway-service-kt-exchange-qefhw in namespace workbench
2:06PM INF Waiting for pod workbench-gateway-service-kt-exchange-qefhw ...
2:06PM INF Pod workbench-gateway-service-kt-exchange-qefhw is ready
2:06PM INF Forwarding pod workbench-gateway-service-kt-exchange-qefhw to local via port 8088
2:06PM INF Port forward local:60912 -> pod workbench-gateway-service-kt-exchange-qefhw:22 established
2:06PM INF Reverse tunnel 0.0.0.0:8088 -> 127.0.0.1:8088 established
2:06PM INF Service workbench-gateway-service unlocked
2:06PM INF ---------------------------------------------------------------
2:06PM INF Now all request to service 'workbench-gateway-service' will be redirected to local
2:06PM INF ---------------------------------------------------------------

这里的workbench-gateway-service指的是pod对应的service

端口也需要跟service的端口保持一致

启动完成后可以看到启动了一个exchange的服务,此时流量就会从K8S集群代理到本地来了。