• kt-connect使用-k8s流量代理


    1.下载kt安装包

    地址: https://github.com/alibaba/kt-connect/releases

    2.下载k8s集群的config文件

    cd  /root/.kube
    下载服务器的`config`文件
    
    • 1
    • 2

    3.安装config文件

    1. 切换到用户目录C:\Users\yangx
    2. 创建.kube文件夹mkdir .kube
    3. 目录结构为C:\Users\yangx\.kube
    4. 把下载config文件移动到C:\Users\yangx\.kube

    4. 启动代理

    1. 解压压缩包
    2. 在当前目录执行 .\ktctl.exe connect
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qIT6bHZH-1668588594407)(C:\Users\yangx\AppData\Roaming\Typora\typora-user-images\image-20221116162427943.png)]

    这样代理就成功了

    5. 怎么代理流量

    5.1.将集群流量转发到本地

    KtConnect提供了两种能够让集群流量重定向到本地服务的命令,在使用场景上稍有不同。

    • Exchange:将集群指定服务的所有流量转向本地
    • Mesh:将集群指定服务的部分流量(按Header或Label规则)转向本地

    Exchange命令

    将集群里访问指定服务的所有请求拦截并转发到本地的指定端口。通常用于调试在测试环境里,调试位于业务调用链中间环节的特定服务。

    ┌──────────┐     ┌─ ── ── ──     ┌──────────┐
    │ ServiceA ├─┬─►x│ ServiceB │ ┌─►│ ServiceC │
    └──────────┘ │    ── ── ── ─┘ │  └──────────┘
             exchange             │
                 │   ┌──────────┐ │
                 └──►│ ServiceB'├─┘ (本地服务实例)
                     └──────────┘
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用ktctl exchange命令将先前部署到集群中的tomcat服务流量全部转到本地8080端口:

    $ ktctl exchange tomcat -n dev --expose 8080 
    
    • 1
    • tomcat:这里指的是k8s的service的名称

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RO03OqXk-1668588594408)(C:\Users\yangx\AppData\Roaming\Typora\typora-user-images\image-20221116162912619.png)]

    • -n dev:是指命名空间 dev

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TduSFooe-1668588594408)(C:\Users\yangx\AppData\Roaming\Typora\typora-user-images\image-20221116163026898.png)]
      当出现如下图,则表示成功

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HXV86BhB-1668588594408)(C:\Users\yangx\AppData\Roaming\Typora\typora-user-images\image-20221116163108615.png)]

    Mesh命令

    将集群里访问指定服务的部分请求拦截并转发到本地的指定端口。通常用于团队协作时,需要定向调试调用链中间位置的服务,又不希望影响其他开发者正常使用测试环境的场景。

    ┌──────────┐     ┌──────────┐    ┌──────────┐
    │ ServiceA ├─┬──►│ ServiceB │─┬─►│ ServiceC │
    └──────────┘ │   └──────────┘ │  └──────────┘
                mesh              │
                 │   ┌──────────┐ │
                 └──►│ ServiceB'├─┘ (本地服务实例)
                     └──────────┘
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Mesh命令有两种运行模式,默认的auto模式不需要额外的服务网格组件,能够直接实现HTTP请求的自动按需路由。

    ktctl mesh tomcat --expose 8080
    00:00AM INF KtConnect start at 
    ... ...
    --------------------------------------------------------------
     Now you can access your service by header 'VERSION: feo3x'
    --------------------------------------------------------------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    若请求包含Mesh命令输出的Header,则流量将自动被本地的服务实例接收。

    $ curl -H 'VERSION: feo3x' http://tomcat:8080
    
    • 1

    总结

    ktctl exchangektctl mesh命令的最大区别在于,前者会将原应用实例流量全部替换为由本地服务接收,而后者仅将包含指定Header的流量导流到本地,同时保证测试环境正常链路始终可用。

    5.2.将本地服务提供给其他开发者

    除了已经部署到集群的服务,在开发过程中,也可以利用KtConnect将本地服务快速"放"到集群,变成一个临时的服务,供其他开发者或集群中的其他服务使用。

    • Preview:将本地服务注册为集群里的Service
    • Forward:将集群服务映射到本地,结合Preview命令可实现开发者之间跨主机使用Localhost地址互访

    Preview命令

    将本地运行的服务实例注册到集群上。主要用于将本地开发中的服务提供给其他开发者进行联调和预览。

    使用ktctl preview命令将运行在本地8080端口的服务注册到测试集群,命名为tomcat-v2

    $ ktctl preview tomcat-v2 --expose 8080
    00:00AM INF KtConnect start at 
    ... ...
    ---------------------------------------------------------------
     Now you can access your local service in cluster by name 'tomcat-v2'
    ---------------------------------------------------------------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • tomcat-v2 是一个service

    现在集群里的服务就可以通过tomcat-v2名称来访问本地注册的服务实例了,其他开发者也可以在执行ktctl connect后,直接通过tomcat-v2服务名称来预览该服务的实时情况:

    $ curl http://tomcat-v2:8080
    kt-connect local v2
    
    • 1
    • 2

    Forward命令

    将任意IP或集群中的服务映射到本地的指定端口。用于在测试时,使用localhost地址便捷的访问集群中的特定IP或服务,典型场景是是访问其他开发者通过Preview命令注册的本地服务。

             ┌─────────────────────────────┐
          forward           |           preview
    ┌────────┴───────┐      |      ┌───────▼──────┐
    │ localhost:8080 │      |      │ local tomcat │
    └────────────────┘      |      └──────────────┘
          开发者 B           |           开发者 A
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    例如当一个开发者A运行了前述的Preview命令后,另一个开发者B可以使用ktctl forward命令将它映射到自己本地的6060端口。

    $ ktctl forward tomcat-v2 6060:8080
    00:00AM INF KtConnect start at 
    ... ...
    ---------------------------------------------------------------
     Now you can access port 8080 of service 'tomcat-v2' via 'localhost:6060'
    ---------------------------------------------------------------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    现在开发者B就可以使用localhost:6060地址访问到开发者A本地运行的Tomcat服务了。

    当映射的流量源是集群中的服务名时,其效果与kubectl port-forward命令相似,只是额外增加了断网自动重连的能力。

  • 相关阅读:
    35岁以后还能学软件测试吗?
    支持自动生成API文档 Apipost 真香
    在WINDOWS中硬件管理中即插即用的含义是什么
    mysql 常见锁的类型
    Java 高级特性の反射
    解决docker 容器状态 Exited (1)问题
    FlinkCDC 2.0
    解决visual studio Just-In-Time Debugger调试
    C_11微机原理
    Gitlab升级记录(12.10.0-13.0.6)
  • 原文地址:https://blog.csdn.net/zalu9810/article/details/127888568