首页 > 其他分享 >让远程成为本地

让远程成为本地

时间:2023-05-14 11:46:59浏览次数:37  
标签:成为 auth pig telepresence Telepresence 本地 拦截 远程

 

微服务后端开发的最大痛点之一就是调试困难,非常影响我们的开发效率。

如果我们想与其他微服务进行联动调试,则需要在本地环境中启动对应的微服务模块,这可能需要大量的配置和构建时间,同时也会占用我们本地很多资源,可能还会出现”带不动“的情况。

虽然说我们可以在测试服务器上进行调试,但整个流程也是比较漫长,提交代码 -> 触发CI/CD -> 等待构建成功,可能简单的 BUG 我们提交代码打个日志就能解决问题,当遇到复杂的 BUG 时通过这个方式在服务器上调试就非常难受了,太浪费时间了,提交 -> 等待,反反复复,始终没有本地开发工具直接调试的方便。

下面介绍的工具将远程和本地融为一体,让本地开发更加流畅。

Telepresence

Telepresence 是一个开源工具,用于在本地开发环境中模拟 Kubernetes 集群中的微服务,它允许开发人员在本地开发环境中运行和调试微服务,而不必担心环境的复杂性和配置困难。

 

简单来说 Telepresence 将 Kubernetes 集群中服务的流量代理到本地,Telepresence 主要有四个服务:

Telepresence Daemon: 本地的守护进程,用于集群通信和拦截流量。

Telepresence Traffic Manager: 集群中安装的流量管理器,代理所有相关的入站和出站流量,并跟踪主动拦截。

Telepresence Traffic Agent: 拦截流量的 sidecar 容器,会注入到工作负载的 POD 中。

Ambassador Cloud: SaaS 服务,结合 Telepresence 一起使用,主要是生成预览 URL 和一些增值服务。

全局流量拦截

全局流量拦截是将 Orders 的所有流量都拦截到我们本地开发机上,如下图。

 

个人流量拦截

个人流量拦截允许选择性地拦截服务的部分流量,而不会干扰其余流量。这使我们可以与团队中的其他人共享一个集群,而不会干扰他们的工作。每个开发人员都可以只针对他们的请求拦截 Orders 服务,同时共享开发环境的其余部分。

个人拦截需要配合 Ambassador Cloud 使用,这是一项收费服务,免费用户可以最多拦截 3 个服务。

 

结合 Telepresence 开发调试 Rainbond 上的微服务

  • 基于主机安装 Rainbond 或基于 Helm 安装 Rainbond。

安装 Telepresence

MacOS:

# Intel
brew install datawire/blackbird/telepresence

# M1
brew install datawire/blackbird/telepresence-arm64
复制代码

Windows:

# 使用管理员身份打开 Powershell

# 下载压缩包
Invoke-WebRequest https://app.getambassador.io/download/tel2/windows/amd64/latest/telepresence.zip -OutFile telepresence.zip

# 解压缩包
Expand-Archive -Path telepresence.zip -DestinationPath telepresenceInstaller/telepresence
Remove-Item 'telepresence.zip'
cd telepresenceInstaller/telepresence

# 安装
powershell.exe -ExecutionPolicy bypass -c " . '.\install-telepresence.ps1';"
复制代码

安装 Telepresence 流量管理器到集群中

可以使用 Telepresence 快速安装 Traffic Manager,本地需要有 kubeconfig 文件 ~/.kube/config。

$ telepresence helm install
...
Traffic Manager installed successfully
复制代码

或者在 Kubernetes 集群中使用 Helm 安装 Traffic Manager。

本地连接远程服务

本地使用 telepresence connect 连接远程 Kubernetes API Server,本地需要有 kubeconfig 文件 ~/.kube/config

$ telepresence connect
connected to context <your-context>
复制代码

在 Rainbond 上快速部署 Pig 微服务应用

通过 Rainbond 开源应用商店快速部署 Pig 微服务应用,部署后如下图

 

后面会以 pig-auth 这个服务为例,演示本地开发调试的流程,这里需要做一些小改动:

  1. 从应用商店安装的应用默认 Workload 是字符串,需要修改 Workload 为易于查看的,这里以 pig-auth 为例,进入组件中编辑组件名称,修改组件英文名称为 auth
  2. 简单来说 telepresence 的工作原理就是代理 k8s service,默认 gateway 到 auth 是使用的 nacos 做的负载均衡,这样的话 telepresence 是无法拦截到流量的,我们需要修改 gateway 配置使用 k8s service 做负载均衡。
  3. 打开 pig-register 组件的 8848 对外端口,访问 nacos,修改 pig-gateway-dev.yml 的 spring.cloud.gateway.routes.uri: http://gr795b69:3000 ,gr795b69:3000 通过 pig-auth 组件内的端口访问地址获取。
  4. 如果本地只启动一个 pig-auth 服务,pig-auth 需要连接 pig-register 和 redis,那么就需要将这俩服务的对外端口打开,并修改配置文件让本地的 pig-auth 服务可以连接远程到 pig-register 和 redis。

在本地调试 auth 服务

使用 IDEA 或 VScode 在本地启动 pig-auth 服务。

在本地使用 telepresence 拦截 pig-auth 流量,命令如下:

$ telepresence intercept <workload> --port <local-port>:<service port name> -n <namespace>
复制代码

命令拆解:

# <workload>
# 需要拦截流量的服务 workload
$ kubectl get deploy -n zq
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
pig-auth       1/1     1            1           146m

