Модуль не включен по умолчанию в каком-либо наборе модулей.
Чтобы настроить модуль, используйте 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
больше не поддерживается.