Модуль не включен по умолчанию в каком-либо наборе модулей.
Чтобы настроить модуль используйте 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.externalAuthentication.authSignInURLстрока
- auth.whitelistSourceRangesмассив строк
Массив CIDR, которым разрешено проходить аутентификацию для доступа в OpenVPN.
- auth.allowedUserGroupsмассив строк
- externalHostстрока
IP-адрес или домен, по которому клиенты подключаются к OpenVPN-серверу.
По умолчанию используются данные из сервиса с именем
openvpn-external
. - externalIPстрока
IP-адрес одного из узлов кластера, который будет использоваться для подключения клиентов OpenVPN.
Требуется только при использовании inlet
ExternalIP
. - externalPortцелочисленный
Порт, который вывешивается наружу на
externalIP
или балансировщике.По умолчанию:
5416
- highAvailabilityбулевый
Ручное управление режимом отказоустойчивости.
По умолчанию режим отказоустойчивости определяется автоматически. Подробнее про режим отказоустойчивости.
- hostPortцелочисленный
Порт для подключения к OpenVPN-серверу, который будет доступен на узле, на котором запущен Pod OpenVPN.
Параметр доступен при выборе inlet
HostPort
.По умолчанию:
5416
- httpsобъект
Тип сертификата, используемого для панели администратора OpenVPN.
При использовании этого параметра полностью переопределяются глобальные настройки
global.modules.https
.- https.certManagerобъект
- https.certManager.clusterIssuerNameстрока
ClusterIssuer, используемый для панели администратора OpenVPN.
Доступны
letsencrypt
,letsencrypt-staging
,selfsigned
, но вы можете определить свои.По умолчанию:
"letsencrypt"
- https.certManager.clusterIssuerNameстрока
- https.customCertificateобъект
- https.customCertificate.secretNameстрока
Имя Secret’а в пространстве имен
d8-system
, который будет использоваться для панели администратора OpenVPN (данный Secret должен быть в формате kubernetes.io/tls).По умолчанию:
"false"
- https.customCertificate.secretNameстрока
- 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-схемой.
Допустимые значения:
Disabled
,CertManager
,CustomCertificate
,OnlyInURI
- https.certManagerобъект
- 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 будет доступен на узле, на котором находится Pod. За выбор порта отвечает параметрhostPort
.Direct
— для нестандартных случаев. В пространстве именd8-openvpn
необходимо создать сервис с именемopenvpn-external
, который отправляет трафик в Pod с лейбломapp: openvpn
на порт с именемovpn-tcp
(или просто 1194). Из этого сервиса парситсяexternalIP
, IP-адрес балансировщика или его host. Если ничего этого нет, то необходимо указать параметрexternalHost
.
Допустимые значения:
ExternalIP
,LoadBalancer
,HostPort
,Direct
- loadBalancerобъект
Секция опциональных настроек для inlet’а
LoadBalancer
.- loadBalancer.annotationsобъект
Аннотации, которые будут проставлены сервису для гибкой настройки балансировщика.
Внимание! Модуль не учитывает особенности указания аннотаций в различных облаках. Если аннотации для заказа Load Balancer’а применяются только при создании сервиса, то для обновления подобных параметров вам необходимо будет выключить и включить модуль.
- loadBalancer.sourceRangesмассив строк
Список CIDR, которым разрешен доступ на балансировщик.
Облачный провайдер может не поддерживать данную опцию и игнорировать её.
- loadBalancer.annotationsобъект
- nodeSelectorобъект
Структура, аналогичная
spec.nodeSelector
Kubernetes Pod.Если ничего не указано или указано
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массив строк
Список маршрутов, которые отправляются клиентам при подключении.
По умолчанию генерируется автоматически из локальной сети кластера, сервисной подсети и подсети Pod’ов.
Пример:
pushToClientRoutes: - 172.25.176.0/24 - 172.25.178.0/255.255.255.0
- pushToClientSearchDomainsмассив строк
Список доменов поиска, которые отправляются клиентам при подключении.
По умолчанию используется значение из переменной
global.discovery.clusterDomain
. - tcpEnabledбулевый
По умолчанию:
true
- tolerationsмассив объектов
Структура, аналогичная
spec.tolerations
в Kubernetes Pod.Если ничего не указано или указано
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 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
больше не поддерживается.