概述

使用k8s部署微服务,本地开发调试是一个难题。网上的帖子较少,并且大多都是复制黏贴。今天实践了一下使用Telepresence实现本地调试,分享出来希望能帮助更多的开发者。

借助Telepresence实现以下:

  1. 本地服务可以访问k8s集群内的服务
  2. 别人访问k8s集群内的服务,请求可以转发到我本地,从而能够debug

环境

  1. 本地是ubuntu,需要安装kubectl和Telepresence
  2. 远程有一个k8s集群,团队其他人也用该集群,大家一起开发联调

后面也会尝试在window下实践一番并分享给大家。

安装kubectl

参考官方文档:https://kubernetes.io/zh/docs/tasks/tools/

我本地环境是ubuntu,使用apt方式安装:

sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

安装Telepresence

参考:https://www.telepresence.io/reference/install

curl -sO https://packagecloud.io/install/repositories/datawireio/telepresence/script.deb.sh
sudo env os=ubuntu dist=xenial bash script.deb.sh
sudo apt install --no-install-recommends telepresence
rm script.deb.sh

使用步骤

一、修改本地kube config

本地已经安装了kubectl,kubectl这个工具本质上是向k8s集群的api-server发送http请求

我们需要从远程k8s集群中复制一份~/.kube/config到本地相同目录中,将server改为远程集群的ip,本地的kubectl就能够访问到远程集群。

因为Telepresence需要借助kubectl来在远程集群中启动代理pod来实现双方的互通有无。

二、本地启动telepresence

直接使用telepresence命令就能启动了:
在这里插入图片描述
启动成功后,使用kubectl get pods,你会发现远程集群中启动了一个telepresence的pod。

这时候,你可以直接在本地访问远程集群的服务啦。用nslookup也可以找到集群中的svc了。

三、本地调试服务

启动telepresence后,本地已经可以直接访问远程集群了,所以直接用idea启动你的服务即可。

我本地用IDEA启动了服务A,且在服务A中调用了服务B(B运行在集群中),经过测试,是可以顺利调用的。

四、远程服务收到的请求转发到本地

我们团队每个成员负责不同的微服务模块,常常需要和同事联调,同事调我的接口,我本地使用IDEA进行debug。

以前使用eureka时,我只需要本地起服务,然后把其他实例下线,那么同事的请求就会请求到我本地了。

去除eureka后,微服务之间都是通过k8s的service进行请求,那么我们可以使用telepresence,将远程服务收到的请求转发到我本地。

telepresence --swap-deployment xxx-deployment --expose 9000:9000
  1. xxx-deployment 是你服务的deployment的名称
  2. 9000:9000表示将远程9000端口收到的请求到转发到本地9000端口

请求转发到本地后,本地的服务是用IDEA启动的,那么自然可以进行debug了。

Logo

开源、云原生的融合云平台

更多推荐