锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

改造 Upterm 以支持 VSCode 远程连接任意容器

时间:2023-12-29 11:37:02 sh8c15连接器

39afc02f59819102bd3d0cbe080318bb.gif

本文转自我的小米粥分为你一半,原文:https://corvo.myseu.cn2022/04/23/2022-04-23upterm以支持VSCode任意容器/远程连接/任意容器/,版权归原作者所有。欢迎投稿,请添加微信好友:cloud-native-yang

自从我们的平台增加以来 dashboard 功能,从用户那里得到很多反馈,基本上是不稳定的,经常断开,不能传输文件这个问题。这表明你使用了很多,并希望它能成为一个稳定的服务。所以无论从功能还是稳定性的角度来看,我都应该考虑扩展和改进它。

博客分为两部分,前半部分介绍如何使用,后半部分简要说明工作原理。公网自建 uptermd 它是一个自用的小水管,经不起大风大浪。请合理使用。我不太想用爱发电。有兴趣的同学可以捐一些服务器费。

现在的代码在这里:

  • https://github.com/corvofeng/upterm

upterm 安装与使用

安装

bash<(curl-sLhttp://corvo.myseu.cn/scripts/upterm.sh)

使用

你可以直接把上面的 uri 在浏览器中启动 :

或者开新命令行 :

当 VSCode 左下角有这个图标,说明远程连接已经成功了

打开项目

Open Folder 仓库可以打开

全功能 Terminal

它是一个全功能的 SSH 服务器放大后,作为一个服务器 Terminal 也可以用来支持分屏。

本地端口自动转发

当你在远程 Linux 端口中启动后,VSCode 它可以帮助您自动转发到本地,获得接近本地的开发体验

还有很多功能,用户可以自己探索。例如,复制文件并安装插件,只要是 VSCode remote 它可以使用支持功能

原理及扩展

你可以粗略地认为这个工具有 openssh-server frp 的功能

upterm 做了什么

左右两台机器,其中一台使用 upterm 打开服务,另一个可以直接连接 session。

upterm 是与 tmate 类似的工具 (tmate 可能比较出名),upterm 几份工作 :

  1. 在本地建立 ssh server;

  2. 连接 uptermd,获取一个 session id,并打印;

  3. 当用户连接相应的 session,有地方 ssh server 互动权。

感兴趣的读者可参考upterm 项目主页上的流程图[1]

Remote SSH 功能

这是 VSCode 官方图片可视为前端代码编辑器和后端 Sever 分离

结合一下

upterm 已提供给我们 ssh 为什么连接功能不能直接使用? VSCode 的 remote ssh 功能呢?这个要从 remote ssh 说到实现,

当我们使用 VSCode 远程开发是这样连接远程服务器的 :

ssh-T-D1234192.168.101.135-p2224bash

这个命令需要拆开 :

  1. ssh -T 192.168.101.135 -p 2224 bash 该命令的含义是在远程连接服务器后不启动 tty,直接启动 bash。

  2. ssh -D 1234 xxxxx 表示在当地建立一个 socks5 转发服务,具体使用可见 [OpenSSH 系列 (6)-正代理和端口映射](https://corvo.myseu.cn/2019/01/19/2019-01-19-OpenSSH 系列 (六 "OpenSSH 系列 (六)-正向代理与端口映射")-正代理与请)。

所以只要我们的 ssh 可提供服务器 VSCode 这样的连接方式,就可以了 . 感谢 Golang 库开发者给了我一个更容易建立的机会 ssh 服务,具体代码我放在里面 gist 有兴趣的读者可以去看 :

https://gist.github.com/corvofeng/45c01edd33fa750e31653a90b1c4cdec

建立 ssh 连接后的通信过程 : remote 下载一个机器 code-server 执行文件,然后启动,VSCode 只在服务器中 code-server 通信。

瓶颈和扩张

从目前的使用情况来看,现有的工具确实存在一些瓶颈, :

  1. 每次去新容器,都需要重新下载一个 code-server 并启动,占用带宽;

  2. 每次进入新容器,用户的插件配置也需要重新下载,使用体验不太好;

  3. session id 每次都会变,可能会导致 vscode 保存的历史记录太多;

  4. 目前 vscode 还不支持 Alpine Linux[2],手机端还需要安装完整的容器才能使用;

  5. 以后每个容器中的用户可能会 root,因此,多人使用容器的场景实际上是有问题的。

与 Gitpod 相比之下,这个项目只能用,不好用 :

  1. 保存和下载用户的配置文件和插件,至少要获得每个容器相对一致的体验;

  2. 如果在企业内部使用企业级功能和权利鉴定,仍希望有一套基于企业级的功能和权利鉴定 OpenID 或是 Oauth 鉴权系统, 有了这个系统,session id 可用于替换;

  3. 如果你想支持手机设备,你可能需要类似的 Gitpod 同样的网页版,用户使用起来会更方便。

看到 Gitpod 两轮融了 1600 万美元真的有点激动。 . 如果我们能支持现代安卓机器的性能过剩,如果 Android,这是一个很好的产品。

其他相关内容

从我开始 Dashboard 在系统中,我有一个目标,允许我们的用户通过本地化 ssh 或是 VSCode 连接远程 . 因为我们开发的语言都是 Python. 线上环境的 Pod 其实有一整套 Python 因此,有必要支持用户的开发或调试。以下是我做过的一些尝试和研究。

如何定制和裁剪 Dashboard

  1. 基于 Kubernetes 的 PaaS 平台提供 dashboard 一种支持方案[3]

  2. Kubernetes Dashboard 定制化简介[4]

Gitpod 使用简单原理分析[5]

tmate 使用服务[6]

VSCode remote 在 Android 上运行记录[7]

总结

有人可能会说有些用起来不错,用户可能完全可以用 ssh frp 实现 VSCode remote ssh 功能,但这样的学习成本有点太高,每次安装都需要很多依赖,很可能有需求也不会这样使用 . 我主要想简化这个启动过程,做一个命令映射 VSCode 可用的 ssh server,实际上,功能制作后通用性很强。

我已经简单介绍了原则。如果安全,我会有不同的意见。建议定期重连强制刷新 token。

引用链接

[1]

upterm 项目主页上的流程图: https://github.com/owenthereal/upterm

[2]

Alpine Linux: https://code.visualstudio.com/docs/remote/linux#_remoe-host-container-wsl-linux-prerequisites

[3]

基于 Kubernetes 的 PaaS 平台提供 dashboard 支持的一种方案: https://corvo.myseu.cn/2020/12/05/2020-12-05-%E5%9F%BA%E4%BA%8EKubernetes%E7%9A%84PaaS%E5%B9%B3%E5%8F%B0%E6%8F%90%E4%BE%9Bdashboard%E6%94%AF%E6%8C%81%E7%9A%84%E4%B8%80%E7%A7%8D%E6%96%B9%E6%A1%88/

[4]

Kubernetes Dashboard 定制化简介: https://corvo.myseu.cn/2021/09/09/2021-09-09-Kubernetes%20Dashboard%E5%AE%9A%E5%88%B6%E5%8C%96%E7%AE%80%E4%BB%8B/

[5]

Gitpod 使用与简单原理分析: https://corvo.myseu.cn/2021/12/11/2021-12-11-Gitpod%E4%BD%BF%E7%94%A8%E4%B8%8E%E7%AE%80%E5%8D%95%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90/

[6]

tmate 的服务的使用: https://corvo.myseu.cn/2020/12/29/2020-12-29-%E8%87%AA%E5%BB%BAtmate%E7%9A%84%E5%88%86%E4%BA%AB/

[7]

VSCode remote 在 Android 上运行记录: https://corvo.myseu.cn/2019/09/24/2019-09-24-vscode%E5%9C%A8Android%E4%B8%8A%E8%BF%90%E8%A1%8C%E8%AE%B0%E5%BD%95/


你可能还喜欢

点击下方图片即可阅读

Bash 编程易犯的错误大全

2022-05-09

如何正确计算 Kubernetes 容器 CPU 使用率

2022-05-07

记一次 VictoriaMetrics 代理性能优化问题

2022-05-05

云原生是一种信仰 🤘

关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

点击 "阅读原文" 获取更好的阅读体验!

发现朋友圈变“安静”了吗?

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章