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

30 октября 2023 года несколько сервисов Cloudflare были недоступны в течение 37 минут. Это произошло из-за неправильной настройки инструмента развертывания, используемого Workers KV. Это был досадный инцидент, который усугубился тем, что Cloudflare полагалась на наш собственный набор продуктов. Мы глубоко сожалеем о том влиянии, которое это оказало на клиентов. Далее следует обсуждение того, что пошло не так, как инцидент был разрешен, а также работу, которую мы предпринимаем, чтобы гарантировать, что это не повторится.
Workers KV — это наше глобально распределенное хранилище ключей и значений. Он используется как клиентами, так и командами Cloudflare для управления данными конфигурации, поиска маршрутов, статических пакетов активов, токенов аутентификации и других данных, требующих доступа с малой задержкой.
Во время этого инцидента KV вернул, по его мнению, действительный код состояния HTTP 401 (неавторизованный) вместо запрошенной пары «ключ-значение» из-за ошибки в новом инструменте развертывания, используемом KV.
Эти ошибки проявлялись по-разному для каждого продукта в зависимости от того, как KV используется каждой службой. Их влияние подробно описано ниже.
На что повлияло
Ряд сервисов Cloudflare зависят от Workers KV для распространения конфигурации, информации о маршрутизации, обслуживания статических активов и состояния аутентификации по всему миру. Вместо этого эти службы получили ошибку HTTP 401 (неавторизованный) при выполнении любой операции получения, помещения, удаления или составления списка в пространстве имен KV.
Клиенты, использующие следующие продукты Cloudflare, наблюдали бы повышенный уровень ошибок и/или не могли бы получить доступ к некоторым или всем функциям на время инцидента:
Продукт | Влияние |
---|---|
Рабочие КВ | Клиенты с приложениями, использующими KV, столкнулись с сбоем этих приложений во время этого инцидента, включая как KV API в Workers, так и REST API. Рабочие приложения, не использующие KV, не пострадали. |
Страницы | Приложения, размещенные на страницах, были недоступны во время инцидента и возвращали пользователям ошибки HTTP 500. Развертывания новых страниц также возвращали пользователям ошибки HTTP 500 в течение этого времени. |
Доступ | Пользователи, не прошедшие аутентификацию, не могли войти в систему; любой источник, пытающийся проверить JWT с использованием конечной точки /certs, завершится неудачей; любое приложение с политикой состояния устройства завершилось сбоем для всех пользователей. Существующие сеансы входа в систему, в которых не использовалась конечная точка /certs или проверки состояния, не были затронуты. В целом, большой процент существующих сеансов по-прежнему был затронут. |
ИСКР/нулевое доверие | Пользователи не могли зарегистрировать новые устройства или подключиться к ресурсам, на которые распространяются политики, обеспечивающие проверку состояния устройства или тайм-ауты сеанса WARP. Устройства, уже зарегистрированные, ресурсы, не зависящие от состояния устройства или повторно авторизованные за пределами этого окна, не были затронуты. |
Изображений | Во время инцидента API изображений вернул ошибки. Существующая доставка изображений не пострадала. |
Очистка кэша (один файл) | Очистка одного файла была частично недоступна на время инцидента, поскольку некоторые центры обработки данных не могли получить доступ к данным конфигурации в KV. Центры обработки данных, в которых существующие данные конфигурации были локально кэшированы, не были затронуты. Другие механизмы очистки кэша, включая очистку по тегу, не были затронуты. |
Рабочие | Загрузка или редактирование Workers через панель управления, Wrangler или API возвращали ошибки во время инцидента. На развернутых работников это не повлияло, если только они не использовали KV. |
AI-шлюз | AI Gateway не смог пересылать запросы на время инцидента. |
Зал ожидания | Конфигурация зала ожидания хранится на периферии в Workers KV. Конфигурации зала ожидания и изменения конфигурации были недоступны, и услугу не удалось открыть. Когда доступ к KV был восстановлен, некоторые пользователи зала ожидания столкнулись с очередями, поскольку услуга возобновилась. |
Страницы турникетов и испытаний | Ресурсы JavaScript Turnstile хранятся в KV, а точку входа для Turnstile (api.js) не удалось обслужить. Клиенты, обращающиеся к страницам с помощью Turnstile, не могли инициализировать виджет Turnstile и не могли закрыться во время окна инцидента. Страницы задач (которые используют такие продукты, как пользовательские, управляемые правила и правила ограничения скорости) также используют инфраструктуру турникета для представления страниц задач пользователям при определенных условиях и блокируют пользователей, которым было предложено задание в течение этого периода. |
Панель управления Cloudflare | Части информационной панели Cloudflare, использующие Turnstile и/или наш внутренний инструментарий для флагов функций (который использует KV для настройки), в течение определенного времени возвращали пользователям ошибки. |
График
Все указанные временные метки указаны во всемирном координированном времени (UTC).
Время | Описание |
---|---|
2023-10-30 18:58 UTC | Команда Workers KV начала постепенное внедрение в производство новой сборки KV. |
2023-10-30 19:29 UTC | Внутренний API постепенного развертывания возвращает GUID промежуточной сборки при вызове списка рабочих сборок. |
2023-10-30 19:40 UTC | API прогрессивного развертывания использовался для продолжения развертывания выпуска. Это перенаправило часть трафика не в тот пункт назначения, что вызвало оповещение и привело к решению откатиться. |
2023-10-30 19:54 UTC | Попытка отката через API постепенного развертывания, трафик начинает сбоить в масштабе. — УДАРНЫЙ СТАРТ — |
2023-10-30 20:15 UTC | Инженеры Cloudflare вручную редактируют (с помощью механизмов разбития стекла) маршруты развертывания, чтобы вернуться к последней удачной сборке для большей части трафика. |
2023-10-30 20:29 UTC | Частота ошибок рабочих KV возвращается к нормальному уровню, существовавшему до инцидента, а затронутые службы восстанавливаются в течение следующей минуты. |
2023-10-30 20:31 UTC | Влияние устранено — УДАР КОНЕЦ — |
Как показано на приведенной выше временной шкале, между моментом, когда мы осознали проблему в 19:54 по всемирному координированному времени, и моментом, когда мы фактически смогли выполнить откат в 20:15 по всемирному координированному времени, произошла задержка.
Это было вызвано тем, что несколько инструментов Cloudflare полагаются на Workers KV, включая Cloudflare Access. Access использует Workers KV как часть процесса проверки запросов. Из-за этого мы не смогли использовать наши внутренние инструменты и были вынуждены использовать механизмы разбития стекла, чтобы обойти обычные инструменты. Как описано ниже, мы не потратили достаточно времени на тестирование механизмов отката. Мы планируем ужесточить это в дальнейшем.
Разрешение
Инженеры Cloudflare вручную (с помощью механизма разбития стекла) переключили производственный маршрут на предыдущую рабочую версию Workers KV, что немедленно устранило ошибочный путь запроса и впоследствии решило проблему с развертыванием Workers KV.
Анализ
Workers KV — это хранилище ключей и значений с низкой задержкой, которое позволяет пользователям хранить постоянные данные в сети Cloudflare, как можно ближе к пользователям. Это распределенное хранилище «ключ-значение» используется во многих приложениях, некоторые из которых являются собственными продуктами Cloudflare, такими как Pages, Access и Zero Trust.
Команда Workers KV постепенно развертывала новую версию, используя специализированный инструмент развертывания. Механизм развертывания содержит промежуточную и производственную среду и использует процесс, в котором производственная среда обновляется до новой версии с прогрессивной процентной долей до тех пор, пока все производственные среды не будут обновлены до самой последней производственной сборки. В инструменте развертывания была скрытая ошибка, связанная с возвратом выпусков и их соответствующих версий. Вместо возврата выпусков из одной среды инструмент возвращал более широкий список выпусков, чем предполагалось, в результате чего производственные и промежуточные выпуски возвращались вместе.
В этом инциденте служба была развернута и протестирована на промежуточной стадии. Но из-за ошибки автоматизации развертывания при переходе на рабочую версию неправильно ссылался на сценарий, который был развернут в промежуточной учетной записи, а не на предварительную версию в рабочей учетной записи. В результате механизм развертывания указывал производственной среде на версию, которая нигде в производственной среде не работала, эффективно блокируя трафик.

