公开容器组的静态 IP 地址

本文介绍一种使用 Azure 应用程序网关公开容器组的静态公共 IP 地址的方法。 如果需要在 Azure 容器实例中运行的某个面向外部的容器化应用的静态入口点,请按这些步骤操作。

本文使用 Azure CLI 为此方案创建资源:

  • Azure 虚拟网络
  • 部署在虚拟网络中的一个容器组,其中托管了一个小型 Web 应用
  • 一个使用公共前端 IP 地址的应用程序网关、一个用于在网关上托管网站的侦听器,以及一个用于连接后端容器组的路由

只要应用程序网关运行,并且容器组公开网络委托子网中的某个稳定专用 IP 地址,就可以通过此公共 IP 地址访问该容器组。

注意

Azure 根据为网关预配的及可用时间的时间长短及其处理的数据量对应用程序网关进行收费。 请参阅定价

创建虚拟网络

在典型案例中,你可能已有一个 Azure 虚拟网络。 如果没有,请按以下示例命令所示创建一个。 该虚拟网络需要为应用程序网关和容器组提供单独的子网。

如果需要,请创建一个 Azure 资源组。 例如:

az group create --name myResourceGroup --location chinaeast2

使用 az network vnet create 命令创建虚拟网络。 此命令在网络中创建 myAGSubnet 子网。

az network vnet create \
  --name myVNet \
  --resource-group myResourceGroup \
  --location chinaeast2 \
  --address-prefix 10.0.0.0/16 \
  --subnet-name myAGSubnet \
  --subnet-prefix 10.0.1.0/24

使用 az network vnet subnet create 命令为后端容器组创建子网。 该子网在这里命名为 myACISubnet

az network vnet subnet create \
  --name myACISubnet \
  --resource-group myResourceGroup \
  --vnet-name myVNet   \
  --address-prefix 10.0.2.0/24

使用 az network public-ip create 命令创建静态公共 IP 资源。 稍后的某个步骤会将此地址配置为应用程序网关的前端。

az network public-ip create \
  --resource-group myResourceGroup \
  --name myAGPublicIPAddress \
  --allocation-method Static \
  --sku Standard

创建容器组

运行以下 az container create 命令,在上一步配置的虚拟网络中创建一个容器组。

该组会部署到 myACISubnet 子网中,包含用于拉取 aci-helloworld 映像的名为 appcontainer 的单个实例。 如本文档中的其他文章所述,此映像会打包一个以 Node.js 编写的、可提供静态 HTML 页面的小型 Web 应用。

az container create \
  --name appcontainer \
  --resource-group myResourceGroup \
  --image mcr.microsoft.com/azuredocs/aci-helloworld \
  --vnet myVNet \
  --subnet myACISubnet

成功部署后,将为该容器组分配虚拟网络中的某个专用 IP 地址。 例如,运行以下 az container show 命令可以检索该组的 IP 地址:

az container show \
  --name appcontainer --resource-group myResourceGroup \
  --query ipAddress.ip --output tsv

输出类似于:10.0.2.4

请将该 IP 地址保存到环境变量中,以便在稍后的步骤中使用:

ACI_IP=$(az container show \
  --name appcontainer \
  --resource-group myResourceGroup \
  --query ipAddress.ip --output tsv)

重要

如果容器组停止、启动或重启,容器组的专用 IP 可能会发生更改。 如果发生这种情况,你将需要更新应用程序网关配置。

创建应用程序网关

按照应用程序网关快速入门中的步骤,在虚拟网络中创建应用程序网关。 以下 az network application-gateway create 命令创建一个网关,该网关使用某个公共前端 IP 地址以及用于连接后端容器组的路由。 有关网关设置的详细信息,请参阅应用程序网关文档

az network application-gateway create \
  --name myAppGateway \
  --location chinaeast2 \
  --resource-group myResourceGroup \
  --capacity 2 \
  --sku Standard_v2 \
  --http-settings-protocol http \
  --public-ip-address myAGPublicIPAddress \
  --vnet-name myVNet \
  --subnet myAGSubnet \
  --servers "$ACI_IP" \
  --priority 100

Azure 最长可能需要花费 15 分钟时间来创建应用程序网关。

测试公共 IP 地址

现在,可以测试性地访问在应用程序网关后面的容器组中运行的 Web 应用。

运行 az network public-ip show 命令以检索网关的前端公共 IP 地址:

az network public-ip show \
--resource-group myresourcegroup \
--name myAGPublicIPAddress \
--query [ipAddress] \
--output tsv

输出是一个公共 IP 地址,类似于 52.142.18.133

若要在成功配置后查看正在运行的 Web 应用,请在浏览器中导航到该网关的公共 IP 地址。 成功访问后,会显示如下所示的界面:

Browser screenshot showing application running in an Azure container instance

后续步骤

  • 参阅快速入门模板,了解如何在应用程序网关后面创建一个使用 WordPress 容器实例作为后端服务器的容器组。
  • 还可以使用用于 SSL 终止的证书来配置应用程序网关。 请参阅概述教程
  • 根据你的方案,请考虑将其他 Azure 负载均衡解决方案与 Azure 容器实例配合使用。 例如,使用 Azure 流量管理器在多个容器实例和多个区域之间分配流量。 请参阅此 博客文章