当您在 DSW 实例中部署了 Web 服务(如模型 API、 WebUI)并希望直接在浏览器访问、免登录的分享给协作者测试,或需要从外网连接调用时,DSW 提供了自定义服务功能来配置公网访问的能力,使服务能暴露在互联网上。请注意:此功能主要用于开发测试阶段。
重要提醒
实现原理
为了让 DSW 实例内的服务(如运行在 9000
端口的 API)能从公网访问,需要以下资源协同工作:
弹性公网 IP (EIP):提供一个固定的公网 IP 地址 (
121.40.**.**
)。这是公网访问的入口。NAT 网关:位于您的 VPC 内,负责将公网请求 (
EIP:端口
) 映射到私网 DSW 实例 (私有IP:端口
)。安全组:相当于 DSW 实例的防火墙。您必须显式添加规则,允许公网流量访问您服务监听的特定端口(如
9000
)。这是访问成功的关键一步。
核心流程:
公网用户 (浏览器/工具) -> EIP:端口 -> NAT网关 -> 交换机(vSwith) -> 安全组规则检查 -> DSW 实例私有IP:端口 -> 您的服务
计费说明
NAT 网关和 EIP 从创建起即开始计费。
即使 DSW 实例已停止,只要 NAT 网关和 EIP 未被删除,它们仍会持续产生费用。
DSW 实例本身的费用按运行状态计算(后付费实例停止后不计费)。
如何配置公网访问
创建 DSW 实例时配置公网访问
为已有 DSW 实例配置公网访问
对于已有的DSW实例,修改公网访问配置可通过如下两种方式。
注意:如果需要添加或变更VPC、NAT网关等,还是需要通过变更配置再重启实例的方式完成。
在实例详情页配置
在DSW实例列表页,单击实例名称进入详情页面,修改公网访问配置。
在DSW实例内配置
在DSW开发环境内,单击页面上方的配置可以修改自定义服务。
测试连通性
在DSW的Terminal中执行如下命令,启动Python内置的HTTP服务。
# 创建一个包含测试内容的 HTML 文件 echo 'Hello, World!' > index.html # 启动 Python 内置 HTTP 服务(监听 9000 端口) python -m http.server 9000 --bind 0.0.0.0
在实例详情页查看访问配置获取访问地址。
以公网访问为例,复制公网访问地址
121.40.**.**:9000
并在浏览器中访问。当返回Hello, World!
时表示服务访问配置成功。
生产环境应用建议
仅用于开发测试:DSW 公网访问功能设计初衷是方便临时测试和协作调试。
通过 EAS 部署生产环境:对于正式发布的推理服务,请部署到 PAI-EAS。EAS 提供:
高可用性和负载均衡。
自动弹性伸缩应对流量波动。
完善的监控告警、版本管理、灰度发布。
更优化的公网访问集成与计费模式。详情参见将模型部署为在线服务。
节省成本:
常见问题
配置了公网访问,但浏览器访问/外网连接失败 (
无法访问此网站
/Connection refused
/Timeout
)?第一步:检查安全组规则! (最常见原因)
确认安全组已添加 入方向 规则。
规则 端口范围 是否包含您配置的端口(如
9000
)规则 授权对象 是否包含您的公网 IP 或
0.0.0.0/0
规则 协议类型 (TCP/UDP) 是否正确
第二步:确认服务在运行且监听正确端口
在 DSW 实例的 Terminal 内,使用
netstat -tunlp | grep <端口号>
(如netstat -tunlp | grep 9000
) 查看端口是否被监听。确保您的应用服务进程已启动并在监听配置的端口。
第三步:检查 NAT 网关和 EIP 状态
第四步:本地测试:在 DSW 实例内部,尝试用
curl http://localhost:<端口号>
或curl http://<实例私有IP>:<端口号>
看服务是否响应。第五步:使用网络诊断工具:
阿里云 VPC 提供网络智能服务NIS可辅助排查路径问题 (需开通)。
在 DSW 实例内使用
telnet <EIP> <端口>
测试端口连通性(需先安装telnet
)。
停止 DSW 后,公网访问配置还会收费吗?
会,DSW 实例停止后本身(后付费)不计费。但是,关联的 NAT 网关 和 EIP 资源只要未被删除,会持续独立计费。务必手动删除它们以节省费用。
一个 EIP 能映射多个端口吗?
可以。 同一个 DSW 实例配置的多个服务端口(最多5个),都通过同一个 EIP 和 NAT 网关进行映射访问。访问时使用
EIP:不同端口
即可。