打开端口#
有时,将集群上的特定端口暴露给公共互联网可能至关重要。例如:
暴露开发工具:如果您正在使用像Jupyter Notebook或ray这样的工具,您需要暴露其端口以便从浏览器访问界面/仪表板。
创建Web服务:无论您是设置Web服务器、数据库还是其他服务,它们都通过需要可访问的特定端口进行通信。
协作工具:某些工具和平台可能需要开放端口以便与团队成员协作或与其他服务集成。
在集群上打开端口#
要在SkyPilot集群上打开一个端口,请在任务的resources部分中指定ports。例如,以下是一个暴露Jupyter Lab服务器的YAML配置:
# jupyter_lab.yaml
resources:
ports: 8888
setup: pip install jupyter
run: jupyter lab --port 8888 --no-browser --ip=0.0.0.0
在这个例子中,run 命令将在端口 8888 上启动 Jupyter Lab 服务器。通过指定 ports: 8888,SkyPilot 将在集群上暴露端口 8888,使 Jupyter 服务器可以公开访问。要启动并访问服务器,请运行:
$ sky launch -c jupyter jupyter_lab.yaml
并在日志中查找类似以下的输出:
Jupyter Server 2.7.0 is running at:
http://127.0.0.1:8888/lab?token=<token>
要获取集群头节点的公共IP地址,请运行 sky status --ip jupyter:
$ sky status --ip jupyter
35.223.97.21
在jupyter服务器URL中,将127.0.0.1替换为sky status --ip jupyter中的公共IP,并在浏览器中打开该URL。
如果你想暴露多个端口,你可以在resources部分指定一个端口列表或端口范围:
resources:
ports:
- 8888
- 10020-10040
- 20000-20010
SkyPilot 还支持通过 CLI 打开端口:
$ sky launch -c jupyter --ports 8888 jupyter_lab.yaml
安全性和生命周期考虑#
在开始打开端口之前,有几件事情你需要记住:
公共访问性: 您打开的端口将暴露在公共互联网上。这意味着任何知道您的虚拟机IP地址和开放端口的人都可以访问您的服务。请确保使用安全措施,如认证机制,以保护您的服务。
生命周期管理:所有打开的端口都会保持开放状态,即使在单个任务完成后也是如此。唯一自动关闭端口的情况是在集群关闭期间。在关闭时,集群生命周期内打开的所有端口都会被关闭。同时,与这些端口相关的所有防火墙规则和安全组也会被清理。