Kubernetes 服务不同场景调试方法(port-forward、kubefwd、telepresence)

Kubernetes 服务不同场景调试方法

原文链接:https://cloud.tencent.com/developer/article/1819860
原文链接:https://erkanerol.github.io/post/debugging-k8s-services/

  • 如果我们需要在不暴露 service 的情况下访问 service,kubectl port-forward 就足够了。

  • 如果我们需要在本地运行 service 进行调试,并且 service 需要访问 K8s 上的其他 service ,kubefwd 可以发挥作用。它管理着本地计算机中的 DNS 记录,并为 service 依赖性打开从计算机到集群的单向通道。

  • 如果我们需要在本地运行 service 进行调试,并且应用程序在集群中有一些使用方,那就使用telepresence。它可以打开双向网络通道,并将请求从集群转发至本地实例。

总结: 感觉平时前两种方式基本够用,尤其第二种kubefwd,感觉很实用~

本地开发Kubernetes微服务远程调试工具 - kubefwd

官网:https://github.com/txn2/kubefwd/blob/master/README_CN.md
参考url:https://juejin.cn/post/7214146630467387450

Kubefwd(Kube Forward)是一个开源项目,旨在简化本地开发环境中与Kubernetes服务的连接。它通过在本地进行端口转发,使开发人员能够直接访问Kubernetes集群中的服务,无需复杂的网络配置。这对需要本地调试和测试Kubernetes应用的开发者非常方便。

kubefwd帮助实现了在本地工作站上开发应用程序和服务的无缝和高效方式。在本地开发打算与Kubernetes集群中的其他服务进行交互的应用程序。

运行kubefwd允许你从本地工作站访问任何服务,就像你从集群上同一命名空间的另一个Pod中访问一样。

启动kubefwd后,在本地就能像在Kubernetes集群中一样使用service名字与端口访问对应的应用程序。

linux下载安装

下载到tmp目录: https://github.com/txn2/kubefwd/releases

cd /tmp
tar -zxvf kubefwd_Linux_x86_64.tar.gz
sudo mv kubefwd /usr/local/bin/
sudo kubefwd services -n the-project

MacOs 下载安装 / 升级

kubefwd 默认你已经安装了 kubectl 工具并且也已经设置好了访问Kubernetes集群的配置文件。kubefwd 使用 kubectl 的上下文运行环境. kubectl 工具并不会用到,但是它的配置文件会被用来访问Kubernetes集群。

确保你有上下文运行环境配置:

kubectl config current-context

如果你使用MacOs,并且安装了 homebrew ,那么你可以直接使用下面的命令来安装kubefwd:

brew install txn2/tap/kubefwd

升级:

brew upgrade kubefwd

工作常用技巧

根据label只启动特定服务

查看服务标签:

kubectl get svc -n <namespace> --show-labels

根据lable标签kubefwd 只启动特定服务

sudo kubefwd services -n custom-namespace -l app.kubernetes.io/name=your-service-name

使用 telepresence 在本地开发和调试服务

官方文档:https://www.telepresence.io/docs/quick-start/
k8s官方文档:https://kubernetes.io/zh-cn/docs/tasks/debug/debug-cluster/local-debugging/

Kubernetes 应用程序通常由多个独立的服务组成,每个服务都在自己的容器中运行。 在远端的 Kubernetes 集群上开发和调试这些服务可能很麻烦, 需要在运行的容器上打开 Shell, 以运行调试工具。

telepresence 是一个工具,用于简化本地开发和调试服务的过程,同时可以将服务代理到远程 Kubernetes 集群。 telepresence 允许你使用自定义工具(例如调试器和 IDE)调试本地服务, 并能够让此服务完全访问 ConfigMap、Secret 和远程集群上运行的服务。

Telepresence 最大的特点就是可以将 Kubernetes 集群中发给特定 Pod 的流量直接转发到本地开发环境。

工作流程

在集群中创建代理 Pod
拦截目标服务的流量
将流量转发到本地开发机器
本地服务完全接管集群服务

准备开始

  • Kubernetes 集群安装完毕
  • 配置好 kubectl 与集群交互
  • Telepresence 安装完毕

从本机连接到远程 Kubernetes 集群

安装 telepresence 后,运行 telepresence connect 来启动它的守护进程并将本地工作站连接到远程 Kubernetes 集群。

$ telepresence connect

开发和调试现有的服务

在 Kubernetes 上开发应用程序时,通常对单个服务进行编程或调试。 服务可能需要访问其他服务以进行测试和调试。 一种选择是使用连续部署流水线,但即使最快的部署流水线也会在程序或调试周期中引入延迟。

使用 telepresence intercept $SERVICE_NAME --port $LOCAL_PORT:$REMOTE_PORT 命令创建一个 “拦截器” 用于重新路由远程服务流量。

环境变量:

  • $SERVICE_NAME 是本地服务名称
  • $LOCAL_PORT 是服务在本地工作站上运行的端口
  • $REMOTE_PORT 是服务在集群中侦听的端口

运行此命令会告诉 Telepresence 将远程流量发送到本地服务,而不是远程 Kubernetes 集群中的服务中。 在本地编辑保存服务源代码,并在访问远程应用时查看相应变更会立即生效。 还可以使用调试器或任何其他本地开发工具运行本地服务。

Telepresence 是如何工作的?

原文链接:https://cloud.tencent.com/developer/article/2242193

Telepresence 会在远程集群中运行的现有应用程序容器旁边安装流量代理 Sidecar。 当它捕获进入 Pod 的所有流量请求时,不是将其转发到远程集群中的应用程序, 而是路由所有流量(当创建全局拦截器时) 或流量的一个子集(当创建自定义拦截器时) 到本地开发环境。

在k8s中部署了两个service,分别是Users和Orders。

这里以service Orders为例,正常情况下,一个访问Orders的请求,会被正常的收发。而telepresence的功能,就是拦截发送到Orders的请求,并将其转发到用户指定的地址(一般为本地)。

因此在开始配置前,需要了解telepresence中拦截器的概念:

• 全局拦截(Global intercept):将访问k8s中某个service的流量全部拦截,并转发到本地。

使用全局拦截,能将访问Orders服务的全部流量拦截,全部转发到本地。当然,我们需要将本地代码运行起来,用于接收转发过来的请求,同时,可以使用任意的debug的工具在本地进行调试。

  • 个人拦截(Personal intercept):有选择性地仅拦截某个service的部分流量,而不会干扰其余流量。

可以通过以下参数设置是否拦截请求的标识:

--http-match=key=value 基于请求头识别请求是否需要拦截转发
--http-path-equal <path> 基于请求路径
--http-path-prefix <prefix>  基于请求路径前缀
--http-path-regex <regex> 基于请求路径是否匹配给定的正则表达式

卸载

删除拦截器:执行后,会删除注入工作负载的sidecar。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值