Deckhouse — Kubernetes-платформа с открытым кодом, с помощью которой можно создавать идентичные Kubernetes-кластеры в любой инфраструктуре и автоматически управлять ими. Для проверки подлинности в Deckhouse используется модуль user-authn. Он настраивает единую систему аутентификации, интегрированную с Kubernetes и веб-интерфейсами других модулей — например, с Grafana. user-authn поддерживает несколько внешних провайдеров и протоколов аутентификации: GitHub, GitLab, Bitbucket Cloud, Crowd, LDAP и OIDC. В статье расскажу, как развернуть сервер LDAP и настроить через него доступ к приложению. Нам потребуется кластер Kubernetes с установленной платформой Deckhouse. Кластер можно развернуть в облаке или локально (на kind). Установка занимает от 15 до 30 минут.  В конфигурации Deckhouse в параметре publicDomainTemplate должен быть корректный шаблон DNS-имен, который указывает на IP-адреса Ingress-контроллеров кластера. Также можно воспользоваться сервисом типа sslip.io; в этом случае в publicDomainTemplate достаточно будет указать шаблон %s.x.x.x.x.sslip.io, где x.x.x.x — ваш IP-адрес. В командах и шаблонах, которые приводятся в статье, будет задействовано пространство имен openldap-demo. При необходимости его можно изменить. Развернем LDAP-сервер: Прежде чем продолжить, убедимся, что Pod сервера запустился, то есть в статусе Running: В конфигурации развернутого LDAP-сервера есть два пользователя: johndoe@example.com (пароль bar) — входит в группу admins; janedoe@example.com (пароль foo) — входит в группы admins и developers. Далее, для примера, предоставим доступ пользователю janedoe@example.com из группы developers. Создадим в кластере ресурс DexProvider, который «подключит» созданный LDAP-сервер и будет использоваться при аутентификации: Развернем в качестве приложения простой echo-server, который выводит на страницу информацию об HTTP-запросе. Выполним команду, указав в переменной DOMAINNAME используемый вами домен: Приложение будет развернуто в пространстве имен openldap-demo. Ingress-ресурс приложения будет настроен на поддомен echo. Проверим, что Pod echoserver запустился: Откроем браузер и убедимся, что приложение доступно по адресу echo.<ВАШ_ДОМЕН> без авторизации. Приступим к самому интересному: закроем доступ к приложению. Чтобы включить аутентификацию, нужно: создать ресурс DexAuthenticator для развертывания OAuth2 Proxy; включить аутентификацию через развернутый экземпляр OAuth2 Proxy в Ingress-ресурсе приложения. OAuth2 Proxy будет принимать запросы на аутентификацию от nginx и выполнять аутентификацию в LDAP. Создадим ресурс DexAuthenticator, указав в переменной DOMAINNAME используемый вами домен: Убедимся, что в пространстве имен openldap-demo появился и запустился Pod echoserver-dex-authenticator: Посмотрим на ресурс DexAuthenticator. Обратите внимание на параметр spec.allowedGroups: он содержит список групп, которым будет разрешен доступ к приложению. В нашем случае это группа developers, в которую входит пользователь janedoe@example.com:  Теперь настроим Ingess-контроллер так, чтобы он использовал OAuth2 Proxy.  Укажем две аннотации на Ingress-ресурсе приложения, выполнив команды: Обновим страницу приложения в браузере — сработает переадресация на страницу входа: Выберем способ входа через LDAP-сервер: Log in with OpenLDAP Demo. Войдем под пользователем janedoe@example.com (пароль в LDAP: foo). Проверим, что все работает как нужно. Откроем браузер в безопасном режиме и попробуем войти под другим пользователем — johndoe@example.com (пароль в LDAP: bar). Получим ошибку User not in allowed groups, так как пользователь johndoe не состоит в группе developers. Вы можете добавить несколько провайдеров аутентификации, создав несколько ресурсов DexProvider. В этом случае при входе в приложение выбирайте нужного провайдера из списка.  Также можно создать статического пользователя, то есть учетную запись, все данные которой хранятся в кластере Kubernetes. Об этом — дальше. Для аутентификации статического пользователя внешние провайдеры аутентификации не используются. Нужно создать custom resource User. Создадим пользователя openldap-demo@example.com, который состоит в группе developers, с паролем bar и временем жизни учетной записи — 24 часа: Обратите внимание: в комментарии к полю password приведены команды генерации пароля. Они пригодятся, если вы хотите использовать другой пароль. После того, как пользователь создан, в приложение можно войти, выбрав Log in with Email. Более подробную информацию о настройке аутентификации в кластере можно найти в описании модуля user-authn. Также в документации есть готовые примеры использования модуля. Для удаления созданных выше ресурсов выполним: Читайте также в нашем блоге: «Разворачиваем Kubernetes-платформу Deckhouse в Yandex Cloud»;  «Тернистый путь к eBPF, или Как мы Cilium в Deckhouse внедряли»; «Kubernetes-платформа Deckhouse зарегистрирована в Едином реестре российского ПО».