Самый длинный простой за нашу историю

Коротко: 17 июня около часа ночи мы потеряли два ввода питания от города из-за аварии на подстанции, затем — один из дизелей, что вызвало «мигание» питания в подземном дата-центре. Итог инцидента — простой около 12 часов примерно 7–10 % машин одного из 14 наших ЦОДов.

Это просто дикая цепочка событий.


Это патрубок дизеля, перевязанный бинтом из админской аптечки. Сейчас расскажу, какую роль он тут сыграл.

Итак, мы потеряли оба городских ввода — всё как в худших домах Парижа. Как мы уже потом узнаем, вроде бы авария была на трансформаторе 110 кВт: при перераспределении мощностей с первого произошло замыкание второго. За полтора года это уже третий раз, когда пропадают оба луча, и вот тут я рассказывал, как мы почти сутки стояли на дизеле. Для клиентов это прошло незаметно (кроме той стойки, где при мигании света сгорел ИБП: там был простой на перезагрузку).

Штатно сработали ИБП, автоматически завелись дизель-генераторы, ЦОД продолжил работу. У нас общая энергосеть с соседним ЦОДом всё в том же подземном бомбоубежище. Общее потребление — 0,5 МВт, дизелей — на 1,05 МВт.

Через два часа, около 3:30 ночи, лопнул патрубок дизеля 0,5 МВт, отчего он внезапно перестал работать. Админы убежища переключили мощности на дизели 2 х 100 КВт и 2 х 200 КВт. В момент переключения нагрузка снова легла на ИБП, а за два часа они не успели восстановиться, и часть оборудования выключилась.

Это запустило целую цепочку последствий, потому что при этом выключении погорела одна из плат коммутатора, обеспечивавшего доступ в нашу сеть управления ЦОДом, то есть все удалённые доступы.

На площадке остались два админа, которым нужно было включить вручную коммутаторы и стойки, починить дизель и понять, что вообще происходит.

Дисклеймер: мы ещё не до конца разобрались с логами и причинно-следственными связями, но сейчас я пишу по горячим следам. Возможно, дальше выяснятся ещё интересные детали. Сейчас мы сосредоточились в основном не на расследовании инцидента, а на устранении последствий. Детальный разбор будет позже.

Что было с городскими вводами
Они пропали. Авария коснулась всего микрорайона. Мы относимся к важным потребителям электроэнергии, поэтому восстановление наших мощностей — первый приоритет для города. У нас не было городского ввода примерно с часа ночи до обеда, около 10 дали первый луч, через пару часов — второй.

Как можно видеть по заявкам в районе, жилые дома восстанавливали позже, то есть устраняли аварию максимально быстро для нас.



Почему только два админа
Ночь с субботы на воскресенье, особо охраняемая территория. В течение двух часов с начала инцидента всё идёт относительно предсказуемо, и помощь не нужна. Админы работают штатно. Примерно в 3:30 становится понятно, что нужно высылать подкрепление, но в этот момент уже:

Коммутатор защищённого сегмента сети вышел из строя.
Админы разбираются с дизелями и пытаются включить оборудование, то есть ходят от стойки к стойке и определяют, что случилось с каждой машиной.
Четыре других дизеля перегреваются и собираются отключиться.

Самое печальное — коммутатор защищённого сегмента, который включился, но работал неправильно. Это сегмент, в котором стоит DDoS-защита, то есть через него подключено около 7 % IP-адресов ЦОДа. Коммутатор зарезервирован по принципу HOT SWAP, то есть точно такой же лежит в коробке в шкафу в админской. Мы не думали строить кластер из двух коммутаторов, потому что не похоже, что DDoS-защита относится к критичным сегментам: при выходе её из строя примерно на 5–20 минут (время физической замены коммутатора) возможны DDoS.

То есть центральный коммутатор у нас нормально в кластере, а один из листов, относительно небольшая и относительно нетребовательная к непрерывности подсеть, на хотсвапе. Это была ошибка, и здесь мы здорово облажались.

Во-первых, оказывается, что тяжело менять коммутатор, когда ты держишь руками патрубок дизеля. Кроме физической замены, там нужно импортировать правила и ACL.

Во-вторых, на то, чтобы понять, что с ним что-то не так, тоже ушло время. Он не сгорел полностью, а включился и вроде бы начал работать. После его включения полетела часть ACL, и он отрезал нам управляющие сервера от сети.