Когда это произошло, Workers KV стал недоступен в рабочей среде, поскольку вызовы продукта были направлены на версию, которая не была авторизована для производственного доступа, и возвращал код ошибки HTTP 401. Это приводило к сбою зависимых продуктов, которые хранили пары ключ-значение в KV, независимо от того, была ли пара ключ-значение кэширована локально или нет.
Хотя автоматическое оповещение обнаружило проблему сразу, между моментом, когда мы осознали, что у нас возникла проблема, и моментом, когда мы фактически смогли выполнить откат, произошла задержка. Это было вызвано тем, что несколько инструментов Cloudflare полагаются на Workers KV, включая Cloudflare Access. Access использует Workers KV как часть процесса проверки пользовательских JWT (веб-токенов JSON).
Эти инструменты включают панель мониторинга, которая использовалась для отмены изменений, и механизм аутентификации для доступа к нашей системе непрерывной интеграции (CI). Поскольку Workers KV прекратил работу, прекратились и эти службы. Автоматический откат через нашу систему CI был успешно протестирован ранее, но проблемы с аутентификацией (доступ зависит от KV) из-за инцидента сделали невозможным доступ к необходимым секретам для отката развертывания.
В конечном итоге исправлением стало ручное изменение пути производственной сборки на предыдущее и заведомо хорошее состояние. Известно, что этот путь был развернут и являлся предыдущей производственной сборкой перед попыткой развертывания.
Следующие шаги
Поскольку все больше команд Cloudflare основываются на Workers, мы «органически» оказались в месте, где Workers KV теперь лежит в основе огромного количества наших продуктов и услуг. Этот инцидент продолжает усиливать необходимость переосмысления того, как мы можем уменьшить радиус действия критических зависимостей, что включает в себя совершенствование наших инструментов развертывания, простоту их использования для наших внутренних команд и средства контроля на уровне продукта для эти зависимости. Мы уделяем приоритетное внимание этим усилиям, чтобы гарантировать, что этот инцидент не повторится.
Это также усиливает потребность Cloudflare в улучшении инструментов и безопасности этих инструментов в рамках постепенного развертывания приложений Workers внутри компании и для клиентов.
Это включает (но не ограничивается) приведенный ниже список ключевых последующих действий (в произвольном порядке) в этом квартале:
- Встроенное развертывание KV в стандартизированных моделях развертывания Workers, в которых используются автоматизированные системы для обнаружения и устранения последствий.
- Убедитесь, что процесс отката имеет доступ к заведомо исправному идентификатору развертывания и что он работает, когда Cloudflare Access не работает.
- Добавьте в развертывания предварительные проверки, которые будут проверять входные параметры, чтобы гарантировать, что несоответствия версий не распространятся на рабочие среды.
- Укрепите инструменты постепенного развертывания, чтобы они работали в режиме мультиарендности. Текущая конструкция предполагает одноарендную модель.
- Добавьте дополнительную проверку в сценарии постепенного развертывания, чтобы убедиться, что развертывание соответствует среде приложения (рабочей, промежуточной и т. д.).
Еще раз нам очень жаль, что произошел этот инцидент, и мы очень серьезно относимся к его последствиям для наших клиентов.