将静态公共地址分配给Azure容器示例部署

wztqucjr  于 2023-02-13  发布在  其他
关注(0)|答案(1)|浏览(125)

上下文

正在处理一个项目,以部署REST API应用程序并将TCP服务分离到Azure容器示例。由于旧原因,TCP服务需要静态Ipv4地址。

问题

我正在尝试隔离要作为静态公用IP地址分配给Azure容器示例上托管的TCP服务的选项。有哪些选项?
受试品编号
1.已部署具有静态公用IP地址的Azure应用程序网关。应用程序网关允许将后端池定向到IP或FQDN终结点。这似乎可以正常运行虽然后端池中的选项似乎只允许HTTP和HTTPS,不是自定义端口。如果TCP服务可以监听80,Web API可以监听443,则可能可以操纵此端口。应用程序网关是仅用于HTTP和HTTPS流量的第7层资源。

  1. Azure负载平衡器。只能定向到VM、可用性集或VM规模集。
    1.为资源分配静态地址。不允许用于容器示例。
  2. Traffic Manager。似乎不是此部署的正确资源类型。
    请参见图表。当我通过BASH会话查询时,API和TCP服务的容器示例具有相同的专用IP地址。建议它们托管在附图中的同一主机(标记为容器组)上。不确定这是否是正确的标签,抱歉,我是容器技术的新手。
    谢谢你的建议斯科特
ibrsph3r

ibrsph3r1#

可能的解决方案

可能有一个解决方案:

  • 创建新的VNET
  • 地址范围10.60.0.0/23
  • 已创建子网容器10.60.0.0/24
  • 已创建VNET防火墙资源
  • 已创建子网防火墙10.60.1.0/24
  • 已将静态公用地址分配给防火墙资源

现在,防火墙“规则”允许执行以下操作:

  • NAT规则-典型端口转换
  • 网络规则-路由地址
  • 应用程序规则-路由FQDN

将容器部署到该开发子网,表面上所有选项都在那里,重定向端口、IP或FQDN。游戏的变化是能够将静态公共地址分配给VNET内的资源,并允许NAT、网络或应用程序规则重定向流量。
明天会更新帖子的结果。

2019年2月更新

好吧,所以不要使用Azure防火墙资源。它非常昂贵,在我的情况下,无论如何都不划算@每月约500英镑。我没有时间使用防火墙测试理论,但由于成本的原因,没有任何意义进一步遵循它。
Azure容器示例允许使用IP地址和完全限定的域名(FQDN)直接向Internet公开容器。创建容器示例时,你可以指定自定义DNS名称标签,以便可以通过customlabel.azureregion.azurecontainer.io访问你的应用程序。遗憾的是,ACI目前不支持静态公共IP地址。
将容器组部署到虚拟网络时会有某些限制。

  • 要将容器组部署到子网,子网不能包含任何其他资源类型。在将容器组部署到现有子网之前,请从现有子网中删除所有现有资源,或者创建新子网。
  • 部署到虚拟网络的容器组当前不支持公共IP地址或DNS名称标签。
  • 由于涉及额外的网络资源,将容器组部署到虚拟网络通常比部署标准容器示例要慢一些。

https://feedback.azure.com/forums/602224-azure-container-instances

部署的解决方案

  • 使用Azure映像创建的Ubuntu虚拟机
  • 分配给VM的静态公有地址
  • API和服务部署在虚拟机的Docker映像中
  • 用于部署的Arm模板,与DevOps构建和发布集成
  • 每月成本£23.52(核心:2.3 GB内存,16 GB高清)

这是最初的解决方案,但卸载和管理SSL证书增加了复杂性。

2019年3月更新-部署新解决方案

