Модуль не включен по умолчанию в каком-либо наборе модулей.

Как явно включить или отключить модуль…

Чтобы явно включить или выключить модуль openvpn, установите spec.enabled в true или false в ModuleConfig/openvpn (создайте, при необходимости), или воспользуйтесь командой deckhouse-controller module в поде d8-system/deckhouse.

Пример включения модуля:

  • с помощью ресурса ModuleConfig:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: openvpn
    spec:
      enabled: true
    
  • с помощью команды deckhouse-controller (требуется kubectl, настроенный на работу с кластером):

    kubectl -ti -n d8-system exec svc/deckhouse-leader -c deckhouse -- deckhouse-controller module enable openvpn
    

Пример выключения модуля:

  • с помощью ресурса ModuleConfig:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: openvpn
    spec:
      enabled: false
    
  • с помощью команды deckhouse-controller (требуется kubectl, настроенный на работу с кластером):

    kubectl -ti -n d8-system exec svc/deckhouse-leader -c deckhouse -- deckhouse-controller module disable openvpn
    

Чтобы настроить модуль, используйте custom resource ModuleConfig с именем openvpn (подробнее о настройке Deckhouse…).

Пример ресурса ModuleConfig/openvpn для настройки модуля:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: openvpn
spec:
  version: 2
  enabled: true
  settings: # <-- Параметры модуля из раздела "Параметры" ниже.

Параметры

