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

标签 azure azure-application-gateway azure-container-service azure-container-instances

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

出于某种原因,与普通虚拟机不同,如果 ACI 位于 vnet 内,则它不能具有公共(public) IP 地址。如果您尝试为其指定 DNS 名称,则会失败。

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

还有这里:Assign Static Public Address to Azure Container Instance deployment

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

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

ACI 可以在不知情的情况下轻松重新启动。根据经验,主机杀死它并重新启动它的情况相对频繁,可能会采用不同的IP。

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

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

更新:

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

最佳答案

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

关于azure - 公开 vnet 内的 Azure 容器实例的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66497630/

相关文章:

.net - 自 2012 年 6 月升级 SDK 1.7 以来,Azure 部署不断回收

Azure 应用程序网关在进行 JMeter 负载测试时随机遇到 504 网关超时

Azure 应用程序网关不显示来自后端池中其他 VNet 的 VM

Azure 应用程序网关出现错误 404,但后端探测正常

Azure - az aks cli azure 广告错误

Azure 容器服务 : Who patches, 更新,... (Kubernetes)

Asp.net 重定向到基于页面的 Azure AD 用户

c# - Azure Cosmos-db 重命名文档属性

Azure 私有(private) DNS 区域解析

Azure 应用程序服务 - docker 容器 - 在 CI/CD 后采用最新版本