没有ip地址的虚拟网络中容器组之间的联网

Networking between container groups in a virtual network without ip addresses

想象一下以下场景: 我有一个虚拟网络。其中有多个容器 groups/instances 需要相互通信。每个组都在一个单独的子网中。还有一个应用程序网关需要知道容器组,因为它将一些流量路由到它们。目前,通信通过 ip 地址进行。在部署期间,我告诉网关和一些容器组他们需要知道哪些 IP 地址。

我现在的问题是,每当容器组重新启动(无论是有意还是无意)时,它都可能获得一个新的 IP 地址。但是一切仍在使用旧的 ip 地址(因为他们怎么知道它改变了)。

我找不到指定静态私有 IP 地址或主机名或某种我可以安全使用的 fqdn 的方法。私人 DNS 在这里也不起作用,因为我无法更新它。所以名称仍会解析为旧 IP 地址。

有没有人知道虚拟网络中容器组之间的网络应该如何完成,当某些容器组重新启动或获得新的 ip 地址时,这很好?

我目前能想到的唯一可能的解决方案是,每当该组内的映像(重新)启动时,它也会更新 azure 中的私有 dns。但这并不是我真正认为的(好的)解决方案。图像不应该依赖于特定的主机(er)。此外,我还需要部署某种凭证,这也很糟糕。

目前,我认为没有适合您的解决方案。要知道,在 VNet 中创建容器组时不支持 DNS,并且您也无法决定在重新启动组时该组将使用什么 IP 地址。这就是它的设计方式。也许以后会更好

如果容器实例是您唯一的选择,我建议您在一个容器组中创建所有容器,这样容器就可以通过它们的端口而不是私有 IP 地址进行通信。如果您不介意使用其他服务,AKS 可能是您更好的选择。

我个人不会使用这个(所以不要标记为答案)。

Gary​​ Jackson 有以下 post 关于他如何解决这个问题。到目前为止,这是我能找到的最佳解决方案。

https://www.garyjackson.dev/posts/azure-container-instance-dns-private-ip/


另一种选择是将 Dapr 与 Web 服务代理一起使用,这样对 Web 服务的调用将由 ACI 处理(口齿不清)。 Dapr 很酷,但我的想法不是:)

https://docs.dapr.io/getting-started/quickstarts/serviceinvocation-quickstart/