• Русский
  • Calico Network поддерживает шифрование WireGuard

    Calico поддерживает шифрование WireGuard как для IPv4, так и для IPv6 трафика, которое можно независимо включать с помощью параметров в ресурсе FelixConfiguration.

    Содержание

    Статус установки

    Установка по умолчанию

    Операционная системаВерсия ядра
    Linux5.6 и выше установлены по умолчанию
    Ubuntu 20.045.4.0-135-generic
    Kylin Linux Advanced Server V10 - SP34.19.90-52.22.v2207.ky10.x86_64

    Не установлено по умолчанию

    Операционная системаВерсия ядра
    openEuler4.18.0-147.5.2.13.h996.eulerosv2r10.x86_64
    CentOS 73.10.0-1160.el7.x86_64
    Redhat 8.74.18.0-425.3.1.el8.x86_64
    Kylin Linux Advanced Server V10 - SP24.19.90-24.4.v2101.ky10.x86_64
    Kylin Linux Advanced Server V10 - SP14.19.90-23.8.v2101.ky10.x86_64
    Kylin Linux Advanced Server V104.19.90-11.ky10.x86_64

    Терминология

    ТерминОбъяснение
    wireguardEnabledВключить шифрование для IPv4 трафика поверх IPv4 Underlay сети.
    wireguardEnabledV6Включить шифрование для IPv6 трафика поверх IPv6 Underlay сети.

    Примечания

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

    2. WireGuard поддерживает шифрование как для IPv4, так и для IPv6 трафика; если необходимо шифровать оба типа трафика, настройка должна выполняться отдельно. Для подробной настройки параметров обратитесь к Felix Configuration Documentation, настраивая параметры wireguardEnabled и wireguardEnabledV6.

    3. Если WireGuard не установлен по умолчанию, обратитесь к WireGuard Installation Guide для ручной установки, хотя возможны случаи, когда ручная установка модуля WireGuard не удаётся.

    4. Трафик между контейнерами на разных узлах будет зашифрован, включая сетевой трафик с одного хоста на другой; однако связь между Pod на одном узле и трафик между Pod и его хост-узлом не будет зашифрована.

    Требования

    • WireGuard должен быть установлен на всех узлах кластера заранее. Для подробностей обратитесь к WireGuard Installation Documentation. Узлы без установленного WireGuard не поддерживают шифрование.

    Процедура

    1. Включите или отключите шифрование для IPv4 и IPv6.

      Примечание: Следующие команды необходимо выполнять в CLI-инструменте на Master-узле, где находится узел.

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

        kubectl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabled":true}}'
      • Включить шифрование только для IPv6

        kubectl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabledV6":true}}'
      • Включить шифрование для IPv4 и IPv6

        kubectl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabled":true,"wireguardEnabledV6":true}}'
      • Отключить шифрование для IPv4 и IPv6

        • Способ 1: Выполнить команду в CLI для отключения шифрования.

          kubectl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabled":false,"wireguardEnabledV6":false}}'
        • Способ 2: Изменить конфигурационный файл felixconfiguration для отключения шифрования.

          1. Выполните команду для открытия конфигурационного файла felixconfiguration.

            kubectl get felixconfiguration -o yaml default
          2. Установите параметры wireguardEnabled и wireguardEnabledV6 в false для отключения шифрования WireGuard.

            apiVersion: crd.projectcalico.org/v1
            kind: FelixConfiguration
            metadata:
              annotations:
                projectcalico.org/metadata: '{"uid":"f5facabd-8304-46d6-81c1-f1816235b487","creationTimestamp":"2024-08-06T03:46:51Z"}'
              generation: 2
              name: default
              resourceVersion: "890216"
            spec:
              bpfLogLevel: ""
              floatingIPs: Disabled
              logSeverityScreen: Info
              reportingInterval: 0s
              wireguardEnabled: false # Измените на true для включения шифрования IPv4
              wireguardEnabledV6: false # Измените на true для включения шифрования IPv6
    2. После завершения настройки шифрования Calico WireGuard выполните следующую команду для подтверждения статуса шифрования WireGuard. Если включено шифрование IPv4 и IPv6, наличие wireguardPublicKey или wireguardPublicKeyV6 в поле Status указывает на успешное включение; если шифрование IPv4 и IPv6 отключено, эти поля не будут содержать wireguardPublicKey или wireguardPublicKeyV6, что означает успешное отключение.

      calicoctl get node <NODE-NAME> -o yaml # Замените <NODE-NAME> на имя узла.

      Вывод:

      Status:
          wireguardPublicKey: L/MUP9+Yxx/xxxxxxxxxxxx/xxxxxxxxxx =

    Проверка результата

    В этом документе приведён пример проверки трафика IPv4; проверка трафика IPv6 аналогична IPv4 и не повторяется.

    Проверка трафика IPv4

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

      root@test:~# ip rule   # Просмотр текущих правил маршрутизации
           0: from all lookup local
           99:  not from all fwmark 0x100000/0x100000 lookup 1    # Для всех пакетов без метки 0x100000 используется таблица маршрутизации 1
           32766:  from all lookup main
           32767 :  from all lookup default
      
      root@test:~# ip route show table 1    # Отобразить записи маршрутизации для таблицы 1.
          10.3.138.0 dev wireguard.cali scope link
          10.3.138.0/26 dev wireguard.cali scope link
          throw 10.3.231.192
          10.3.236.128 dev wireguard.cali scope link     # Трафик к IP 10.3.236.128 будет отправляться через интерфейс wireguard.cali
          10.3.236.128/26 dev wireguard.cali scope link
          throw 10.10.10.124/30
          10.10.10.200/30 dev wireguard.cali scope link
          throw 10.10.20.124/30
          10.10.20.200/30 dev wireguard.cali scope link
          throw
          10.13.138.0 dev wireguard.cali scope link
          10.13.138.0/26 dev wireguard.cali scope link
          throw 10.13.231.192/26
          10.13.236.128 dev wireguard.cali scope link
          10.13.236.128/26 dev wireguard.cali scope link
      
      root@test:~# ip r get 10.10.10.202    # Маршрут от текущего узла до IP 10.10.10.202
          10.10.10.202 dev wireguard.cali table 1 src 10.10.10.127 uid 0  cache   # При доступе к IP 10.10.10.202 пакет будет отправлен через интерфейс wireguard.cali, используя таблицу маршрутизации 1, с исходным адресом 10.10.10.127
      
      root@test:~# ip route    # Показать основную таблицу маршрутизации
          default via 192.168.128.1 dev eth0 proto static
          10.3.138.0/26 via 10.3.138.0 dev vxlan.
          blackhole 10.3.231.193
          10.3.231.194
          10.3.231.195
          10.3.231.196
          10.3.231.197
          3.231.192/26 proto 80
          dev cali8dcd31cIdOO scope link
          dev cali3012b5b29b scope link
          dev calibeefea2ff87 scope link
          dev cali2b27d5e4053 scope link
          dev cali1a35dbdd639 scope link
          calico on link
    2. Захват пакетов на узле для наблюдения трафика между узлами.

      root@test:~# ip a s wireguard.cali    # Просмотр подробной информации об интерфейсе wireguard.cali
          30: wireguard.cali: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1440 qdisc noqueue state UNKNOWN group default qlen 1000
          link/none
          inet 10.10.10.127/32 scope global wireguard.cali   # IP-адрес интерфейса wireguard.cali — 10.10.10.127
          valid_lft forever preferred_lft forever
      
      root@test:~# tcpdump -i wireguard.cali -nnve icmp   # Захват и отображение ICMP пакетов через wireguard.cali
          tcpdump: listening on wireguard.cali, link-type RAW (Raw IP), capture size 262144 bytes
          08:58:36.987559 ip: (tos 0x0, ttl 63, id 29731, offset 0, flags [DF], proto ICMP (1), length 84)
          10.10.10.125 > 10.10.10.202: ICMP echo request, id 1110, seq 0, length 64
          08:58:36.988683 ip: (tos 0x0, ttl 63, id 1800, offset 0, flags [none], proto ICMP (1), length 84)
          10.10.10.202 > 10.10.10.125: ICMP echo reply, id 1110, seq 0, length 64
          2 packets captured
          2 packets received by filter
          0 packets dropped by kernel
    3. Тестирование показывает, что трафик типа IPv4 пересылается через интерфейс wireguard.cali.