• Русский
  • 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