Azure App Services将出站IP映射到1个IP

112次阅读
没有评论

问题描述

架构中有3个组件分别运行在3个独立的Azure App Services中。每个应用服务都有4个出站IP。因此,每当用户需要将应用部署到客户的本地环境时,都需要在客户的本地防火墙上将12-16个IP添加到白名单中。
用户想知道是否有办法部署一个NAT,只使用一个公共IP,并且只向客户提供一个IP。
如果用户成功实现了这个架构,那么他们应该如何修改对这些服务的API调用?因为目前他们正在使用各自服务的公共IP来访问它们,那么只有一个IP,他们如何区分对不同应用服务的API调用。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

Azure Application Gateway允许您为这些App Services提供一个公共IP。
您需要按照以下步骤进行操作:
1. 配置Application Gateway。
2. 为每个App Service添加带有主机名的监听器。
3. 为每个App Service添加后端。
4. 创建具有“Override with new host name”和“Pick host name from backend target”选项的HTTP设置。
5. 添加规则以连接与后端对应的监听器。
最后,客户需要将分配给Application Gateway的一个公共IP添加到白名单,并创建DNS条目将所有App Services地址指向一个公共IP。
参考资料:
Application Gateway支持多租户后端,如App Service
应用程序网关的工作原理

方案2

使用脚本或工具来管理容器的启动顺序可能会增加复杂性,并且需要确保容器A和容器B之间的依赖关系正确设置。
另一种方法是编写脚本或使用工具来控制容器的运行顺序。你可以使用docker run命令来手动控制容器的启动顺序,或者使用一些第三方工具来管理容器的依赖关系。

示例:

以下是一个简单的bash脚本示例,可以在容器A启动后启动容器B:

#!/bin/bash
# 启动容器A
docker run -d --name container_a your_image_a
# 等待容器A完全启动
while ! docker exec container_a echo "Container A is ready"; do
  sleep 1
done
# 启动容器B
docker run -d --name container_b your_image_b

在这个示例中,我们首先使用docker run命令启动容器A,并将其命名为container_a。然后,使用一个循环来等待容器A完全启动(这里是通过在容器内运行echo命令来测试)。一旦容器A就绪,我们再使用docker run命令启动容器B,并将其命名为container_b

正文完