CloudApps 是一款专为阿里云 EDAS(企业级分布式应用服务)开发者量身打造的 VS Code 扩展。它让您能够像在本地一样,实时查看、编辑云上应用。
目前插件支持 VS Code 和 Qoder
核心功能特性
一键连接:通过 SSH 直接连接到 Kubernetes Pod
智能搜索:支持按 Pod 名称、IP 地址、应用名称快速搜索
远程开发:集成 VS Code Remote-SSH,支持远程工作区开发
安全连接:自动生成和管理 SSH 密钥对
快速开始
1. 安装扩展
在扩展市场中搜索 "CloudApps" 并点击安装。
注意:
VS Code 用户:本扩展依赖微软官方的 "Remote - SSH" 扩展,请确保一并安装。
Qoder 用户:无需额外安装,Qoder 已内置相关功能。
2. 配置凭证
进入扩展设置页面,配置您的阿里云 AccessKey ID 和 AccessKey Secret。配置完成后,点击刷新按钮获取应用列表。


3. 查找应用
可以在输入框中输入应用名称或 IP 进行过滤,或直接在树状视图中查找。
例如,当您知道 Pod 的 IP 地址片段(如 10.76.207)时,在 EDAS FILTER 输入框中输入该 IP 段,CloudApps 将自动过滤并展示所有匹配该 IP 前缀的 Pod,让您能够快速找到目标容器。

同样,当需要查找所有与 Python 相关的应用时,只需输入 python 关键词,CloudApps 会立即过滤出所有包含该关键词的应用(如 python39、python-test 等)及其下属的所有 Pod。

4. 建立连接
点击目标 Pod 旁的 连接 图标。

连接成功后,VS Code 将自动弹出新的远程窗口,您即可开始云端开发。
典型使用场景:Flask 应用云端实时改动
假设您在 EDAS 上部署了一个 Flask 应用,现在需要快速验证一个功能改动的效果。使用 CloudApps,整个流程可以在几分钟内完成:
1. 搜索并连接目标 Pod
在 CloudApps 的 EDAS FILTER 中输入应用名称(如 python),快速定位到您的 Flask 应用 Pod:
点击目标 Pod 旁的"连接"按钮,CloudApps 将自动完成 SSH 配置并打开远程工作区。

2. 查看和编辑代码
连接成功后,VS Code 将弹出新窗口,左侧文件树显示 Pod 内的目录结构,您可以直接打开 app.py 等源代码文件进行编辑,例如把Hello from Flask 改为 Hello World:

3. 验证效果
a) 端口转发
使用 kubectl port-forward 将应用端口映射到本地:
kubectl port-forward -n default pod/python-test-group-1-6558b4495-5j9mr 8000:8000b) 重载应用
Flask 开发模式:保存文件后会自动重载,无需额外操作。
Gunicorn 生产模式(本次示例使用):需要手动重启服务。在 Pod 终端中运行:
ps aux | grep gunicorn # 找到主进程 ID
kill -HUP <PID> # 重载配置c) 查看结果
在浏览器中访问 http://localhost:8000,立即看到代码修改后的效果。
整个过程无需重新构建镜像或重启 Pod,极大提升了调试效率。

常见问题
1. 容器被 OOMKilled(内存溢出)?
原因:CloudApps 需要在 Pod 中运行 VS Code Server,这会占用一定的内存资源(通常几百 MB)。如果您的 Pod 内存限制(Limit)设置得过于紧凑,启动 VS Code Server 可能会导致容器内存超限。
解决方案:建议在 EDAS 控制台适当调大 Pod 的内存限制 (Memory Limit),推荐至少 2GB。

2. 提示权限不足 (Forbidden)?
CloudApps 的部分功能(如创建临时容器)需要 Kubernetes RBAC 权限。如果您遇到权限问题,请确保您的集群角色包含临时容器的创建权限:

可以将以下自定义 ClusterRole 进行配置使用自定义RBAC限制集群内资源操作
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: pod-ssh-minimal
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get", "create"]
- apiGroups: [""]
resources: ["pods/ephemeralcontainers"]
verbs: ["patch"]