如何为ECS容器设置固定私有IP?

如何为ECS容器设置固定私有IP?

我有一个名为的任务定义kafka-zookeeper,其中有一个 Apache Kafka 代理和一个 Zookeeper 节点。这些容器需要相互通信(这很容易),并且需要与其他 kafka-zookeeper 任务中的 kafka 和 zookeeper 容器进行通信,但我不知道该怎么做。

基本上,我需要这个:

                     ------------------------
___________________  | ___________________  | ___________________
|      Task1      |  | |      Task2      |  | |      Task2      |
|(kafka-zookeeper)|  | |(kafka-zookeeper)|  | |(kafka-zookeeper)|
| _____________   |  | | _____________   |  | | _____________   |
| |           |<------ | |           |   |  --->|           |   |
| | Kafka     |<-------->| Kafka     |<-------->| Kafka     |   |
| |___________|   |    | |___________|   |    | |___________|   |
|      ^          |    |       ^         |    |       ^         |
|      |          |    |       |         |    |       |         |
| _____v_______   |    | ______v______   |    | ______v______   |
| |           |   |    | |           |   |    | |           |   |
| | Zookeeper |<-------->| Zookeeper |<-------->| Zookeeper |   |
| |___________|<------ | |___________|   |  --->|___________|   |
|_________________|  | |_________________|  | |_________________|
                     |                      |
                     ------------------------

但我不知道如何设置任务之间的通信,因为任务的私有 IP 在启动后就已确定。此外,如果某个任务由于某种原因失败,则当创建另一个任务来代替它时,IP 将会不同。我该如何处理这个问题?

我还认为值得一提的是,zookeeper 和 kafka 通过包含其他实例的 IP 的环境变量了解其他实例。

由于我使用的是网络模式,因此我无法为容器提供主机名awsvpc

提前致谢!

答案1

我发现在网络模式下无法做到这一点awsvpc。我发现可以做到这一点的方法是按照以下方法本文,它使用 Lambda 函数,每次启动新任务时都会更新 Route53 记录。我对此进行了 Java 实现这里

相关内容