Вопрос или проблема
Мы использовали кластер eks (текущая версия 1.20) и управляемую группу узлов, использовали публичные IP-адреса узлов для наших нужд. Теперь, когда мы обновляем кластер eks и группу узлов до версии 1.21, все управляемые узлы будут запущены с новым IP-адресом, чего не должно происходить. Как это реализовать?
Некоторые наши клиенты используют публичный IP-адрес наших управляемых рабочих узлов из-за пределов нашей сети (nodePort) для связи с нашим приложением.
Вы не можете статически назначить Elastic IP конкретному рабочему узлу EKS, но вы можете сделать это динамически.
Посмотрите этот блог для получения более подробной информации:
https://itnext.io/attaching-an-elastic-ip-to-eks-worker-node-f69b9d8fa521
Ответ или решение
При обновлении кластера AWS EKS и управляемых узлов (managed nodegroup) может возникнуть проблема с изменением публичных IP-адресов узлов. Если ваше приложение зависит от стабильности IP-адресов для внешнего доступа, это может привести к серьезным сбоям в работе и неудовлетворенности клиентов. В данной статье мы рассмотрим, как избежать изменения публичных IP-адресов при обновлении кластера EKS и управляемых узлов.
Проблема
Вы используете кластер EKS версии 1.20 и управляемые узлы с конкретными публичными IP-адресами для доступа к вашему приложению. При обновлении до версии 1.21, узлы кластера будут заменены новыми экземплярами, что приведет к изменению их IP-адресов. Это может вызвать неожиданные проблемы для ваших клиентов, которые обращаются к вашему приложению через эти IP-адреса.
Решение
Чтобы предотвратить изменение публичных IP-адресов, вам рекомендуется использовать Elastic IP (EIP). Несмотря на то, что нельзя статически назначить Elastic IP к определённым узлам EKS, можно реализовать динамическое управление.
Шаг 1: Создание Elastic IP
- Войдите в AWS Management Console.
- Перейдите в раздел EC2.
- Найдите раздел Elastic IPs и выберите Allocate Elastic IP address.
- Сохраните полученный Elastic IP для будущего использования.
Шаг 2: Связывание Elastic IP с управляемыми узлами
При использовании управляющих узлов EKS, вам необходимо создать вспомогательную настройку, которая будет автоматически связывать созданный Elastic IP с новыми экземплярами в случае их создания.
-
Создание AWS Lambda: Напишите функцию Lambda, которая будет срабатывать при событиях запуска экземпляров инстансов EKS. Используя AWS SDK (Boto3 для Python), вы можете автоматически прикрепить ваш Elastic IP к каждому новому экземпляру.
Пример кода на Python с использованием Boto3:
import boto3 ec2 = boto3.client('ec2') allocations = ec2.describe_addresses() for allocation in allocations['Addresses']: if allocation['PublicIp'] == 'ваш_Elastic_IP': # Используйте этот Elastic IP для прикрепления к новому экземпляру pass
-
Настройка правил триггеров: Подключите триггеры к функции Lambda для отслеживания событий создания экземпляров в вашем EKS. Это можно сделать с помощью Amazon CloudWatch Events.
Шаг 3: Тестирование
После настройки Lambda функции и триггеров, создайте новый управляемый узел и убедитесь, что на него будет назначен ваш Elastic IP. При успешном связывании проверяйте, что ваш сервис продолжает работать без перебоев.
Заключение
Обновление кластера EKS и управляемых узлов может повлечь за собой серьезные изменения в публичных IP-адресах. Использование Elastic IP позволит вам сохранить стабильность IP-адресов, а главное, предотвратит перебои в работе вашего приложения. Важно помнить, что для динамического назначения Elastic IP необходимо иметь механизмы автоматизации через Lambda и CloudWatch Events.
Следуя данным рекомендациям, вы сможете эффективно обновить ваш EKS кластер и управление узлами, минимизируя при этом влияние на текущие рабочие процессы и клиентов.