В этот момент около 3:30 мы остались без сервисдеска, мониторинга, корпоративного мессенджера и одной из реплик сайта. Мессенджер тут же деградировал до «Телеграма», веб-сервер сайта автоматически поднялся в другом ЦОДе, а вот от мониторинга и сервисдеска такой подставы мы не ждали.

На мониторинг, в частности, было завязано определение оставшегося свободного места в ЦОДах, а оставшееся свободное место в ЦОДе определяет возможность создавать в нём новую виртуальную машину.

Это означало, что автоматика не видит свободного места, потому что источник данных для панели управления находился именно в глючившем защищённом сегменте. А потому система не даёт возможности создать новые ВМ в каждом из ЦОДов сети.

Выглядело это как крестик на создание ВМ на каждом из ЦОДов нашей сети, что начало вызывать панику в чате клиентов хостинга:

Это уже семь утра, когда существенная часть клиентов проснулась. До семи утра было ещё два отключения питания и перехода на уже истощённые ИБП. Перегрелся и начал нестабильно работать один из малых дизелей, а большой ещё не успели перебинтовать. И вообще, админы не очень хорошо ремонтируют дизели: это немного не их профиль работы.

Соответственно, клиенты пытались перенести свои ВМ в другие ЦОДы по миру, но из-за сбоя мониторинга не могли этого сделать: система не давала создать новые ВМ.

Начиная с шести утра мы пытались ответить клиентам, что происходит, но сами не до конца понимали масштаб проблемы из-за отвалившегося мониторинга.


Админы были отрезаны от мира
Я неслучайно сказал, что это ночь с субботы на воскресенье на особо охраняемой территории. Дело в том, что после начала всем известных событий территория стала просто параноидально охраняемой.

Среди всего прочего в рамках общей параноизации нам отозвали все постоянные пропуска и заменили их на систему одноразовых пропусков персонала посменно. То есть около 3:40 ночи, когда уже стало понятно, что в ЦОДе не помешают лишние руки, никого отправить туда мы не могли, потому что люди встали бы на проходной.

Бюро пропусков по ночам не работает, по воскресеньям — тоже.

Это значит, что мы не можем отправить ещё админов и не можем отправить дизель. Дизель на 0,5 МВт у нас под рукой был после прошлого инцидента, и мы подтащили его к территории около девяти утра, но попасть внутрь не могли.

Охрана понимала всю серьёзность ситуации (насколько могла) и очень хотела помочь, но ровно в рамках своих полномочий: им нужно было разбудить своего начальника, чтобы он разрешил нештатную ситуацию. Попасть на территорию получилось только около 13:00.

До этого момента в ЦОДе было две пары рук.

До кучи около семи часов дышать в админской стало довольно тяжело: из-за погоды и перепада давления при открытии гермозоны (вентиляция работала только в вычислительном сегменте) внутрь засасывало выхлоп дизелей с улицы, который в обычное время просто улетал бы в окружающее пространство.

Админы разрывались между попытками ремонта дизеля, жонглированием мощностями, включением стоек и сетевого оборудования и попытками понять, что происходит с защищённым сегментом. Плюс время от времени им было нужно подниматься на воздух, чтобы не разболелась голова.

Восстановление
Когда приехал резервный дизель, всё встало на свои места.

Мы восстановили питание и более-менее последовательно разобрались, что происходит. Стало понятно, что с коммутатором, поменяли его, подняли защищённый сегмент. Там подцепился мониторинг, который нарисовал нам всю картину ночи. В этот же момент на нас упали все тикеты, которые клиенты хостинга поставили за ночь, потому что заработала очередь.


Последние сервера поднялись около 16 часов: это когда мы подключили в бой тот самый защищённый сегмент, стоявший за частично погоревшим коммутатором.

Клиенты, естественно, были не очень довольны:


Интересно, что больше всего тикетов с паникой было у пользователей наиболее экономичных тарифов. То есть те, у кого был действительно критичный проект, развернули его на нескольких геоплощадках. Бывалые админы достаточно спокойно наблюдали за паникой людей в чате:



Общий итог такой:
  • 23% клиентов ДЦ вообще ничего не заметили, остальные могли ощутить даунтайм до 120 минут.
  • 7-8 % виртуальных машин было недоступно более трёх часов. Мы не можем сказать точнее: верхняя оценка — 10 %, но мы знаем, что часть машин в рассыпавшемся сегменте отвечала, по косвенным данным, что это было всё же 7 %. Максимальный даунтайм на отдельных серверах из 7-8% составлял 16 часов.
  • Всё 13 остальных ЦОДов работали штатно, но отсутствие мониторинга не давало создавать на них новые ВМ.
  • Всё решилась после прибытия подмоги, то есть с 13:00 до 15:00. К 16:30-17:00 доступность была 100% восстановлена.
  • В нашем ЦОДе не работало, по верхней оценке, 10 % оборудования. У соседей же была настоящая паника: у них пострадало до 75 % оборудования (судя по их письму клиентам).

