我有一个运行REST API的ACI需要公开访问,但需要访问VNet内部的资源。
与普通VM不同的是,如果ACI在VNet内部,它不能拥有公共IP地址。如果您尝试给它一个DNS名称,则会失败。
唯一的选择似乎是使用应用程序网关,如此处所述: https://learn.microsoft.com/en-us/azure/container-instances/container-instances-application-gateway
以及这里:Assign Static Public Address to Azure Container Instance deployment
但是,这种方法有一个致命缺陷,在文档中已指出:“如果容器组停止、启动或重新启动,则容器组的私有IP可能会发生更改。如果发生这种情况,则需要更新应用程序网关配置。”
应用程序网关具有按资源名称选择后端池的选项,但这仅适用于普通VM。另一种选择是直接输入IP地址。
ACI很容易在不知情的情况下重新启动。从经验上看,主机会经常杀死它并重新启动它,可能会采用不同的IP地址。
如何在ACI实例上运行服务并将其暴露在互联网上,同时使其可以访问vnet后面的资源?显然,应用程序网关不是正确的方法。
我需要一个可以轻松使用Azure CLI的解决方案,因为我通过Bitbucket Pipes部署我的ACI。
更新:
Azure容器实例就像一堆垃圾。从vnet中公开它们的唯一方法是使用应用程序网关,但在运行了一个月后,它的成本比容器实例本身还要高!此外,在某些地区,Azure容器实例非常不稳定(在西欧,它们不断被终止),支持人员也不知道发生了什么(显然这是多个客户的问题)。因此,每次实例重新启动时,都会获得不同的IP地址,而昂贵的应用程序网关(每月可能超过100美元)甚至不知道IP地址已更改。