Azure单容器部署微服务:仅UI公开、API通过VNet Integration隐藏可行性问询
针对你的Azure容器微服务部署问题的解答
完全可以按照你想要的方式部署,下面逐个拆解你的问题:
1. 不使用docker-compose(预览版)能否实现该部署场景?
绝对可以。你可以把每个容器镜像分别部署到独立的**Azure App Service(容器实例)**中:
- 先将UI、API1、API2的镜像推送到Azure Container Registry(ACR)或其他Azure支持的镜像仓库
- 为每个微服务创建单独的App Service资源,选择「容器」部署选项,指定对应镜像的地址
- 每个App Service可以独立配置资源规模、环境变量、日志等,完全不需要依赖预览版的docker-compose功能
2. 能否仅让UI的URL(例如myapp.azurewebsites.net)可公开访问?
没问题,具体实现方式如下:
- 保留UI的App Service公共访问权限,按需配置自定义域名,确保外部用户能正常访问
- 对API1和API2的App Service,关闭公共访问入口:在App Service的「网络」设置里,配置访问限制规则,只允许来自你的VNet内部或UI App Service内网IP的流量;或者直接启用「专用端点」,让API只能通过VNet内的私有地址被访问
- UI的App Service可以通过API的内网专属域名(格式为
<app-name>.private.azurewebsites.net)调用后端,外部用户无法直接访问API的公共URL
3. 能否通过VNet Integration隐藏API1和API2?
当然可以,这是Azure中保护后端服务的标准方案,核心步骤如下:
- 创建一个Azure Virtual Network(VNet),并划分好对应的子网(可给UI、API各分配独立子网,或共用一个子网)
- 给API1和API2的App Service开启VNet集成,将它们接入到你创建的VNet子网中
- 配置API的App Service访问限制,拒绝所有公共流量,只允许来自VNet内部的请求
- 若希望UI和API的通信完全在内网进行,也可以把UI的App Service集成到同一个VNet里
- 可选配合Azure Private DNS Zone,让VNet内的服务通过友好域名访问API,无需记忆内网IP
这套架构下,只有UI对外暴露,两个API完全隐藏在VNet内部,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Max