Версия схемы: 2

  • settings
    объект
    • settings.auth
      объект

      Опции, связанные с аутентификацией или авторизацией в приложении.

      • settings.auth.allowedUserGroups
        массив строк

        Массив групп, пользователям которых позволен доступ в панель администратора OpenVPN.

        Используется, если включен модуль user-authn или параметр externalAuthentication.

        Внимание! При использовании совместно с модулем user-authn необходимо также добавить разрешенные группы в соответствующее поле в настройках DexProvider.

      • settings.auth.externalAuthentication
        объект

        Параметры для подключения внешней аутентификации (используется механизм NGINX Ingress external-auth, работающий на основе модуля Nginx auth_request.

        Внешняя аутентификация включается автоматически, если включен модуль user-authn.

        • settings.auth.externalAuthentication.authSignInURL
          строка

          URL, куда будет перенаправлен пользователь для прохождения аутентификации (если сервис аутентификации вернул код ответа HTTP, отличный от 200).

        • settings.auth.externalAuthentication.authURL
          строка

          URL сервиса аутентификации. Если пользователь прошел аутентификацию, сервис должен возвращать код ответа HTTP 200.

      • settings.auth.whitelistSourceRanges
        массив строк

        Список адресов в формате CIDR, которым разрешено проходить аутентификацию для доступа в OpenVPN.

    • settings.externalHost
      строка

      IP-адрес или домен, по которому клиенты подключаются к OpenVPN-серверу.

      По умолчанию используются данные из сервиса с именем openvpn-external.

    • settings.externalIP
      строка

      IP-адрес одного из узлов кластера, который будет использоваться для подключения клиентов OpenVPN.

      Требуется только при использовании inlet’а ExternalIP.

    • settings.externalPort
      целочисленный

      Порт, который вывешивается наружу на externalIP или балансировщике.

      По умолчанию: 5416

    • settings.highAvailability
      булевый

      Ручное управление режимом отказоустойчивости.

      По умолчанию режим отказоустойчивости определяется автоматически. Подробнее про режим отказоустойчивости.

    • settings.hostPort
      целочисленный

      Порт для подключения к OpenVPN-серверу, который будет доступен на узле, на котором запущен под OpenVPN.

      Параметр доступен при выборе inlet’а HostPort.

      По умолчанию: 5416

    • settings.https
      объект

      Тип сертификата, используемого для панели администратора OpenVPN.

      При использовании этого параметра полностью переопределяются глобальные настройки global.modules.https.

      • settings.https.certManager
        объект
        • settings.https.certManager.clusterIssuerName
          строка

          ClusterIssuer, используемый для панели администратора OpenVPN.

          Доступны letsencrypt, letsencrypt-staging, selfsigned, но вы можете определить свои.

          По умолчанию: "letsencrypt"

      • settings.https.customCertificate
        объект
        • settings.https.customCertificate.secretName
          строка

          Имя Secret’а в пространстве имен d8-system, который будет использоваться для панели администратора OpenVPN (данный Secret должен быть в формате kubernetes.io/tls).

          По умолчанию: "false"

      • settings.https.mode
        строка

        Режим работы HTTPS:

        • CertManager — панель администратора OpenVPN будет работать по HTTPS, самостоятельно заказывая сертификат с помощью ClusterIssuer, заданного в параметре certManager.clusterIssuerName;
        • CustomCertificate — панель администратора OpenVPN будет работать по HTTPS, используя сертификат из пространства имен d8-system;
        • Disabled — панель администратора OpenVPN будет работать только по HTTP;
        • OnlyInURI — панель администратора OpenVPN будет работать по HTTP (подразумевая, что перед ней стоит внешний HTTPS-балансировщик, который терминирует HTTPS) и все ссылки в user-authn будут генерироваться с HTTPS-схемой. Балансировщик должен обеспечивать перенаправление с HTTP на HTTPS.

        Допустимые значения: Disabled, CertManager, CustomCertificate, OnlyInURI

    • settings.ingressClass
      строка

      Класс Ingress-контроллера, который используется для панели администратора OpenVPN.

      По умолчанию используется глобальное значение modules.ingressClass.

      Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$

    • settings.inlet
      строка

      Способы подключения из внешнего мира.

      Поддерживаются следующие inlet’ы:

      • ExternalIP — когда имеются узлы с публичными IP-адресами. Используется в комбинации с параметром externalIP;
      • LoadBalancer — для всех облачных провайдеров и их схем размещения, в которых поддерживается заказ LoadBalancer’ов;
      • HostPort — порт сервера OpenVPN будет доступен на узле, на котором находится под. За выбор порта отвечает параметр hostPort;
      • Direct — для нестандартных случаев. В пространстве имен d8-openvpn необходимо создать сервис с именем openvpn-external, который отправляет трафик в под с лейблом app: openvpn на порт с именем ovpn-tcp (или просто 1194). Из этого сервиса парсится externalIP, IP-адрес балансировщика или его host. Если ничего этого нет, необходимо указать параметр externalHost.

      Допустимые значения: ExternalIP, LoadBalancer, HostPort, Direct

    • settings.loadBalancer
      объект

      Секция опциональных настроек для inlet’а LoadBalancer.

      • settings.loadBalancer.annotations
        объект

        Аннотации, которые будут проставлены сервису для гибкой настройки балансировщика.

        Внимание! Модуль не учитывает особенности указания аннотаций в различных облаках. Если аннотации для заказа балансировщика применяются только при создании сервиса, для обновления подобных параметров вам необходимо будет выключить и включить модуль.

      • settings.loadBalancer.sourceRanges
        массив строк

        Список адресов в формате CIDR, которым разрешен доступ на балансировщик.

        Облачный провайдер может не поддерживать данную опцию и игнорировать ее.

    • settings.nodeSelector
      объект

      Структура, аналогичная spec.nodeSelector пода Kubernetes.

      Если значение не указано или указано false, будет использоваться автоматика.

    • settings.pmacctEnabled
      булевый

      Включить логирование пользовательской активности через VPN в JSON-формате.

      Все соединения внутри tun-интерфейсов будут собраны через libpcap и записаны в лог в виде {"event_type": "purge", "ip_src": "172.25.175.10", "ip_dst": "10.222.0.10", "port_src": 32172, "port_dst": 53, "ip_proto": "udp", "packets": 1, "bytes": 53}.

      По умолчанию: false

    • settings.pushDefaultGatewayToClient
      булевый

      Направить весь трафик клиентов через VPN. У клиентов при подключении будет добавлен маршрут по умолчанию через VPN-туннель.

      По умолчанию: false

    • settings.pushToClientDNS
      строка

      Адрес DNS-сервера, который отправляется клиентам при подключении.

      По умолчанию используется IP-адрес сервиса kube-system/kube-dns.

    • settings.pushToClientRoutes
      массив строк

      Список маршрутов, которые отправляются клиентам при подключении.

      По умолчанию генерируется автоматически из локальной сети кластера, сервисной подсети и подсети подов.

      Пример:

      pushToClientRoutes:
      - 172.25.176.0/24
      - 172.25.178.0/255.255.255.0
      
    • settings.pushToClientSearchDomains
      массив строк

      Список доменов поиска, которые отправляются клиентам при подключении.

      По умолчанию используется значение из переменной global.discovery.clusterDomain.

    • settings.tcpEnabled
      булевый

      По умолчанию: true

    • settings.tolerations
      массив объектов

      Структура, аналогичная spec.tolerations пода Kubernetes.

      Если значение не указано или указано false, будет использоваться автоматика.

      • settings.tolerations.effect
        строка
      • settings.tolerations.key
        строка
      • settings.tolerations.operator
        строка
      • settings.tolerations.tolerationSeconds
        целочисленный
      • settings.tolerations.value
        строка
    • settings.tunnelNetwork
      строка

      Подсеть, используемая для туннеля OpenVPN-сервера.

      По умолчанию: "172.25.175.0/24"

      Примеры:

      tunnelNetwork: 172.25.175.0/24
      
      tunnelNetwork: 172.25.178.0/255.255.255.0
      
    • settings.udpEnabled
      булевый

      По умолчанию: false

Аутентификация

По умолчанию используется модуль user-authn. Также можно настроить аутентификацию с помощью параметра externalAuthentication. Если эти варианты отключены, модуль включит basic auth со сгенерированным паролем.

Посмотреть сгенерированный пароль можно командой:

kubectl -n d8-system exec svc/deckhouse-leader -c deckhouse -- deckhouse-controller module values openvpn -o json | jq '.openvpn.internal.auth.password'

Чтобы сгенерировать новый пароль, нужно удалить Secret:

kubectl -n d8-openvpn delete secret/basic-auth

Внимание! Параметр auth.password больше не поддерживается.