# <local-port> 本地端口

# <service port name>
# 需要拦截流量的服务的 service port name
$ kubectl get svc gr795b69 -n zq -o yaml
...
  ports:
  - name: http-3000
    port: 3000
    protocol: TCP
    targetPort: 3000
...

# <namespace> 命名空间
复制代码

最终命令:

$ telepresence intercept pig-auth --port 3000:http-3000 -n zq
Using Deployment pig-auth
intercepted
   Intercept name         : pig-auth-zq
   State                  : ACTIVE
   Workload kind          : Deployment
   Destination            : 127.0.0.1:3000
   Service Port Identifier: http-3000
   Volume Mount Error     : sshfs is not installed on your local machine
   Intercepting           : all TCP requests
复制代码

我们在本地给退出登陆这块逻辑打上断点,然后通过线上的前端退出登陆,打到我们本地 IDEA上,整体效果如下:

 

最后

Telepresence 可以帮助我们简化本地开发流程,同时保证代码的正确性和可靠性。还能使我们在集群中轻松调试和测试代码,提高开发效率。结合 Rainbond 的部署简化,从开发到部署都非常的简单,让我们专注于代码编写。

标签:成为,auth,pig,telepresence,Telepresence,本地,拦截,远程
From: https://www.cnblogs.com/IT-Evan/p/17181896.html

相关文章

  • 空压机控制程序(普乐特) 空压机远程控制 1.通过西门子200s
    空压机控制程序(普乐特)空压机远程控制1.通过西门子200smartPLC通讯两台普乐特空压机;2.MAM880系列(含MAM-KY系列,MAM-220系列)空压机都可以用;3.通过RS485通讯,每台空压机只需要引一根2芯屏蔽线;4.可以中控室(远程)看空压机各项参数,和操作启停空压机,无需到现场操作,更直接,方便,安全;5.P......
  • putty 中 设置免密登录远程服务器
     001、在远程服务器终端生成公钥和私钥[root@PC1~]#ssh-keygen-trsa##执行该命令Generatingpublic/privatersakeypair.Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):##回车Createddirectory'/root/.ssh'.Enterpassphrase(......
  • Bilibili-XMLSubtitle-to-ASS可视化Bilibili本地视频XML弹幕转换ASS字幕转换器:新增自
    可视化Bilibili本地视频XML弹幕转换ASS字幕转换器一个可视化,打开即用的将B站弹幕转换为本地播放器可识别的ASS格式字幕的工具。另外这个工具还有一个妙用,如果你想看一部曾经在B站上存在过但现在下架了的电视剧/电影的弹幕,用这个工具也能多多少少帮你做到这一点,具体方式请往下看......
  • Feign远程调用丢失请求头的问题
    前言:我们在写服务端项目的时候,总会限制对某些资源的访问,最常见的就是要求用户先登录才能访问资源,当用户登录后就会将此次会话信息保存进session,同时返回给浏览器指定的cookie键值,下次浏览器再次访问,请求头中就会携带这个cookie,我们也以次来识别用户的登录状态,做出正确响应。问......
  • 西门子1200与欧姆龙E5cc温控器 远程+本地双重控制通讯程序
    西门子1200与欧姆龙E5cc温控器远程+本地双重控制通讯程序功能:实现西门子1200PLC对欧姆龙E5cc温控器进行485通讯控制,在触摸屏上设定温度,读取温度,也可以在温控器本体设定温度。达到双重控制程序采用轮询方式,有通讯故障后再恢复功能,也可以后续根据需要在此基础上扩充台数......
  • ubuntu20设置ssh远程连接
    1.安装openssh-server打开终端安装openssh-server软件包:sudoaptupdate#更新包sudoaptinstallopenssh-server#安装openssh-server2.查看ssh状态安装完成后,ssh服务默认启动了,可以通过下面的命令检查服务运行状态:sudosystemctlstatusssh3.防火墙开启ssh端口U......
  • ubuntu 远程链接
    一、连接远程服务器sudoapt-getupdatesudoapt-getinstallopenssh-serversudops-e|grepssh#检查是否安装成功,如果正确启动,命令行中会显示sshdsudoapt-getinstallputtysudoputty#启动putty二、文件传输sudoapt-getinstallfilezillafilezilla#启动Tip......
  • Qt推流程序(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)可在网页和播放器远
    一、前言说明推流直播就是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号从手机端,电脑端,摄影机端打包传到服务器的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验比较糟糕。主流推送协议有RTMP、......
  • 三菱FX3U 485ADP与4台欧姆龙E5cc温控器远程+本地通讯
    三菱FX3U485ADP与4台欧姆龙E5cc温控器远程+本地通讯程序功能:通过三菱fx3u485ADP-MB板对4台欧姆龙E5cc温控器进行modbus通讯,可以实现温度在触摸屏上设置,也可以在温控器本机上设定,实现远程和现场双向设定控制,方便操作。同时实际温度读取配件:三菱fx3u485ADP-mb,三菱fx3u485BD板,昆......
  • 实验六-Salt本地pojie实验
    【实验目的】了解Salt型密码的加密机制,学会使用本地密码pojie工具来pojieSalt型密码,了解pojie密码原理。【知识点】Salt,密码pojie【实验原理】1.Salt概念在密码保护技术中,salt是用来修改口令散列的随机数据串。可将salt加入散列,即使系统的另一用户也选用了同一口令,也可通过唯......