使用 Telepresence 进行远程调试
Telepresence 是一款工具,使您能够访问 Kubernetes 集群中的服务,对其进行调试、修改和测试,如同服务在本地计算机上运行一样。
Kubernetes 插件提供与 Telepresence 的集成,使您可以:
连接 Telepresence ,以 DNS 名称访问集群中的服务。
拦截服务 ,将来自集群的流量路由到本地环境。
连接 Telepresence
打开 Services 工具窗口:选择 ,或按 Alt+8。
右键点击 Kubernetes 集群并选择 连接Telepresence。 或者点击工具栏中的
。 根据提示,输入管理员账户密码以启动 Telepresence 守护进程。 在 Windows 上,允许执行 telepresence.exe 。
安装 Telepresence 和 Traffic Manager 后,再次点击 连接Telepresence。
现在,您可以像在工作站上运行一样,通过 DNS 名称访问 Kubernetes 集群中的服务。 例如,如果您有一个应用接收来自 hello-node:9001 的请求,您可以通过名称访问该应用。

拦截来自集群的流量
拦截功能使您能够将发往 Kubernetes 集群中服务的流量路由至本地服务。
在工具栏中点击
(创建新拦截 ),然后点击 创建新拦截。
在打开的窗口中,在 服务 列表中选择要拦截的工作负载。 这可以是 Deployment、ReplicaSet 或 StatefulSet。
在 端口 字段中,指定本地服务实例正在运行的端口。

如果服务拦截成功,您可以在本地访问,并使用 IDE 功能尝试、调试和分析运行于集群中的应用。
退出 Telepresence
Telepresence 一次仅与一个集群交互,因此在连接到另一个集群前,可能需要先停止当前连接。 退出 Telepresence 将停止所有活动拦截。
打开 Services 工具窗口:选择 ,或按 Alt+8。
右键点击 Kubernetes 集群并选择 退出Telepresence。 或者点击工具栏中的
。
以拦截方式运行应用
在 GoLand 中,您只需一次点击即可运行本地应用,并同时将发往 Kubernetes 集群中某一服务的流量重定向至该本地应用。
此功能通过配置与 Kubernetes 集群的隧道(即 Telepresence 拦截)并将其添加为运行配置中的 启动前任务 来实现。 每次运行此运行配置时,GoLand 都会创建一个 Telepresence 拦截,允许您像在本地运行一样调试远程应用。
为实现此目的,您应当:
在运行配置中添加拦截
请确保:
您的服务原始实例已部署并在 Kubernetes 集群中运行,其本地实例的源代码已在编辑器中打开。
您的 GoLand 实例已 连接至 Kubernetes 集群。
点击主类声明附近边距中的
,然后选择 添加远程调试隧道。 该操作在 GoLand 中至少连接一个集群时可用。

或者,如果您的应用已存在运行/调试配置,请点击运行部件中的
并选择 添加远程调试隧道。
在打开的 将Kubernetes 隧道添加到运行配置 窗口中,选择集群和命名空间并点击 连接到集群。 根据提示,输入管理员账户密码,以启动 Telepresence 守护进程。
如果已成功连接至集群,请配置拦截参数:
在 服务 列表中选择要拦截的工作负载
在 端口 字段中,指定本地服务实例正在运行的端口。
可选择为
telepresence intercept命令指定其他选项。

如果您想查看 Telepresence 命令的输出,请展开 输出 部分。 如果在连接 Telepresence 时发生错误,该部分将自动展开。
单击 保存配置。 为了检查拦截参数,GoLand 将创建一次拦截然后终止。
拦截参数将作为新的运行配置中的 添加调试隧道 启动前任务保存。 为便于与其他运行配置区分,该运行配置名称将包含 (Telepresence) 后缀,例如: MyApp(Telepresence)。
现在,您已可以 运行应用程序并拦截其远程版本。
以拦截方式运行应用
在运行小组件中,选择一个带有 (Telepresence) 后缀的运行配置。

单击
以运行,或单击
启动调试会话。
此操作将运行本地应用程序,同时使用上述参数运行 telepresence intercept 命令。
Telepresence 现已拦截发送到集群中服务的所有流量,并将其转发到本地应用程序。 您可以在本地编写代码并调试已拦截的服务。
服务 工具窗口将在 Telepresence 拦截 节点下显示已创建的拦截。 Kubernetes 集群的根节点还会显示生成的 telepresence 命令及相关日志。

当您停止该应用程序(通过单击 )时,GoLand 也会停止拦截(
telepresence leave)。