Настройка шифрования трафика между узлами кластера

Чтобы настроить шифрование трафика между узлами кластера, вы можете включить использование протокола WireGuard для сетевого плагина Calico. После этого плагин начнет создавать защищенные туннели между узлами кластера.

  • Для работы WireGuard требуется ядро Linux версии 5.6 и выше, поскольку этот протокол встроен в ядро начиная с версии 5.6.

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

  • Трафик между подами на одном узле не шифруется.

Инструкции по устранению типичных проблем при работе WireGuard приведены в разделе Устранение проблем при эксплуатации системы.

Включение шифрования трафика

Чтобы включить шифрование трафика между узлами кластера, выполните следующие действия:

  1. Убедитесь что на всех узлах кластера открыт порт 51820.

  2. Подключитесь к терминалу master-узла кластера.

  3. Чтобы отслеживать статус WireGuard, установите утилиту wg с помощью менеджера пакетов вашей операционной системы, например:

    sudo dnf install -y yq wireguard-tools
  4. Включите параметр wireguardEnabled в ресурсе FelixConfiguration, выполнив следующую команду:

    kubectl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabled":true}}'
  5. Убедитесь, что шифрование трафика между узлами кластера включено:

    1. Проверьте, что в информации об узлах Calico появилось поле wireguardPublicKey:

      for node in $(kubectl get nodes -o yaml| yq '.items[].metadata.name'); do
        echo ">>> $node";
        calicoctl get node $node -o yaml | grep wireguardPublicKey;
      done
    2. Проверьте, что утилита wg возвращает информацию о конфигурации, с помощью следующих команд:

      sudo wg show
      sudo wg showconf wireguard.cali

Обновление ключей WireGuard

В Calico процесс обновления ключей WireGuard полностью автоматизирован и не требует ручных действий. Он встроен в работу компонента Felix на каждом узле кластера.

Обновление ключей выполняется следующим образом:

  1. Генерация новой пары ключей: компонент Felix периодически генерирует новую локальную пару ключей WireGuard (приватный и публичный ключи) на каждом узле кластера. Частота этой ротации не документирована как настраиваемый параметр и определяется внутренней логикой Calico.

  2. Размещение публичного ключа: после генерации нового ключа Felix автоматически обновляет статус своего узла (node resource) в Kubernetes API, сохраняя в аннотации или поле .status свой новый публичный ключ WireGuard.

  3. Обнаружение и применение: Felix постоянно отслеживает изменения в статусах всех узлов. Когда он обнаруживает, что у соседнего узла появился новый публичный ключ, он немедленно обновляет конфигурацию своего локального WireGuard-интерфейса (wireguard.cali), добавляя или заменяя ключ для соответствующего пира (peer).

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

Была ли полезна эта страница?

Обратная связь