Подключение к API Kubernetes с помощью сгенерированного kubeconfig
-
Инициализация. До запуска kube-apiserver он запрашивает конфигурационный эндпоинт OIDC-провайдера (в данном случае — Dex), чтобы получить информацию об
issuerи параметры для валидации токенов через JWKS-эндпоинт. -
Генерация kubeconfig. Веб-интерфейс Deckhouse Kubernetes Platform (DKP) формирует kubeconfig, в котором сохраняются
ID tokenиrefresh token. Этот файл используется утилитойkubectlили другими клиентами Kubernetes. -
Аутентификация при обращении к API. При получении запроса с
ID token, kube-apiserver проверяет его подпись, используя ключи, полученные с JWKS-эндпоинта. Затем проверяются значения claim’овiss(issuer) иaud(audience) токена на соответствие конфигурации сервера.
Защита Dex от подбора логина и пароля
Одному пользователю разрешено только 20 попыток входа. Если указанный лимит израсходован, одна дополнительная попытка будет добавляться каждые 6 секунд.
Аутентификация с помощью DexAuthenticator
-
Процесс входа через Dex. В большинстве случаев Dex перенаправляет пользователя на страницу входа внешнего провайдера (например, GitHub, Okta, Keycloak) и ожидает, что после успешной аутентификации пользователь будет возвращён на адрес
/callback. Однако для провайдеров, таких как LDAP или Atlassian Crowd, этот механизм не работает. В таких случаях пользователь вводит логин и пароль в форму Dex, и сам Dex выполняет проверку через API соответствующего провайдера. -
Хранение токенов и сессий. DexAuthenticator устанавливает cookie с полным
refresh token, а не выдает короткоживущий ticket, как это делается сID token. Это связано с тем, что Redis, используемый в DexAuthenticator, не сохраняет данные на диск. Если в Redis не найденID tokenпо ticket, пользователь может получить новыйID token, предъявивrefresh token, сохранённый в cookie. -
Передача токена в приложение. DexAuthenticator добавляет HTTP-заголовок
AuthorizationсID tokenиз Redis. Это поведение может быть необязательным для некоторых приложений, таких как Upmeter, где механизмы авторизации реализованы иначе. Однако для приложений вроде Kubernetes Dashboard это обязательное поведение, так как Dashboard используетID tokenдля доступа к Kubernetes API от имени пользователя.
Расширения от Фланта
DKP использует модифицированную версию Dex для поддержки:
- групп для статических учетных записей пользователей и провайдера Bitbucket Cloud (параметр
bitbucketCloud); - передачи параметра
groupклиентам; - механизма
obsolete tokens, который позволяет избежать состояния гонки при продлении токена OIDC-клиентом.
Отказоустойчивый режим
DKP поддерживает режим высокой доступности highAvailability. При его включении аутентификаторы, отвечающие на auth request-запросы, развертываются с учетом требуемой избыточности для обеспечения непрерывной работы. В случае отказа любого из экземпляров аутентификаторов пользовательские аутентификационные сессии не прерываются.