Сколько/чего выключилось:
  • Количество НОД перезагрузившихся из-за перепада/отсутствия питания в ночь аварии — 68 %: 24 % в 3:30, 26 % в 4:50 и 18 % в 6:00.
  • Количество НОД дц Rucloud, которых не затронула авария — 23 %.
  • Количество НОД дц Rucloud, которые стали доступны после решения проблемы с коммутатором (самое большое время простоя) — 8 %.
  • Количество НОД дц Rucloud, которые были перезагружены 18-19 июня в результате выявленных последствий аварии — 1 %.

Разбор ошибок
Из того, на что мы могли повлиять:
  • Нужен не двойной запас по дизелям, а больший: ночь показала, что двух недостаточно, нужно 2N + 1 минимум. Поскольку в кризисы мы объединяем энергосеть с соседями, договорились, что введем в эксплуатацию (дизель уже куплен, ожидаем к нему кожух) вместе ещё один 0,5 МВт ДГУ и разместим на территории.
  • Коммутатор защищённого сегмента должен был быть задублирован в кластере. Как только мы разместили за DDoS-защитой мониторинг, сеть стала критичной, но мы этот момент упустили и оставили узкое место с ручной заменой железяки. Оказалось, что у неё есть не только бинарные состояния «однозначно работает» и «однозначно не работает», но и промежуточные.
  • Тот факт, что мониторинг и тикет-система не были зарезервированы в другом ЦОДе, — это пощёчина нашему достоинству. Мы чёртовы параноики из финансов, и именно мы остались без мониторинга. Дублирование было в разработке и намечалось на конец июля. Немного не успели. Исторически эти системы размещались в первом нашем ЦОДе, теперь нужно распределять их по гриду, чтобы даже масштабный сбой никак не влиял на возможность заказывать виртуалки и обращаться в поддержку в других ЦОДах.

Я пережил несколько очень неприятных моментов этой ночью и понял, что нам нужен публичный мониторинг.

С моей точки зрения ситуация выглядела так: ужасно усталый я пришёл домой вечером, бросил телефон с 3 % заряда на столик и вырубился. Около шести часов я проснулся, решил, что быстро не засну, включил телефон почитать Хабр и сорвал джекпот в виде лавины уведомлений. Технический директор хостинга ночью тоже спал. Но он никогда не отключает телефоны, и звонки админов у него всегда дают громкий сигнал. Он разруливал ситуацию с часа ночи. Хорошо, что телефония в ЦОДе у нас как раз была зарезервирована правильно.

Фактически утром я не мог точно понять, что произошло (как и все мы: для полноты картины нужно было бы дозвониться до админов и поговорить с ними больше 20 минут).

В итоге я и ещё несколько человек пытались отвечать клиентам в чате. Дежурная смена отвечала официальным фразами, а я пытался дать больше информации.

Мы рассылали вот такое письмо:
Всем привет!

В районе 3:00 по МСК произошла авария на подстанции, в результате чего в дата-центре Rucloud (г. Королёв) были нарушены оба ввода электроснабжения. Проблема повлекла за собой перезапуск коммутационного ядра и длительный период восстановления. На момент аварии оборудование дата-центра работало на аварийных дизель-генераторах, но сейчас проблема устранена, и доступность всех нод уже восстановлена. Специалисты работают над восстановлением доступа к единичным оставшимся оффлайн виртуальным машинам, и в ближайшее время доступ должен полностью восстановиться.

По предварительным данным, аварийные работы затронули не более 10 % серверного оборудования в дц Rucloud. Остальные 13 дата-центров работают в штатном режиме, и проблем там не наблюдалось.

Если ваша виртуальная машина была среди тех, что затронула сегодняшняя авария, обязательно свяжитесь с нами по почте support@ruvds.com. Каждый случай простоя будем решать индивидуально и начислять компенсации за простой.

Подробный отчёт по аварии ждите в нашем блоге на Хабре в ближайшие дни.
Приносим свои извинения за доставленные неудобства!

В телеграм-канале был сущий кошмар. Дело в том, что в России уже было два случая, когда хостинг внезапно отключался целиком, а потом больше никогда не включался. И среди наших клиентов были админы, повидавшие некоторое дерьмо и знающие особенности ИТ-бизнеса в этой стране. Поэтому они, естественно, волновались. Мне очень нужно было объяснить, что происходит, но я никак не мог сам собрать информацию рано утром.

