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

Kubernetes 应用通常包含多个独立的服务,每个服务都在各自的容器中运行。在远程 Kubernetes 集群上开发和调试这些服务可能很麻烦,需要你在运行中的容器上获取 Shell 来运行调试工具。

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

本文档介绍如何使用 telepresence 在本地开发和调试运行在远程集群上的服务。

开始之前

  • Kubernetes 集群已安装
  • kubectl 已配置为与集群通信
  • Telepresence 已安装

将你的本地机器连接到远程 Kubernetes 集群

安装 telepresence 后,运行 telepresence connect 启动其 Daemon 并将你的本地工作站连接到集群。

$ telepresence connect
 
Launching Telepresence Daemon
...
Connected to context default (https://<cluster public IP>)

你可以使用 Kubernetes 语法 curl 服务,例如 curl -ik https://kubernetes.default

开发或调试现有服务

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

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

其中:

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

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

Telepresence 是如何工作的?

Telepresence 会在你现有应用的容器旁(在远程集群中运行)安装一个 traffic-agent sidecar。然后它会捕获所有进入 Pod 的流量请求,并将这些流量(当你创建一个全局拦截时是所有流量,当你创建一个个人拦截时是流量的一个子集)路由到你的本地开发环境,而不是转发到远程集群中的应用。

下一步

如果你对动手实践教程感兴趣,请查看此教程,该教程逐步讲解了如何在 Google Kubernetes Engine 上本地开发 Guestbook 应用。

更多信息,请访问 Telepresence 网站

本页面上的内容提及了提供 Kubernetes 所需功能的第三方产品或项目。Kubernetes 项目作者不对这些第三方产品或项目负责。更多详细信息,请参阅 CNCF 网站指南

在提议更改以添加额外第三方链接之前,你应该阅读内容指南

最后修改时间:2023 年 11 月 24 日下午 4:55 PST:解决议题:#44034 (802dde6897)