Находится в процессе активного развития. Функциональность может существенно измениться.

Модуль по умолчанию выключен. Для включения добавьте в ConfigMap deckhouse:

data:
  openvpnEnabled: "true"

Внимание! В панели администратора всегда используется подсеть, определенная в параметре tunnelNetwork. Статические адреса пользователей необходимо выдавать из этой подсети. Если используется протокол UDP, то эти адреса будут конвертированы для использования в подсети udpTunnelNetwork. В этом случае сети в параметрах tunnelNetwork и udpTunnelNetwork должны быть одного размера.

Пример:

  • tunnelNetwork: 10.5.5.0/24
  • udpTunnelNetwork: 10.5.6.0/24
  • Тогда IP-адрес пользователя 10.5.5.8 (из диапазона tunnelNetwork) будет сконвертирован в 10.5.6.8 (из диапазона udpTunnelNetwork).

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

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

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

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

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

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

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

Параметры

  • authобъект

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

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

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

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

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

    • externalAuthenticationобъект

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

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

      • authSignInURLстрока

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

      • authURLстрока

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

    • passwordстрока

      Параметр устарел.

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

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

  • externalHostстрока

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

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

    Пример:

    externalHost: 1.2.3.4
    
  • externalIPстрока

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

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

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

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

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

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

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

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

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

  • httpsобъект

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

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

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

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

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

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

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

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

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

    • modeстрока

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

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

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

  • ingressClassстрока

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

    По умолчанию – глобальное значение modules.ingressClass.

  • inletстрока

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

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

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

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

  • loadBalancerобъект

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

    • annotationsобъект

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

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

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

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

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

  • nodeSelectorобъект

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

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

  • pushToClientDNSстрока

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

    По умолчанию — IP-адрес сервиса kube-system/kube-dns.

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

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

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

    Пример:

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

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

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

  • storageClassстрока

    Параметр будет удален в следующих релизах, т.к. мы отказались от использования диска для хранения сертификатов.

  • tcpEnabledбулевый

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

    Примеры:

    tcpEnabled: true
    
    tcpEnabled: false
    
  • tolerationsмассив объектов

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

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

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

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

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

    Примеры:

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

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

    Примеры:

    udpEnabled: true
    
    udpEnabled: false
    
  • udpTunnelNetworkстрока

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

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

    Примеры:

    udpTunnelNetwork: 172.25.176.0/24
    
    udpTunnelNetwork: 172.25.179.0/255.255.255.0