Поделиться через


Шифрование данных в процессе передачи с помощью WireGuard (открытая предварительная версия)

Поскольку организации все чаще полагаются на службу Azure Kubernetes Service (AKS) для запуска контейнеризованных рабочих нагрузок, обеспечение безопасности сетевого трафика между приложениями и службами становится актуальным, особенно в регулируемых или чувствительных к безопасности средах. Шифрование данных во время передачи с помощью WireGuard защищает их при перемещении между подами и узлами, снижая риски перехвата или изменения. WireGuard известен своей простотой и надежной криптографией, предлагает мощное решение для защиты связи в кластерах AKS.

Шифрование WireGuard для AKS является частью набора функций Advanced Container Networking Services (ACNS), и его реализация основана на Cilium.

Это важно

Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:

Область шифрования WireGuard

Шифрование через передачу WireGuard в AKS предназначено для защиты определенных потоков трафика в кластере Kubernetes. В этом разделе описывается, какие типы трафика шифруются и которые в настоящее время не поддерживаются через расширенные сетевые службы контейнеров (ACNS).

Поддерживаемые и зашифрованные потоки трафика:

  • Трафик между подами на разных узлах: трафик, покидающий под с одного узла и направляющийся в под на другом узле.

Неподдерживаемые или незашифрованные потоки трафика

  • Трафик pod с тем же узлом: трафик между модулями pod на одном узле
  • Сетевой трафик узла: трафик, созданный самим узлом, предназначенным для другого узла.

Обзор архитектуры

Шифрование WireGuard опирается на Azure CNI с поддержкой cilium, чтобы обеспечить связь между узлами в распределенной системе. В архитектуре используется выделенный агент WireGuard, который управляет ключами, конфигурацией интерфейса и динамическими обновлениями одноранговых узлов. В этом разделе предпринята попытка дать подробное объяснение

Схема проектирования WireGuard.

Агент WireGuard

При запуске агент Cilium оценивает свою конфигурацию, чтобы определить, включена ли шифрование. При выборе WireGuard в качестве режима шифрования агент инициализирует выделенную подсистему WireGuard. Агент wireguard отвечает за настройку и инициализацию компонентов, необходимых для применения шифрования WireGuard.

Создание ключей

Основным требованием для защиты связи является создание пар криптографических ключей. Каждый узел в кластере Kubernetes автоматически создает уникальную пару ключей WireGuard на этапе инициализации и распределяет его открытый ключ с помощью заметки "network.cilium.io/wg-pub-key" в пользовательском объекте ресурса Kubernetes CiliumNode. Пары ключей хранятся в памяти и поворачиваются каждые 120 секунд. Закрытый ключ служит конфиденциальным удостоверением узла. Открытый ключ делится с одноранговыми узлами в кластере для шифрования и расшифровки трафика от и к конечным точкам, управляемым Cilium. Эти ключи полностью управляются Azure, а не клиентом, обеспечивая безопасную и автоматическую обработку без необходимости вмешательства вручную. Этот механизм гарантирует, что только узлы с проверенными учетными данными могут участвовать в зашифрованной сети.

Создание интерфейса

После завершения процесса создания ключей агент WireGuard настраивает выделенный сетевой интерфейс (cilium_wg0). Этот процесс включает создание и настройку интерфейса с ранее созданным закрытым ключом.

Сравнение с шифрованием виртуальной сети

Azure предлагает несколько вариантов защиты транзитного трафика в AKS, включая шифрование на уровне виртуальной сети и шифрование на основе WireGuard. Хотя оба подхода повышают конфиденциальность и целостность сетевого трафика, они отличаются в области, гибкости и требованиях к развертыванию. В этом разделе показано, когда следует использовать каждое решение.

Используйте шифрование виртуальной сети, когда

  • Требуется полное шифрование сетевого уровня для всего трафика в виртуальной сети: Шифрование виртуальной сети гарантирует, что весь трафик независимо от рабочей нагрузки или уровня оркестрации автоматически шифруется по мере прохождения виртуальной сети Azure.

  • Вам нужна минимальная нагрузка на производительность: Шифрование виртуальной сети использует аппаратное ускорение в поддерживаемых типах виртуальных машин, перемещая обработку шифрования с ОС на базовое оборудование. Эта конструкция обеспечивает высокую пропускную способность с низким потреблением ЦП.

  • Все виртуальные машины поддерживают шифрование виртуальной сети: Шифрование виртуальной сети зависит от номеров SKU виртуальных машин, поддерживающих необходимое аппаратное ускорение. Если ваша инфраструктура полностью состоит из поддерживаемых SKU, шифрование виртуальной сети можно включить без проблем.

  • Конфигурации сети AKS поддерживают шифрование виртуальной сети: Шифрование виртуальной сети имеет некоторые ограничения, когда дело доходит до сети pod aks. Дополнительные сведения см. в поддерживаемых сценариях шифрования виртуальной сети

Используйте шифрование WireGuard, когда

  • Необходимо убедиться, что трафик вашего приложения шифруется на всех узлах; шифрование виртуальной сети не шифрует трафик между узлами на одном физическом хосте.

  • Вы хотите объединить шифрование в нескольких облачных или гибридных средах: WireGuard предлагает облачное решение, обеспечивающее согласованное шифрование между кластерами, работающими в разных облачных поставщиках или локальной среде.

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

  • Некоторые номера SKU виртуальных машин не поддерживают шифрование виртуальной сети: WireGuard реализуется в программном обеспечении и работает независимо от поддержки оборудования виртуальных машин, что делает его практическим вариантом для разнородных сред.

Соображения & ограничения

• WireGuard не соответствует FIPS . • Шифрование WireGuard не применяется к модулям pod, использующим сеть узлов (spec.hostNetwork: true), так как эти модули pod используют удостоверение узла вместо наличия отдельных удостоверений.

Это важно

Шифрование WireGuard работает на уровне программного обеспечения, что может привести к задержке и снижению производительности пропускной способности. Степень этого влияния зависит от различных факторов, включая размер виртуальной машины (SKU узла), конфигурацию сети и шаблоны трафика приложения. Наше тестирование показывает, что пропускная способность ограничена 1,5 Гбит/с с MTU 1500; Однако результаты могут отличаться в зависимости от характеристик рабочей нагрузки и конфигурации кластера. Использование SKU, поддерживающего MTU 3900, привело к пропускной способности, которая примерно в 2,5 раза выше. Хотя шифрование WireGuard можно использовать вместе с политиками сети, это может привести к дальнейшему снижению производительности, а также к снижению пропускной способности и увеличению задержки. Для приложений, чувствительных к задержке или пропускной способности, настоятельно рекомендуется сначала оценить WireGuard в нерабокой среде. Как всегда, результаты могут отличаться в зависимости от характеристик рабочей нагрузки и конфигурации кластера.

Pricing

Это важно

Расширенные услуги контейнерной сети предоставляются на платной основе. Дополнительные сведения о ценах см. в разделе "Расширенные сетевые службы контейнеров" — цены.

Дальнейшие шаги