Никто не верил, что в одном из 14 ЦОДов был сбой, который затронул до 10 % железа. Отдельно меня обижали фразы вроде: «Чего вы хотите за такие деньги?» Аварии бывают и там, где на порядок дороже. У нас нет умышленной ставки на некачественные услуги. Неважно, сколько заплатить: зарезервироваться на 100 % не получится. Самое обидное в этой истории, что раздолбаями на этот раз оказались не мы. Точнее, мы тоже, но, трезво оценивая ситуацию, мы всё же в меньшей степени.

Вторая особенность была в том, что шквал звонков снёс поддержку нам и всем соседям, потому что люди звонили по всем телефонам и нам, и им.

Более-менее связную картину произошедшего мы получили только около восьми утра.

В целом это, наверное, — самый тяжёлый наш кризис, потому что мы его переживали при 100-процентно заполненном машзале. Когда гермозона стоит полупустой, есть резерв по мощности: формируется тот самый 2N + 1, а не просто 2N. У нас такой роскоши не было. В целом мы сейчас переберём архитектуру сети, но куда важнее, что мы в Москве принципиально делаем ставку на развитие Останкино (вот пост про него) — ЦОДа повышенной ответственности. И в убежище, и в М9 гермозоны уже заполнены полностью, и новых стоек просто нет. В случае М9, где мы делим площадку с другими компаниями, нет места даже в стойках соседей.

Итог: нам нужен сервис публичного мониторинга доступности нод. Обычный хостинг такого делать не будет, потому что инциденты принято скрывать. Особенно если они затронули не очень большую часть клиентов. Просто телеграм-канала, Хабра и поддержки не хватает. Нужна система, которая сама обновляется и показывает объективные данные всё время, даже если это не очень удобно для нас в моменте.

В процессе слова поддержки от вас были очень приятны. Благодарности в конце тоже очень грели. Спасибо! Это было очень тяжело, но то, что вы с пониманием отнеслись, — это очень приятно.

ruvds.com

E3-1245v2 / 32 GB DDR3 / 2x960 GB SSD - 2700р./месяц, 0р. установка





Срочно с распродажи освобождаются около 40 выделенных серверов
E3-1245v2 [4c-8t] (3.8GHz) / 32 GB DDR3 / 2x960 GB SSD / 100Mbps — 2700р./месяц, 0р. установка
Если берете разом все, цена будет еще ниже.

  • Диски новые
  • Дата-центр OVH, Франция GRA RBX
  • Безлимитный трафик
  • Anti-DDoS
  • Панель управления сервером

Для заказа создайте тикет panel.abcd.host либо пишите в чат на сайте abcd.host.

Спасибо что остаетесь с нами,
ABCD.HOST

5 июня 2023



5 июня 2023
  • Панель переведена на бразильский португальский язык, огромная благодарность Жоао Родригесу.

8 марта 2023
  • Панель локализована на итальянский язык, огромная благодарность Риккардо Олларгиу.
  • Мы благодарим Фила Гонсалеса за его помощь в улучшении испанской версии FASTPANEL.

14 декабря 2022
  • Добавлена ​​поддержка PHP 8.2.
  • Панель локализована в Турции, огромное спасибо Yasin Yilmaz.

fastpanel.direct

Обновление SmartDedic - теперь дедики с бекапом!

Уважаемые клиенты!

Мы рады представить вам новое обновление опции SmartDedic для выделенных серверов!
Теперь вы можете сделать полноценные бекапы своих выделенных серверов со всеми данными!
Опция уже доступна в панели управления SmartDedic :)
И самое главное, это полностью бесплатно!

Спасибо, что вы с нами!

Рассказываем о произошедших и ближайших изменениях







Избавились от большого количества legacy кода, который сильно замедлял разработку нового функционала;
  • Интегрировали синхронизацию всех доступных ресурсов для заказа в каждой из локации (по каждому тарифу просчитывается каждые 30 минут). Синхронизация происходит уже сейчас, в следующем релизе личного кабинета появится и отображение (скриншот 1);
  • Меняется основной домен с hip-hosting.com на hip.hosting. Старый домен будет выполнять редирект на новый;
  • Всё больше и больше текста доступно для отображения на 2 языках. Стремимся к показателю в 100%;
  • Изменили отображение услуг в дашборде на более компактное, а также добавили меню быстрых действий для каждого сервера (скриншот 2);
  • В разделе финансов теперь отображаются последние платежи (скриншот 3);
  • Оборудование уже достигло датацентра в США. Скоро установка в стойку и разворачивание инфраструктуры; Германия также довольно близка к запуску.

