Telepresence安装调试K8s微服务

前言

  • 项目开发使用的是微服务,部署到k8s上了,出问题了只能看日志,看到k8s官方推荐的telepresence,可以将部分或者全部流量转发到本地,很是好奇准备尝试一番。
  • 我是本地创建一个拦截,然后测试服的流量被导到本地,本地可以进行调试,实时改代码等操作,再将流程转发到测试服(都是telepresence实现的)

使用环境

  • 服务器:ubuntu搭建的k8s版本1.27
  • 本地系统: windows 11
  • 开发软件: goland
  • 调试服务:微服务服务端

安装

本地连接集群

下载kubectl

获取集群配置文件

  • 要是不知道集群配置文件,可以先导出集群配置文件
bash 复制代码
(Get-Content $HOME\.kube\config)|Foreach-Object {$_ -replace ("apiserver.cluster.local","172.16.xx.xx")}|Out-File $HOME\.kube\config
  • 将k8s集群的配置文件拷贝到本地
bash 复制代码
scp root@172.16.xxx.xx:/root/.kube/config $HOME\.kube

telepresence配置

安装telepresence

  • 可以参考官网的教程进行安装telepresence官网安装教程
  • 可以下载msi安装包,也可以使用powershell 安装,我用的是power安装
bash 复制代码
# To install Telepresence, run the following commands
# from PowerShell as Administrator.

# 1. Download the latest windows zip containing telepresence.exe and its dependencies (~50 MB):
Invoke-WebRequest https://app.getambassador.io/download/tel2/windows/amd64/latest/telepresence.zip -OutFile telepresence.zip

# 2. Unzip the telepresence.zip file to the desired directory, then remove the zip file:
Expand-Archive -Path telepresence.zip -DestinationPath telepresenceInstaller/telepresence
Remove-Item 'telepresence.zip'
cd telepresenceInstaller/telepresence

# 3. Run the install-telepresence.ps1 to install telepresence's dependencies. It will install telepresence to
# C:\telepresence by default, but you can specify a custom path by passing in -Path C:\my\custom\path
powershell.exe -ExecutionPolicy bypass -c " . '.\install-telepresence.ps1';"

# 4. Remove the unzipped directory:
cd ../..
Remove-Item telepresenceInstaller -Recurse -Confirm:$false -Force

# 5. Telepresence is now installed and you can use telepresence commands in PowerShell.

拷贝kubectl

  • 将kubectl 拷贝到telepresence的程序目录也就是C:\telepresence和telepresence.exe放一起

连接

  • 连接可以直接连接,也可以指定集群的配置文件路径
bash 复制代码
telepresence connect --kubeconfig=C:\Users\user053\.kube\config
  • 这个连接会跳转telepresence的官网ambassador,需要注册登录,我第一次注册的时候不管点击哪个github 还是docker等授权没有反应,过几天就可以了,不知道是不是官网的问题,这个必须进行的
  • 登录之后回到命令行,使用 telepresence status 看看状态,文章最下面的附录有常用的telepresence命令

创建拦截

  • 新版的telepresence链接和创建拦截的时候不支持指定命名空间,你当前是哪个命名空间就连接到哪个
  • 需要连接其他命名空间,要在本地使用kubectl 切换命名空间,再连接
bash 复制代码
telepresence intercept server-name --port 20006:20006
  • 创建拦截之后可以使用telepresence list查看连接状态,也可以去官网查看
  • k8s对应的容器也会自动创建监听容器

goland添加拦截

  • 在goland中添加拦截,然后debug启动,k8s的流量就会转发到本地,再发回测试服
  • 有关goland的其他说明见附录

附录

telepresence常用命令

  • 查看状态
bash 复制代码
telepresence status
  • 查看服务列表 -n可以指定命名空间,不加就是默认当前的命名空间
bash 复制代码
telepresence list -n 
  • 创建拦截,拦截的服务名称是telepresence list查看到的自己服务的名称,端口是20005是本地监听的端口,20006是服务的端口
bash 复制代码
telepresence intercept server-name --port 20005:20006
  • 断开拦截
bash 复制代码
telepresence leave server-name
  • 断开telepresence连接
bash 复制代码
telepresence quit

goland插件telepresence

  • goland是有一个telepresence插件的可以查看集群服务情况和创建拦截,但是它默认会创建header头,如果header头不会不会转发(这个是个人指定转发部分流量功能),我把header头去掉,就无法创建拦截,所以我目前都是命令行创建的拦截
  • 先去plugin安装telepresence,然后在view->tools->telepresence
  • 配置telepresence路径
  • 创建拦截
  • 个人指定拦截这个收费的,初创可以试用,我用的是global全局拦截,全局拦截我不添加header创建按钮是不可点击的,我不想添加header 所以我用命令创建的,

一些异常情况

  • 如果遇到了拦截创建成功了,本地服务也启动了,查看状态也正常,但是就是不转发,这时候可以重启容器或者删除ambassador创建的容器tel-agent-init和traffic-agent再重新创建拦截
  • 创建拦截容器可能探针报错# : can't stat '/tmp/agent/ready',这个可以不用管
相关推荐
舒一笑11 分钟前
如何讲解es中的倒排索引我是一个小白给我解释
后端·elasticsearch
showyoui30 分钟前
深入Go语言之slice:不只是动态数组
后端·golang·slice·切片
Jackson_Mseven39 分钟前
🥷 前端老六上线了:登录成功后,我到底是怎么“一直在线”的?
前端·后端·架构
CloudWeGo1 小时前
Volo-HTTP 0.4.0发布:正式支持 HTTP/2,客户端易用性大幅提升!
后端·http·github
Java中文社群1 小时前
面试官:谈谈你AI项目的具体实现?
java·后端·面试
java_强哥2 小时前
Spring Boot启动原理:从main方法到内嵌Tomcat的全过程
spring boot·后端·tomcat
一_个前端2 小时前
Mac系统安装Conda
后端
一_个前端2 小时前
Conda 安装pip依赖时报错No matching distribution found for xxx==6.2.3
后端
李剑一2 小时前
上传三个参数,两个接收正常,一个死活都是null?
spring boot·后端
何中应2 小时前
Maven项目没有Maven工具,IDEA没有识别到该项目是Maven项目怎么办?
java·后端·maven·intellij-idea