公开 vnet 内的 Azure 容器实例的正确方法是什么?

What is the proper way to expose an Azure Container Instance that is inside a vnet?

我有一个 ACI 运行宁一个 REST API 需要public公开,但需要访问 vnet 内的资源。

出于某种原因,与普通 VM 不同,如果 ACI 在 vnet 中,它不能有 public IP 地址。如果您尝试给它一个 DNS 名称,它会失败。

唯一的选择似乎是使用此处所述的应用程序网关: https://docs.microsoft.com/en-us/azure/container-instances/container-instances-application-gateway

还有这里:

但这种方法有一个致命的缺陷,如文档本身所示:“如果容器组停止、启动或重新启动,容器组的私有 IP 可能会发生变化。如果发生这种情况,您将需要更新应用程序网关配置。"

应用程序网关可以选择 select 按资源名称创建后端池,但这仅适用于普通 VM。另一种选择是直接输入 IP 地址。

ACI 很容易在不知不觉中重启。根据经验,主机杀死它并重新启动它的情况相对经常发生,可能会使用不同的 IP。

在 Internet 上的 ACI 实例上公开服务 运行ning 并同时让它访问 vnet 后面的资源的正确方法是什么?应用程序网关方法显然不是正确的方法。

我需要一个可以轻松使用 Azure CLI 的解决方案,因为我正在通过 Bitbucket Pipes 部署我的 ACI。

更新:

Azure 容器实例只是一堆垃圾。从 vnet 公开它们的唯一方法是使用应用程序网关,运行使用一个月后,最终成本超过了容器实例本身!此外,Azure 容器实例在某些地区非常不稳定(在西欧,它们不断被杀死),支持不了解正在发生的事情(显然这是多个客户的问题)。因此,每次实例重新启动时,它都会获得不同的 IP 地址,而成本高昂的应用程序网关(每月可 运行 超过 100 美元)甚至不知道 IP 地址已更改。

如果只想用ACI,那就没办法解决了。你发现的是访问 VNet 内 ACI 的唯一方法。但是如果你不介意的话,也许你可以使用AKS,然后启用虚拟节点,那么你也可以运行 VNet中的ACI并在外部访问它。当然,你也可以只使用AKS,它也可以帮助你运行VNet内的应用和外网访问。