В свете изменений и улучшений совсем не исключено, что у нас появится и посуточная аренда серверов во всех локациях.
my.hip-hosting.com/hiplets/new

Proxmox Virtual Environment 8.0 with Debian 12 "Bookworm" released



ВЕНА, Австрия — 22 июня 2023 г. — Разработчик корпоративного программного обеспечения Proxmox Server Solutions GmbH (далее «Proxmox») сегодня выпустила стабильную версию 8.0 своей платформы управления виртуализацией серверов Proxmox Virtual Environment. Этот основной выпуск основан на последней версии Debian 12 («Книжный червь») и поставляется с тщательно протестированным и подробным путем обновления для пользователей Proxmox VE 7.4 или более ранних версий, чтобы обеспечить плавное обновление. Proxmox VE 8.0 использует более новое ядро Linux 6.2 в качестве стабильного по умолчанию и включает обновления последних версий ведущих технологий с открытым исходным кодом для виртуальных сред, таких как QEMU 8.0.2, LXC 5.0.2, ZFS 2.1.12 и Ceph Quincy 17.2. 6.

Платформа виртуализации от Proxmox поставляется со всеми необходимыми инструментами управления и простым в использовании пользовательским веб-интерфейсом. Это позволяет удобно управлять отдельными хостами или всем дата-центром с помощью готовых инструментов — либо через веб-браузер, либо через командную строку.

Дополнительные особенности Proxmox Virtual Environment 8.0
  • Новый репозиторий Ceph Enterprise: Proxmox Virtual Environment полностью интегрирует Ceph Quincy, позволяя запускать и управлять хранилищем Ceph непосредственно с любого из узлов кластера, а также легко настраивать гиперконвергентную инфраструктуру и управлять ею. Исходный код Ceph упаковывается командой разработчиков Proxmox и — после обширных тестов — доставляется в стабильный репозиторий Enterprise. Это унифицирует доставку Ceph с другими компонентами Proxmox VE. С версией 8.0 все клиенты Proxmox с активной подпиской теперь могут получить доступ к стабильному репозиторию Ceph Enterprise, рекомендованному для производственных сред.
  • Задания синхронизации области аутентификации: Синхронизация пользователей и групп для областей на основе LDAP (LDAP и Microsoft Active Directory) теперь может быть настроена на автоматический запуск через регулярные промежутки времени. Это упрощает управление и устраняет источник ошибок и упущений конфигурации по сравнению с синхронизацией области вручную.
  • Сетевые ресурсы, определенные для программно определяемой сети (SDN), теперь также доступны как объекты в подсистеме управления доступом (ACL) Proxmox VE. Конкретным пользователям и группам можно предоставлять подробные разрешения для сетевых мостов узлов и виртуальных сетей.
  • Сопоставления ресурсов: Сопоставления между ресурсами, такими как устройства PCI(e) или USB, и узлами в кластере Proxmox VE теперь можно создавать и управлять ими в API и веб-интерфейсе. Гости ВМ могут получить такой назначенный абстрактный ресурс, который можно сопоставить с конкретными ресурсами на каждом узле. Это позволяет осуществлять автономную миграцию для виртуальных машин со сквозными устройствами. Сопоставления также представлены в системе ACL Proxmox VE, позволяя пользователю получить доступ к одному или нескольким определенным устройствам, не требуя root-доступа. В случае обнаружения конфликтующей записи, например. из-за изменения или перекрытия адресов пользователи информируются о запуске ВМ.
  • Надежная блокировка для двухфакторной аутентификации/TOTP: для дальнейшего повышения безопасности учетные записи пользователей со слишком большим количеством попыток входа в систему, не прошедших двухфакторную аутентификацию, блокируются. Это защищает от атак, когда пользовательский пароль получается, а второй фактор пытается подобрать методом грубой силы. Если TFA дает сбой слишком много раз подряд, учетная запись пользователя блокируется на один час. Если TOTP терпит неудачу слишком много раз подряд, TOTP отключается для учетной записи пользователя. Учетная запись пользователя может быть снова разблокирована с помощью ключа восстановления или вручную администратором.
  • Текстовый пользовательский интерфейс (TUI) для установщика ISO: добавлен текстовый пользовательский интерфейс, который теперь можно использовать для сбора всей необходимой информации. Это устраняет проблемы при запуске графического установщика на основе GTK, которые иногда возникают как на очень новом, так и на довольно старом оборудовании.
    Модель x86-64-v2-AES — это новый тип ЦП по умолчанию для ВМ, созданных через веб-интерфейс. Он предоставляет важные дополнительные функции по сравнению с qemu64/kvm64 и повышает производительность многих вычислительных операций.
