代码之家  ›  专栏  ›  技术社区  ›  jbx

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

  •  1
  • jbx  · 技术社区  · 4 年前

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

    出于某种原因,与普通虚拟机不同,如果ACI位于vnet内,它就不能有公共IP地址。如果你试图给它一个DNS名称,它就会失败。

    唯一的选择似乎是使用如下所述的应用程序网关: https://docs.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。

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

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

    更新:

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

    0 回复  |  直到 3 年前
        1
  •  1
  •   Charles Xu    4 年前

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