Назад | Перейти на главную страницу

Как установить фиксированный частный IP-адрес для контейнеров ECS?

У меня есть определение задачи под названием 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 сетевой режим. Я нашел способ выполнить эту работу, следуя Эта статья, который использует лямбда-функцию, обновляющую записи Route53 при каждом запуске новой задачи. Я сделал Java-реализацию этого Вот.