Proxmox Virtual Environment — это бесплатное программное обеспечение с открытым исходным кодом, опубликованное под Стандартной общественной лицензией GNU Affero, v3. ISO содержит полный набор функций и может быть установлен на «голое железо». Proxmox VE 8.0 доступен для загрузки по адресу www.proxmox.com/downloads.

Инструкции по плавному обновлению с Proxmox VE 7.x до 8.x задокументированы по адресу pve.proxmox.com/wiki/Upgrade_from_7_to_8.
Также можно установить Proxmox VE 8.x поверх Debian.

Для корпоративных пользователей Proxmox Server Solutions GmbH предлагает модель поддержки на основе подписки, которая обеспечивает доступ к тщательно протестированному корпоративному репозиторию с регулярными обновлениями через веб-интерфейс, а также техническую поддержку на основе подписки. Цены начинаются от 105 евро в год за процессор.

Объявление Leaseweb Deutschland GmbH о нашем новом официальном адресе офиса

Уважаемый клиент,

Сообщаем вам, что официальный адрес Leaseweb Deutschland GmbH изменился на Hanauer Landstra ß e 121, 60314 Frankfurt am Main, Germany

Вы можете увидеть это изменение адреса на нашем веб-сайте и во всех официальных документах Leaseweb Deutschland GmbH.

Если у вас есть какие-либо вопросы, свяжитесь с нами, создав заявку на клиентском портале Leaseweb. Мы всегда рады помочь.

С наилучшими пожеланиями,
Лизевеб Дойчланд ГмбХ

Cloud4Y предоставил инфраструктуру и виртуальные рабочие столы компании Мерчант Контакт



Использование виртуальных мощностей позволило упорядочить и упростить часть внутренних бизнес-процессов компании.

ООО «Мерчант Контакт» работает в сфере ритейла, и специфика деятельности требует постоянного управления рядом внутренних процессов, а также совместной работы сотрудников, которые могут находится в разных регионах и разных часовых поясах. Долгое время компания пользовалась собственной инфраструктурой, но постепенно пришло понимание, что требуется более эффективное и управляемое решение, построенное на облачной платформе.

После изучения рынка и тестирования виртуальной инфраструктуры нескольких облачных провайдеров, «Мерчант Контакт» сделал выбор в пользу Cloud4Y. Решение корпоративного облачного провайдера отлично подошло для задач совместного и непрерывного использования виртуальных столов с доступом к внутренним базам данных компании.

Виртуальные рабочие столы на базе облачной платформы Cloud4Y стандартизированы и полностью готовы к работе. Они круглосуточно доступны через интернет с настольного ПК, ноутбука, мобильного или любого другого устройства. Использование удалённых рабочих столов упрощает совместную работу над задачами и повышает эффективность взаимодействие сотрудников. Высокая сохранность и доступность данных достигается за счёт ежедневного резервного копирования.

Использование облачной платформы Cloud4Y по модели IaaS и работа с виртуальными рабочими столами позволило ООО «Мерчант Контакт» оптимизировать и повысить прозрачность работы с базами данных, наладить непрерывность бизнес-процессов.

Как мы подключили более 250 000 IoT-устройств к облаку

Inheaden недавно помогла одному из своих клиентов подключить IoT-устройства к облаку с помощью Kubernetes Kosmos. Кристиан Хайн, директор по информационным технологиям в Inheaden, расскажет нам, как им это удалось, какие проблемы им пришлось преодолеть и какие обходные пути им пришлось предпринять, чтобы добраться туда, где они должны были быть. Но мы позволим Крису рассказать вам о деталях.

Наш клиент в сфере Интернета вещей (IoT) производит устройства IoT, которые отправляют данные, такие как положение GPS, состояние батареи, данные датчиков и т. д. Связь с устройствами IoT осуществляется через UDP, а проприетарный микросервис затем собирает эти UDP. пакеты и декодирует их.

Требование было довольно простым: серверная часть должна иметь возможность отправлять пакет на одно устройство IoT, которое включает или выключает функцию. Хотя это звучит довольно просто, это не сразу стало возможным из-за специфического способа настройки инфраструктуры. Нам нужен был реальный IP-адрес IoT-устройства для управления функцией при прямом соединении, но по разным причинам, о которых мы поговорим ниже, IP-адрес не сохранился при передаче.

