如何让多个Azure容器实例组共用固定公网IP按URL路径区分访问
实现方案
你提到的两个官方示例逻辑并不冲突,--servers参数本质是创建网关时直接给默认后端地址池添加后端IP,容器组不需要像VMSS那样主动绑定网关,只需要将每个容器组的IP手动加入对应后端地址池,再配置路径路由规则即可实现需求。
前置准备
- 把5个容器组都部署到和Application Gateway同地域的同一个虚拟网络的专用子网(比如命名为
aci-subnet)里,创建时可去掉公网IP配置,减少公网暴露同时节约成本,提前记录每个容器组的私网IP地址。 - 单独创建Application Gateway专用的子网
appgw-subnet,两个子网归属在同一个VNet下即可。 - 提前申请固定公网IP,SKU选择标准型,分配模式设为静态。
核心配置步骤
1. 创建Application Gateway基础资源
创建时先配置默认监听器、默认后端池(可临时填写无效地址,后续会用自定义池替换),命令示例:
az network application-gateway create \ --name <自定义网关名称> \ --resource-group <资源组名称> \ --vnet-name <虚拟网络名称> \ --subnet appgw-subnet \ --public-ip-address <提前创建的静态公网IP名称> \ --sku Standard_v2 \ --capacity 2
2. 为每个容器组创建独立后端地址池
每个容器组对应一个后端池,把对应容器组的私网IP添加到池内,以第一个容器组为例:
# 创建第一个容器组的后端池 az network application-gateway address-pool create \ --gateway-name <网关名称> \ --resource-group <资源组名称> \ --name container1-pool \ --servers <容器组1的私网IP> # 剩余container2到container5的后端池按上述格式依次创建即可
3. 配置后端HTTP设置
如果所有容器组的服务端口一致,可共用同一份设置,端口不同则单独配置:
az network application-gateway http-settings create \ --gateway-name <网关名称> \ --resource-group <资源组名称> \ --name aci-http-settings \ --port 80 \ --protocol Http \ --cookie-based-affinity Disabled \ --timeout 30
4. 配置URL路径映射规则
这是实现固定IP加路径路由的核心步骤,先创建路径映射基础规则,再为每个路径绑定对应后端池:
# 创建路径映射基础规则,同时绑定第一个容器的路径规则 az network application-gateway url-path-map create \ --gateway-name <网关名称> \ --resource-group <资源组名称> \ --name aci-path-map \ --path-rules "container1-rule" \ --paths "/container1/*" \ --address-pool container1-pool \ --http-settings aci-http-settings \ --default-address-pool <网关默认后端池名称> \ --default-http-settings aci-http-settings # 依次添加剩余4个容器的路径规则 az network application-gateway url-path-map rule create \ --gateway-name <网关名称> \ --resource-group <资源组名称> \ --name container2-rule \ --path-map-name aci-path-map \ --paths "/container2/*" \ --address-pool container2-pool \ --http-settings aci-http-settings # container3、container4、container5的规则按上述格式依次添加即可
5. 绑定路径映射到前端监听器
将路径映射规则和网关的80端口监听器绑定,替换默认路由规则:
az network application-gateway rule create \ --gateway-name <网关名称> \ --resource-group <资源组名称> \ --name aci-path-routing-rule \ --http-listener appGatewayHttpListener \ --rule-type PathBasedRouting \ --url-path-map aci-path-map \ --priority 100
注意事项
- 如果容器组的服务是在根路径提供服务,需要额外在Application Gateway中配置重写规则,把请求路径里的
/container[i]前缀去掉再转发给后端,否则会返回404;如果容器服务的路径前缀和路由前缀一致则无需额外配置。 - 容器组默认私网IP为动态分配,重启后IP会变更,可给容器组配置静态私网IP,避免IP变更导致路由失效。
- 需要HTTPS访问的话,给前端监听器绑定SSL证书即可,其余配置逻辑不变。
内容的提问来源于stack exchange,提问作者Carucel
相关产品推荐
相关产品推荐

