语境
正在处理一个项目,以将一个 Restful API应用程序和单独的TCP服务部署到Azure容器实例。由于遗留原因,TCP服务需要一个静态Ipv4地址。
问题
我试图隔离我的选项,以将静态静态IP地址分配给Azure容器实例上托管的TCP服务。有什么选择 ?
经过测试
参见图。当我通过BASH session 查询时,API和TCP SERVICE的容器实例具有相同的专用IP地址。建议将它们托管在附图中的同一主机(称为“容器组”)上。不知道这是不是正确的标签,对不起,我是Container tech的新手。
感谢您的任何建议。
史考特
最佳答案
可能的解决方案
可能有解决方案:
现在,防火墙“规则”允许以下操作:
致力于将容器部署到此dev子网,表面上所有选项都存在,重定向端口,ip或FQDN。游戏的变化是能够为VNET中的资源分配静态公共(public)地址,并允许NAT,网络或应用程序规则重定向流量。
明天将更新结果线程。
更新2019年2月
好的,所以不要使用Azure防火墙资源。它非常昂贵,以我而言,无论如何都没有成本效益,每月约500英镑。我没有时间使用防火墙来测试该理论,但是由于成本的原因,没有必要进一步研究它。
Azure容器实例使您可以使用IP地址和完全限定的域名(FQDN)将容器直接暴露于Internet。创建容器实例时,可以指定一个自定义DNS名称标签,以便可以在customlabel.azureregion.azurecontainer.io上访问您的应用程序。不幸的是,目前ACI不支持静态公共(public)IP地址。
将容器组部署到虚拟网络时,存在某些限制。
https://feedback.azure.com/forums/602224-azure-container-instances
解决方案已部署
这最初是解决方案,但卸载和管理SSL证书增加了复杂性。
2019年3月更新-已部署新解决方案
如果有人感兴趣(基于查看该线程的次数而并不多),则最终部署的解决方案是:
值得注意的是,部署证书的唯一原因是要修复“服务”应用程序服务上的IP地址。解决当前缺少对Azure的支持以允许用户将静态IP地址应用于容器实例的方法。
2020年3月更新
由于引入了以下功能20/03/20,该帖子于3月更新,以供引用:
本文介绍了一种使用Azure应用程序网关公开容器组的静态公共(public)IP地址的方法。当您需要在Azure容器实例中运行的面向外部的容器化应用程序的静态入口点时,请执行以下步骤。
在本文中,您将使用Azure CLI为这种情况创建资源:
带有公共(public)前端IP地址的监听器,可在以下位置托管网站
网关,以及到后端容器组
只要应用程序网关运行并且容器组公开一个稳定的
网络的委托(delegate)子网中的私有(private)IP地址,可以通过此公共(public)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命令创建静态公共(public)IP资源。在后续步骤中,将该地址配置为应用程序网关的前端。az group create --name myResourceGroup --location eastus
az network public-ip create \
--resource-group myResourceGroup \
--name myAGPublicIPAddress \
--allocation-method Static \
--sku Standard
创建容器组运行以下az容器创建,以在上一步中配置的虚拟网络中创建一个容器组。
该组部署在myACISubnet子网中,并包含一个名为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容器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命令使用公共(public)前端IP地址和到后端容器组的路由创建网关。有关网关设置的详细信息,请参见Application Gateway文档。
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分钟才能创建应用程序网关。测试公共(public)IP地址
现在,您可以测试对在应用程序网关后面的容器组中运行的Web应用程序的访问权限。
运行az network public-ip show命令以获取网关的前端公共(public)IP地址:
az network public-ip show \
--resource-group myresourcegroup \
--name myAGPublicIPAddress \
--query [ipAddress] \
--output tsv
输出是一个公共(public)IP地址,类似于:52.142.18.133。要在成功配置后查看正在运行的Web应用程序,请在浏览器中导航到网关的公共(public)IP地址。成功访问类似于:
浏览器屏幕截图显示了在Azure容器实例中运行的应用程序
引用
https://docs.microsoft.com/en-us/azure/container-instances/container-instances-application-gateway
2021年1月
从2020年7月开始对本文进行最终编辑以记录本文,您可以在其中在Azure防火墙后面的虚拟网络中设置容器组。您可以在防火墙上配置用户定义的路由以及NAT和应用程序规则。通过使用此配置,您可以设置单个静态IP地址,以用于从Azure容器实例的入口和导出。
https://docs.microsoft.com/en-us/azure/container-instances/container-instances-egress-ip-address
记录以下用途:
不利的一面是Azure防火墙资源的开销。除此以外,解决方案有效。
关于azure - 将静态公共(public)地址分配给Azure容器实例部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53815807/