如何将Service Fabric Mesh应用部署至虚拟网络并限制访问
把Service Fabric Mesh部署到虚拟网络并结合API管理+应用网关实现访问限制
我来帮你一步步落地这个方案,核心逻辑就是先把Mesh应用纳入虚拟网络管控,再把API管理和应用网关也接入同个VNet,最后通过网络安全组锁死唯一合法的访问路径。
第一步:准备专属虚拟网络与子网
先创建一个Azure虚拟网络(VNet),然后划分三个独立子网:
- Mesh专属子网:建议分配
/24的IP段(256个IP),因为Mesh的每个服务实例都会占用独立IP,空间太小会导致部署失败。 - API管理(APIM)子网:
/27(32个IP)足够满足APIM的运行需求。 - 应用网关子网:应用网关要求子网必须独立,不能和其他资源共享,
/27的IP段就够用。
创建子网时先不要给Mesh子网加严格的NSG规则,确保Mesh能正常完成部署。
第二步:将Service Fabric Mesh部署到指定VNet
你需要修改Mesh应用的部署配置文件(ARM模板或YAML均可),添加网络关联配置:
YAML配置示例
在Mesh应用的YAML文件中,新增networks节点指向你创建的VNet和子网:
networks: - name: meshInternalNetwork properties: addressPrefix: "10.1.0.0/24" # 需与Mesh子网的IP段完全一致 subnets: - name: meshSubnet properties: addressPrefix: "10.1.0.0/24" virtualNetwork: id: "/subscriptions/你的订阅ID/resourceGroups/你的资源组/providers/Microsoft.Network/virtualNetworks/你的VNet名称"
然后在每个服务的配置里,通过networkRefs关联这个内部网络:
services: - name: myFirstService properties: networkRefs: - name: meshInternalNetwork
最后用Azure CLI执行部署:
az mesh deployment create --resource-group 你的资源组 --template-file 你的Mesh部署文件.yaml
部署完成后,Mesh服务就会运行在指定的VNet子网内,默认仅允许VNet内部访问,不再暴露公网IP。
第三步:把API管理接入同个VNet
创建APIM实例时,选择内部VNet模式,并指定你准备好的APIM子网。这样APIM就和Mesh处于同一个VNet,可以直接通过Mesh服务的内部IP或服务名称访问(同VNet内支持DNS解析)。
接下来把Mesh服务的API导入到APIM:
- 在APIM控制台添加新API,选择「从后端服务导入」,填写Mesh服务的内部地址(比如
http://10.1.0.5:8080或http://myFirstService.meshInternalNetwork:8080)。 - 配置API的路由规则、认证策略(比如JWT验证)和限流规则,确保只有合法请求能转发到Mesh服务。
第四步:配置Application Gateway作为公网入口
创建应用网关并接入同个VNet的专属子网:
- 设置前端IP为公共IP,用户将通过这个公网IP发起请求。
- 配置后端池:把APIM的内部IP添加进去(APIM在VNet中的私有IP)。
- 配置路由规则:将公网的HTTP/HTTPS流量转发到APIM的默认入口端口(80/443)。
- 如果需要HTTPS访问,记得上传SSL证书到应用网关,保障公网传输的安全性。
第五步:锁死Mesh服务的访问权限
最后给Mesh所在的子网配置网络安全组(NSG),添加两条核心规则:
- 允许规则:仅允许来自APIM子网的IP段访问Mesh服务的业务端口(比如8080)。
- 拒绝规则:拒绝所有其他来源的入站流量(包括公网和VNet内其他非授权子网)。
这样一来,所有用户请求必须先走公网的Application Gateway,再转发到APIM,最后由APIM访问Mesh服务,完全禁止了直接访问Mesh的路径,实现了你想要的访问限制目标。
内容的提问来源于stack exchange,提问作者pr3dr46
相关产品推荐
相关产品推荐

