Amazon-Ecs

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

  • May 7, 2020

我有一個名為 的任務定義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網路模式。

提前致謝!

我發現使用awsvpc網路模式無法做到這一點。我發現完成這項工作的方法是遵循這篇文章,它使用一個 Lambda 函式,每次啟動新任務時都會更新 Route53 記錄。我在這裡做了一個java實現。

引用自:https://serverfault.com/questions/1012148