如果有人感兴趣(根据此线程被查看的次数,没有多少人感兴趣),最终部署的解决方案如下:

  • 设置应用服务计划
  • 使用容器示例部署“API”应用程序服务,以在端口443上托管API。
  • 部署到“API”应用程序服务的动态地址和标准SSL证书。
  • 使用容器示例部署“Service”应用程序服务,以托管服务端口80。
  • 静态地址和基于IP的SSL证书部署到“服务”应用程序服务。这具有固定服务上的IP地址和满足我的“我需要一个静态IP地址”条件的效果。
  • 费用约65英镑一个月主办约。

值得注意的是,部署证书的唯一原因是修复“Service”应用服务上的IP地址。这是一个解决Azure目前缺乏支持的工作,允许用户将静态IP地址应用到容器示例。

2020年3月更新

由于20/03/20引入了以下功能,帖子于3月更新以供参考:
本文介绍了一种使用Azure应用程序网关公开容器组的静态公共IP地址的方法。当你需要在Azure容器示例中运行的面向外部的容器化应用的静态入口点时,请按照以下步骤操作。
在本文中,您将使用Azure CLI为该场景创建资源:

  • Azure虚拟网络
  • 部署在托管小型Web应用程序的虚拟网络(预览)中的容器组
  • 具有公共前端IP地址的应用程序网关、在网关上托管网站的侦听器以及到后端容器组的路由

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

创建虚拟网络

az group create --name myResourceGroup --location eastus

使用az network vnet create命令创建一个虚拟网络,该命令在网络中创建myAGSubnet子网。

az network vnet create \
  --name myVNet \
  --resource-group myResourceGroup \
  --location eastus \
  --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 group create --name myResourceGroup --location eastus

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

创建容器组

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

该组部署在myACIShnet子网中,包含一个名为appcontainer的示例,该示例用于提取aci-helloworld映像。如文档中的其他文章所示,此映像打包了一个用Node.js编写的小型Web应用程序,该应用程序提供静态HTML页面。

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)
    • 创建应用程序网关**

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

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

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地址。成功访问类似于:
显示在Azure容器示例中运行的应用程序的浏览器屏幕截图
参考https://learn.microsoft.com/en-us/azure/container-instances/container-instances-application-gateway

2021年1月

最终编辑以记录2020年7月的这篇文章,在这篇文章中,你可以在Azure防火墙后面的虚拟网络中设置容器组。你可以在防火墙上配置用户定义的路由以及NAT和应用程序规则。通过使用此配置,你可以为Azure容器示例的入口和出口设置单个静态IP地址。
https://learn.microsoft.com/en-us/azure/container-instances/container-instances-egress-ip-address
记录以下各项的使用:

  • 容器组
  • Azure 防火墙
  • 预留公共IP
  • 路由通信量

缺点是Azure防火墙资源的开销。除此之外,这个解决方案是有效的。

2022年8月

另一个项目和这个问题再次出现。它可能是Azure负载平衡器,目前只支持VM后端池可能支持Azure容器示例(ACI)很快。
项目1
同时,我们需要一个单示例容器,通过TCP连接向设备提供FW映像。设备查找服务器IP端点。因此,在ACI资源中托管服务时,服务会在www.example.com主机名上执行DNS查找,并使用最新的公共IP地址为设备提供服务。然后,设备将路由到IP资源。azurecontainerregistery.io host name and serves the device with the most recent public IP address. Device then routes in to the IP resource. Handy work around for us when server side is initiating the command to a device polling into another service.
项目2
对于其他设备服务,在Azure负载平衡器后面的Azure D系列虚拟机上找到托管容器,并将Azure保留IP附加到WAN负载平衡器的(前端接口)工作正常。但是要在VM上运行Docker,您需要昂贵的D系列资源。仍然比Azure防火墙便宜。另一种选择是在VM上作为Windows服务运行,允许使用11美元的虚拟机资源,但如果使用Windows操作系统,则此小型虚拟机无法支持容器。
长期
我认为理想的情况是Azure负载平衡器,它具有指向多个小型廉价ACI示例的后端池的固定公共IP,因此我们不必担心操作系统管理。用于后端池资源的Azure VM Scale Set也有一些非常不错的自动缩放工具和开发运营集成。
谢谢

相关问题