Вопрос или проблема
Я запустил экземпляр c3.xlarge Ubuntu в VPC. Этот экземпляр поддерживает 4 интерфейса. Я использую EC2 Python API для create_network_interface и attach_network_interface, чтобы добавить eth1, eth2 и eth3. В консоли AWS экземпляр запущен и работает. Все 4 сетевых интерфейса отображаются в консоли AWS с правильным идентификатором подсети.
Когда я подключаюсь к экземпляру по SSH и использую “ifconfig” для отображения интерфейсов, показывается только eth0. Если я использую “ifconfig -a”, я вижу eth0-3, но только у eth0 назначен IP-адрес.
Я что-то упускаю?
Заранее спасибо….
Редактирование:
С панели управления EC2 в консоли AWS я нажал на экземпляр->Описание, прокрутил вниз до раздела “Сетевые интерфейсы”, там отображаются все eth0, eth1, eth2 и eth3. Если я нажимаю на eth1 – eth3, они все показывают IP-адрес и статус, как это:
Сетевой интерфейс eth1
Идентификатор интерфейса
eni-119f304f
Идентификатор VPC
vpc-873db7e2
Владелец аттачмента
17xxxxxxxx79
Статус аттачмента
attached
Время аттачмента
Пт 09 сен 10:58:58 GMT-700 2016
Удалить при завершении
false
Частный IP-адрес
10.31.2.12
Частное DNS-имя
ip-10-31-2-12.us-west-2.compute.internal
Эластичный IP-адрес
Проверка источника/назначения
true
Описание
cluster001-demux-peer1
Группы безопасности
cluster001-demux
Частные IP-адреса созданы и назначены тем сетевым интерфейсам с точки зрения AWS.
/etc/network/interfaces показывает обычные вещи:
auto lo
iface lo inet loopback
# Исходные интерфейсы
# Пожалуйста, проверьте /etc/network/interfaces.d перед изменением этого файла
# так как интерфейсы могут быть определены в /etc/network/interfaces.d
# ПРИМЕЧАНИЕ: основное ethernet устройство определено в
# /etc/network/interfaces.d/eth0
# См. LP: #1262951
source /etc/network/interfaces.d/*.cfg
Вы не слишком много упустили. Только у eth0 есть IP, поэтому по умолчанию ifconfig покажет только его. Другим интерфейсам либо нужны IP, либо у них нет конфигурации в файлах ваших интерфейсов, либо у них нет DHCP-сервисов в их двухуровневых доменах широковещания.
Как насчет предоставления содержимого /etc/networks/interfaces, чтобы мы могли увидеть, что и как должно быть? То есть, если вы не видите проблему сразу.
Я разобрался. Мне нужно добавить задержку, например, time.sleep(1), между API create_network_interface и attach_network_interface на Python. Это было не обязательно, но теперь, похоже, инфраструктура AWS изменилась, и мне действительно нужно добавить эту задержку.
Теперь все работает…
Если кто-то столкнулся с этой проблемой, я столкнулся с чем-то подобным. В нашем случае это было из-за этого https://github.com/amazonlinux/amazon-ec2-net-utils/issues/86, где существует гонка между присоединением сетевого интерфейса и тем, когда стартует процесс udev в системе systemd. Если присоединение происходит до запуска этого процесса systemd, ENI не будет добавлено.
Ответ или решение
Для тех, кто сталкивается с проблемами видимости сетевых интерфейсов на Ubuntu-инстансах Amazon EC2 после их подключения через API Python, данная ситуация может вызывать определенные трудности, особенно если вы видите интерфейсы в консоли AWS, но они не отображаются с помощью команды ifconfig
на самом инстансе. Разберем эту проблему подробно с точки зрения её теории, примеров и применения решения.
Теория
Amazon Elastic Compute Cloud (EC2) предоставляет возможность масштабируемых вычислений в облаке Amazon Web Services (AWS). Сетевые интерфейсы в EC2 можно создать и прикрепить к инстансам, что расширяет их возможности сетевого соединения. Однако существует несколько подводных камней при конфигурации дополнительных интерфейсов, которые могут приводить к тому, что они не отображаются в ОС инстанса, как ожидается.
Когда вы создаете и подключаете дополнительные сетевые интерфейсы через API, взаимодействие с системой ОС может быть не синхронизировано, что ведет к недоразумениям относительно их сетевых конфигураций. В вашем случае, если вы видите интерфейсы в консоли AWS с соответствующими IP-адресами, а в системе на Ubuntu они не отображаются правильно, возможен ряд причин, таких как:
-
Липсинг поддержки DHCP: Дополнительным интерфейсам может не присваиваться IP автоматически, если не настроена их адресация в системе.
-
Отсутствие конфигурации интерфейсов: Ваша система может не содержать данных о новых интерфейсах, если отсутствуют соответствующие записи в файле конфигурации сетевых интерфейсов.
-
Гоночные условия (race conditions): Возможна ситуация, когда интерфейсы подключаются к инстансу EC2 раньше или позже, чем система ожидает. Несоответствие между временем подключения и конфигурацией ОС может препятствовать корректной настройке.
Примеры
Вы обнаружили, что команда ifconfig
по умолчанию отображает только интерфейсы с назначенными IP, однако ifconfig -a
показывает все интерфейсы, но лишь eth0 с IP-адресом. Такое поведение указывает на отсутствие или неверную конфигурацию для дополнительных интерфейсов в системе.
Вы также упомянули, что проблема была разрешена добавлением задержки между вызовами create_network_interface
и attach_network_interface
. Это может указывать на то, что сеть не успевала должным образом обрабатывать изменения из-за малой задержки между операциями.
Применение
Решение задачи требует реализации пошагового подхода к конфигурации дополнительных сетевых интерфейсов.
-
Настройка сети на уровне ОС:
-
Убедитесь, что в файле
/etc/network/interfaces
или в соответствующих файлах внутри/etc/network/interfaces.d/
прописаны все интерфейсы. Например:auto eth1 iface eth1 inet dhcp auto eth2 iface eth2 inet dhcp auto eth3 iface eth3 inet dhcp
-
-
Использование DHCP:
- Убедитесь, что в вашей сети настроен DHCP-сервер, который сможет обрабатывать запросы от новых интерфейсов, или настроить статические IP-адреса, если использование DHCP невозможно.
-
Рассмотрение гоночных условий:
- Известные проблемы с Amazon EC2, как упоминалось в вашем случае, могут быть связаны с временными зависимостями. Важно каждый шаг выполнения давать системе достаточно времени на обработку событий через задержки или проверки на готовность.
-
Тестирование и проверка:
- Перепроверьте настройки после ввода изменений. Используйте команды
ip link
иip addr
как альтернативуifconfig
для диагностики проблем с сетевыми интерфейсами. - Перезапустите сетевые службы с помощью
sudo service networking restart
или перезагрузите инстанс, чтобы применить все изменения.
- Перепроверьте настройки после ввода изменений. Используйте команды
Таким образом, интеграция дополнительных сетевых интерфейсов в Amazon EC2 требует тщательной настройки и понимания взаимодействия между сетью AWS и операционной системой Ubuntu. Четкая структура и тестирование каждой фазы помогут избежать или оперативно решить возникающие конфликты и ошибки в их конфигурации.