В конце концов мы нашли решение, используя Kubernetes Kosmos и Envoy от Scaleway. Но давайте немного вернемся назад, чтобы увидеть, с чего мы начали и как мы туда попали.

Подключение устройств IoT с мобильным соединением и ограниченной пропускной способностью
Мобильное соединение устройств IoT устанавливается с помощью радиотехнологии LPWAN. Этот стандарт радиосвязи, разработанный для межмашинной связи (M2M), является энергоэффективным, может проникать в здания и надежно передавать данные. Недостатком этой технологии является то, что у нас ограниченная пропускная способность.

Из-за этого перегруженные протоколы, такие как TCP, — не лучший способ отправки данных с устройства на серверную часть. Поскольку HTTP/1 и HTTP/2 основаны на TCP, использование HTTPS для соединения также нежелательно.

Так как же эти устройства безопасно передают данные?
В области стандарта радиосвязи LPWAN имя частной точки доступа (частное APN) от оператора мобильной сети (MNO) используется для передачи данных с устройств IoT в сеть компании с использованием устаревшего VPN-подключения. Это устаревшее VPN-подключение заканчивается на виртуальной машине (ВМ). Каждое устройство получает частный IP-адрес из CIDR сети частного класса, например, 10.200.0.0/16.

Смена облачного провайдера
У предыдущего провайдера нашего клиента инфраструктура была настроена таким образом, что устаревший туннель VPN был напрямую подключен к соответствующим серверам для рабочей среды и среды предварительного просмотра.

После перехода на Scaleway несколько лет назад мы настроили его таким образом, чтобы пакеты UDP от устройств IoT поступали на рабочий сервер через туннель Wireguard VPN. На рабочей и промежуточной ВМ у нас был статический внутренний IP-адрес, на который устройства IoT отправляли свои данные.

Затем входящие данные на производственном и промежуточном серверах передавались в кластер Kubernetes.

Наша задача: сохранить IP-адрес IoT-устройства
Проблема, связанная со старой инфраструктурой, заключалась в том, что клиентский IP-адрес IoT-устройства (например, 10.200.21.22) не сохранялся — мы не могли видеть реальный IP-адрес устройства, потому что у нас было несколько уровней NAT между ними.

Даже когда мы пытались полностью маршрутизировать пакеты, у нас все еще был уровень NAT на последнем этапе, где UDP-пакеты поступали в кластер Kubernetes через nodePort. Здесь IP-адрес источника был изменен на внутренний IP-адрес узла Kubernetes (подробнее о работе сети Kubernetes).

Почти два года не было необходимости видеть IP-адрес IoT-устройства, так как UDP-пакеты приходили на коннектор декодирования и передавали информацию об IMEI и IMSI устройства, которые затем можно было присвоить в бэкенде.

Так было до тех пор, пока наш клиент не захотел, чтобы серверная часть могла отправлять пакет на устройство IoT для включения или выключения функции. Для этого нам нужен был реальный IP-адрес IoT-устройства. И это не сработает с промежуточными слоями NAT. Мы смогли ответить на пакеты с UDP-устройства, но не более того.

Как бы мы решили эту проблему?
Прокси-протокол в помощь?

После некоторых исследований мы обнаружили, что протокол прокси ( HA Proxy — Proxy Protocol ) может помочь нам сохранить IP-адрес клиента. Многие реализации прокси-протокола имеют дело с обычными HTTP-соединениями. Но, как было сказано выше, HTTP у нас не работает. Нам нужна была реализация, которая работает с UDP.
И там возможные решения снова начали таять — мы смогли найти только несколько возможных подходов, которые могли бы соответствовать нашим потребностям.

Подход udppp/mmproxy
mmproxy — это инструмент, разработанный Cloudflare для сохранения IP-адресов клиентов в среде UDP. В дополнение к mmproxy мы также используем небольшой инструмент под названием udppp. udppp работает на локальном порту, на который отправляются исходные пакеты UDP.

udppp добавляет к пакету заголовок Proxy Protocol и отправляет его на IP-адрес, указанный вами в командной строке. Затем mmproxy берет этот пакет, удаляет заголовок Proxy Protocol и создает новый пакет с IP_TRANSPARENTопцией волшебного сокета. Подробнее о режиме IP Transparent читайте в этом блоге от Cloudflare.

