Kube-OVN Overlay Network поддерживает шифрование IPsec

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

Содержание

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

ТерминОбъяснение
IPsecПротокол и технология, используемые для защиты и проверки данных, передаваемых через интернет. Обеспечивает безопасную связь на уровне IP и в основном используется для создания виртуальных частных сетей (VPN) и защиты передачи IP-пакетов. IPsec обеспечивает безопасность данных преимущественно следующими способами:
  • Шифрование данных: с помощью технологий шифрования IPsec гарантирует, что данные не будут украдены или изменены во время передачи. Распространённые алгоритмы шифрования включают AES, 3DES и др.
  • Проверка целостности данных: IPsec использует хэш-функции (например, SHA-1, SHA-256) для проверки целостности данных, гарантируя, что данные не были изменены в процессе передачи.
  • Аутентификация: IPsec может проверять идентичность обеих сторон связи с помощью различных методов (например, предварительно разделённые ключи, цифровые сертификаты), чтобы предотвратить несанкционированный доступ.
  • Управление ключами: IPsec использует протокол Internet Key Exchange (IKE) для согласования и управления ключами шифрования.

Примечания

  • Включение IPsec может вызвать кратковременное прерывание сети на несколько секунд.

  • Если версия ядра — 3.10.0-1160.el7.x86_64, при включении функции IPsec в Kube-OVN могут возникнуть проблемы совместимости.

Предварительные требования

Выполните следующую команду, чтобы проверить, поддерживает ли текущее ядро операционной системы модули, связанные с IPsec. Если вывод показывает, что все модули, связанные с XFRM, имеют значение y или m, это означает поддержку IPsec.

cat /boot/config-$(uname -r) | grep CONFIG_XFRM

Вывод:

CONFIG_XFRM_ALGO=y
CONFIG_XFRM_USER=y
CONFIG_XFRM_SUB_POLICY=y
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_IPCOMP=m

Процедура

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

Включение IPsec

  1. Измените конфигурационный файл kube-ovn-controller.

    1. Выполните следующую команду для редактирования YAML-конфигурации kube-ovn-controller.

      kubectl edit deploy kube-ovn-controller -n kube-system
    2. Измените указанные поля согласно следующим инструкциям.

      spec:
        template:
          spec:
            containers:
              - args:
                  - --enable-ovn-ipsec=true # Добавьте это поле
                securityContext:
                  runAsUser: 0 # Измените значение на 0

      Объяснение полей:

      • spec.template.spec.containers[0].args: Добавьте - --enable-ovn-ipsec=true под этим полем.
      • spec.template.spec.containers[0].securityContext.runAsUser: Измените значение этого поля на 0.
    3. Сохраните изменения.

  2. Измените конфигурационный файл kube-ovn-cni.

    1. Выполните следующую команду для редактирования YAML-конфигурации kube-ovn-cni.

      kubectl edit ds kube-ovn-cni -n kube-system
    2. Измените указанные поля согласно следующим инструкциям.

      spec:
        template:
          spec:
            containers:
              - args:
                  - --enable-ovn-ipsec=true # Добавьте это поле
                volumeMounts: # Добавьте путь монтирования, смонтируйте том с именем ovs-ipsec-keys в контейнер
                  - mountPath: /etc/ovs_ipsec_keys
                    name: ovs-ipsec-keys
            volumes: # Добавьте том с именем ovs-ipsec-keys типа hostPath
              - name: ovs-ipsec-keys
                hostPath:
                  path: /etc/origin/ovs_ipsec_keys

      Объяснение полей:

      • spec.template.spec.containers[0].args: Добавьте - --enable-ovn-ipsec=true под этим полем.
      • spec.template.spec.containers[0].volumeMounts: Добавьте путь монтирования и смонтируйте том с именем ovs-ipsec-keys в контейнер.
      • spec.template.spec.volumes: Добавьте том с именем ovs-ipsec-keys типа hostPath под этим полем.
    3. Сохраните изменения.

  3. Проверьте, успешно ли функция была включена.

    1. Выполните следующую команду для входа в Pod kube-ovn-cni.

      kubectl exec -it -n kube-system $(kubectl get pods -n kube-system -l app=kube-ovn-cni -o=jsonpath='{.items[0].metadata.name}') -- /bin/bash
    2. Выполните следующую команду для проверки количества соединений Security Associations. Если их (число узлов - 1) в статусе up, это означает успешное включение.

      ipsec status | grep "Security"

      Вывод:

      Security Associations (2 up, 0 connecting):  # Поскольку в кластере 3 узла, видно, что количество соединений — 2 в статусе up

Отключение IPsec

  1. Измените конфигурационный файл kube-ovn-controller.

    1. Выполните следующую команду для редактирования YAML-конфигурации kube-ovn-controller.

      kubectl edit deploy kube-ovn-controller -n kube-system
    2. Измените указанные поля согласно следующим инструкциям.

      spec:
        template:
          spec:
            containers:
              - args:
                  - --enable-ovn-ipsec=false # Измените на false
                securityContext:
                  runAsUser: 65534 # Измените значение на 65534

      Объяснение полей:

      • spec.template.spec.containers[0].args: Измените значение поля enable-ovn-ipsec на false.
      • spec.template.spec.containers[0].securityContext.runAsUser: Измените значение этого поля на 65534.
    3. Сохраните изменения.

  2. Измените конфигурационный файл kube-ovn-cni.

    1. Выполните следующую команду для редактирования YAML-конфигурации kube-ovn-cni.

      kubectl edit ds kube-ovn-cni -n kube-system
    2. Измените указанные поля согласно следующим инструкциям.

      • Конфигурация до изменения

        spec:
          template:
            spec:
              containers:
                - args:
                    - --enable-ovn-ipsec=true # Измените на false
                  volumeMounts: # Удалите путь монтирования с именем ovs-ipsec-keys
                    - mountPath: /etc/ovs_ipsec_keys
                      name: ovs-ipsec-keys
              volumes: # Удалите том с именем ovs-ipsec-keys типа hostPath
                - name: ovs-ipsec-keys
                  hostPath:
                    path: /etc/origin/ovs_ipsec_keys

        Объяснение полей:

        • spec.template.spec.containers[0].args: Измените значение поля enable-ovn-ipsec на false.
        • spec.template.spec.containers[0].volumeMounts: Удалите путь монтирования с именем ovs-ipsec-keys.
        • spec.template.spec.volumes: Удалите том с именем ovs-ipsec-keys типа hostPath.
      • Конфигурация после изменения

        spec:
          template:
            spec:
              containers:
                - args:
                    - --enable-ovn-ipsec=false
                  volumeMounts:
              volumes:
    3. Сохраните изменения.

  3. Проверьте, успешно ли функция была отключена.

    1. Выполните следующую команду для входа в Pod kube-ovn-cni.

      kubectl exec -it -n kube-system $(kubectl get pods -n kube-system -l app=kube-ovn-cni -o=jsonpath='{.items[0].metadata.name}') -- /bin/bash
    2. Выполните следующую команду для проверки статуса соединения. Если вывода нет, это означает успешное отключение.

      ipsec status