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

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

Чтобы явно включить или выключить модуль 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

  • auth
    объект

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

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

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

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

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

    • auth.externalAuthentication
      объект

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

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

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

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

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

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

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

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

  • externalHost
    строка

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

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

  • externalIP
    строка

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

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

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

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

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

  • highAvailability
    булевый

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

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

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

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

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

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

  • https
    объект

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

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

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

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

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

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

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

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

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

    • 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

  • ingressClass
    строка

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

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

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

  • 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

  • loadBalancer
    объект

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

    • loadBalancer.annotations
      объект

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

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

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

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

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

  • nodeSelector
    объект

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

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

  • 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

  • pushDefaultGatewayToClient
    булевый

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

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

  • pushToClientDNS
    строка

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

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

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

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

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

    Пример:

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

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

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

  • tcpEnabled
    булевый

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

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

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

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

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

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

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

    Примеры:

    tunnelNetwork: 172.25.175.0/24
    
    tunnelNetwork: 172.25.178.0/255.255.255.0
    
  • 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 больше не поддерживается.