如何在vnet内部暴露Azure容器实例?

12

我有一个运行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地址已更改。

1个回答

1
如果您只想使用ACI,则没有解决方法。您已经找到的是在VNet内访问ACI的唯一方法。但是,如果您不介意,也许您可以使用AKS,然后启用虚拟节点,那么您也可以在VNet中运行ACI并在外部访问它。当然,您也可以仅使用AKS,在其中运行应用程序并在外部访问。

@jbx 这只是建议。AKS比ACI更重,但是当ACI无法达到你的目的时,AKS是一个不错的选择。 - Charles Xu
1
谢谢。令人沮丧的是,对于一个如此明显且简单的需求,我不得不采用一个复杂的解决方案。另外抱怨一下:Azure中的东西总是看起来不够完善! - jbx
@jbx 这是否解决了你的问题,还是对此问题有任何其他问题? - Charles Xu
正如我在回答中所说的,除了 Azure 应用程序网关或 Azure 负载均衡器之外,没有其他方式可以访问 VNet 中的 ACI。这两种方式都需要一个静态私有 IP,如果它更改了,则无法再次使用。 - Charles Xu
1
将您的答案标记为正确仅仅因为ACI是垃圾并且没有任何支持方式是不合适的。刚刚发现,应用程序网关每月的成本比其公开的容器实例还要高!最终,我选择放弃ACI。 - jbx
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接