С помощью записи в блоге Энди Смита о сохранении клиентских IP-адресов в Kubernetes мы реализовали sidecar-контейнер на микросервисе декодирования. После некоторых тестов мы увидели, что этот подход работает — IP-адрес клиента сохраняется.

Хотя подход был успешным, на некоторые вопросы все еще не были даны ответы:
  • Как пакеты возвращаются на устройство IoT без прохождения уровня NAT?
  • Насколько масштабируемо это решение?
Чтобы решить первую проблему, мы попробовали несколько хаков iptables для отправки пакетов обратно, но в конечном итоге этот подход не удался — обратный маршрут был невозможен.

Подход Wireguard Pod
Как упоминалось ранее, мы использовали Wireguard для подключения старых серверов к серверу шлюза. Поэтому мы подумали: «Почему бы нам не попробовать разместить соединение в кластере?»

С этой идеей мы создали Wireguard Pod, который установил безопасное VPN-соединение с нашим сервером-шлюзом. После некоторых взломов iptables и нескольких ошибок мы обнаружили, что этот подход также не работает, потому что сеть Wireguard не известна узлу Kubernetes напрямую. В этом случае внутренняя маршрутизация кластера невозможна. Маршрутизация на основе политик тоже не работала. Обратного пути тоже не было.

Нам было трудно понять, что эти два подхода вообще не работают. Поэтому я решил сделать шаг назад и покопаться в голове, чтобы найти подход. Затем я понял, что читал кое-что о пирах в документации для Kubernetes CNI Kilo, которая лежит в основе настоящего многооблачного предложения Scaleway, Kubernetes Kosmos.

Kubernetes Kosmos и Envoy спешат на помощь!
Прочитав некоторую документацию о пирах Kilo, я опробовал подход с ресурсом пиров Kilo:
apiVersion: kilo.squat.ai/v1alpha1
kind: Peer
metadata:
  name: gw-peer
spec:
  allowedIPs:
    - 10.4.0.99/32 # Single IP for the peer
    - 192.168.0.0/24 # Device testing subnet
  publicKey: <PublicKey of the Peer>
  persistentKeepalive: 10

С помощью инструмента командной строки kgctl мы получили конфигурацию Wireguard для шлюза. После добавления этой конфигурации настал волнующий момент, и мы протестировали наш подход на поде. Мы задавались вопросом, сохранились ли у нас как клиентские IP-адреса, так и двунаправленное соединение с тестовой установкой. К счастью, ответ на оба вопроса был «да» — это сработало! Мы приступили к подключению тестовой установки к нашему кластеру Kosmos.

Маленький шаг назад
Для распределения трафика IoT-устройств нам нужна была возможность балансировки нагрузки входящих UDP-пакетов. Самым простым решением было использование IP сервиса Kubernetes.

Мы попробовали этот подход, но потом увидели внутренний Kilo IP узла. Мы обнаружили, что входящие пакеты на исходный IP-адрес Kubernetes получают исходный NAT (SNAT). Мы создали issue в репозитории kilo на Github, и сопровождающий проекта подтвердил, что Kubernetes будет SNAT-пакеты в текущей реализации.

К сожалению, эта проблема нарушает реализацию, чтобы сохранить исходный IP-адрес устройства IoT. А без исходного IP-адреса мы все равно не сможем обратиться к IoT-устройству.

Последняя часть головоломки: Посланник
Для решения задач, с которыми мы столкнулись, необходимо было сработать следующие моменты:
  • Нам нужна балансировка нагрузки UDP-пакетов на наши модули Kubernetes.
  • Поскольку IP-адрес модуля меняется каждый раз, системе необходимо обновлять существующие новые IP-адреса модуля.
  • Исходный IP-адрес IoT-устройства должен быть сохранен.
После некоторого исследования подходящих прокси, которые могли бы решить нашу проблему, мы наткнулись на Envoy. После некоторых попыток мы разработали конфиг, который поддерживал все указанные пункты:
  • Envoy поддерживает балансировку нагрузки с пакетами UDP.
  • Envoy может разрешать измененные IP-адреса подов с помощью dns_resolversопции — понадобилось только создание безголового сервиса в Kubernetes.
  • С помощью опции use_original_src_ip: trueмы смогли сохранить исходный IP-адрес устройства IoT.
  • После того, как все критерии были выполнены, мы настроили производственную среду, в которой сервер с VPN-туннелем был подключен к кластеру в качестве узла Kilo. После тщательного тестирования все заработало, как и ожидалось.


Как только мы узнали, как заставить его работать с одним устройством, мы подключили к облаку более 250 000 устройств IoT с помощью решения Scaleways Kubernetes Kosmos.