Доступ к кластеру через OIDC-провайдера
В Managed Kubernetes можно настроить доступ к кластеру по протоколу OpenID Connect (OIDC). OIDC — это протокол аутентификации, который базируется на протоколе OAuth 2.0 и дополнительно предоставляет возможность передачи информации о пользователе. Информация о пользователе передается в токене доступа ID Token. Это токен в формате JSON Web Token (JWT), который подписывает сервер. Подробнее об использовании OpenID Connect в Kubernetes в статье Authenticating документации Kubernetes.
OIDC позволяет пользователям проходить аутентификацию в одном сервисе, а потом получать доступ к другим сервисам без необходимости повторной аутентификации, поэтому с помощью OIDC можно обеспечить единый вход (SSO) для пользователей в несколько сервисов или приложений.
Для аутентификации пользователей по OIDC используются OIDC-провайд еры — например, Keycloak или Dex. С помощью OIDC-провайдера можно централизованно управлять пользователями и их доступом ко всем сервисам и приложениям, для которых подключен OIDC-провайдер, в том числе и к кластеру Managed Kubernetes. Если необходимо изменить роль пользователя или ограничить доступ ко всем сервисам, например, в случае увольнения сотрудника, вы можете сделать это через OIDC-провайдера.
Подключить OIDC-провайдера к кластеру
Подключение к OIDC-провайдеру доступно в кластерах Managed Kubernetes версии 1.28 и выше. Вы можете обновить версию кластера на облачном сервере.
Вы можете подключить OIDC-провайдера к кластеру через панель управления. Данные для подключения можно посмотреть в вашем OIDC-провайдере.
- В панели управления перейдите в раздел Облачная платформа → Kubernetes.
- Откройте страницу кластера → вкладка Настройки.
- В поле OIDC-провайдер нажмите Подключить.
- Введите название OIDC-провайдера. Название используется только для идентификации провайдера в панели управления.
- В поле Issuer URL введите URL-адрес OIDC-провайдера, который доступен через интернет. Он будет использоваться для аутентификации пользователей, которые запрашивают доступ к кластеру.
- В поле Client ID введите идентификатор сервиса, который необходим для идентификации кластера на стороне OIDC-провайдера. Например,
kubernetes
. - Опционально: в поле Username claim введите название поля JWT-токена, в котором будет храниться имя пользователя. Это имя используется для его идентификации. Значение по умолчанию —
sub
. В зависимости от OIDC-провайдера можно использовать другие варианты, напримерemail
илиname
. - Опционально: в поле Groups claim введите название поля JWT-токена, в котором будет храниться имя группы, к которой принадлежит пользователь. Значение по умолчанию —
groups
.
Настроить подключ ение через OIDC-провайдера
-
В панели управления перейдите в раздел Облачная платформа → Kubernetes.
-
Откройте страницу кластера → вкладка Настройки.
-
Нажмите Скачать kubeconfig. Скачивание kubeconfig-файла недоступно, если у кластера статус
PENDING_CREATE
,PENDING_ROTATE_CERTS
,PENDING_DELETE
илиERROR
. -
Добавьте в kubeconfig-файл данные для подключения через OIDC-провайдера:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <certificate_authority_data>
server: <server_path>
name: <cluster_name>
contexts:
- context:
cluster: <cluster_name>
user: oidc
name: oidc-context
current-context: oidc-context
kind: Config
preferences: {}
users:
- name: oidc
user:
exec:
apiVersion: client.authentication.k8s.io/v1beta1
args:
- oidc-login
- get-token
- --oidc-issuer-url=<issuer_url>
- --oidc-client-id=<client_id>
- --oidc-client-secret=<client_secret>
command: kubectlУкажите:
<ca_certificate>
— сертификат из приватного центра сертификации (CA). Можно посмотреть в исходном kubeconfig-файле;<server_path>
— путь до сервера, на котором расположен кластер. Можно посмотреть в исходном kubeconfig-файле;<cluster_name>
— имя кластера. Можно посмотреть в исходном kubeconfig-файле;<issuer_url>
— URL-адрес OIDC-провайдера, который доступен через интернет. Он будет использоваться для аутентификации пользователей, которые запрашивают доступ к кластеру;<client_id>
— идентификатор сервиса, который необходим для идентификации кластера на стороне OIDC-провайдера. Например,kubernetes
;<client_secret>
— общий секретный ключ, установленный между сервером авторизации и клиентом, который используется для подписи запросов.
-
Настройте роли пользователей в кластере с помощью механизма RBAC авторизации. Подробнее об использовании RBAC в Kubernetes в статье Using RBAC Authorization официальной документации Kubernetes. Например, для настройки роли developer, которая дает доступ к просмотру подов и сервисов, добавьте манифест:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: developer
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "watch", "list"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: developer-crb
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: developer
subjects:
- kind: Group
name: "developers"
apiGroup: rbac.authorization.k8s.io -
Отправьте обновленный kubeconfig-файл пользователям, у которых нет доступа к панели управления.
Подключиться к кластеру по OIDC
Мы рекомендуем выполнять все действия с нодами, балансировщиками и дисками кластера только через kubectl.
После обновления сертификатов для системных компонентов необходимо заново подключаться к кластеру.
Linux
Windows
-
Установите консольный клиент Kubernetes kubectl.
-
Установите плагин kubelogin.
-
Откройте CLI.
-
Экспортируйте в переменную окружения
KUBECONFIG
путь к kubeconfig-файлу:export KUBECONFIG=<path>
Укажите
<path>
— путь к kubeconfig-файлуимя_кластера.yaml
. -
Обратитесь к кластеру через kubectl. Например, запросите информацию о нодах кластера:
kubectl get nodes
Автоматически в браузере откроется страница аутентификации у OIDC-провайдера.
-
Аутентифицируйтесь у OIDC-провайдера.
После аутентификации появится вывод команды, которую вы вводили на шаге 5.
-
Установите консольный клиент Kubernetes kubectl.
-
Установите плагин kubelogin.
-
Запустите PowerShell от имени администратора.
-
Экспортируйте в переменную окружения
KUBECONFIG
путь к kubeconfig-файлу:$env:KUBECONFIG = <path>
Укажите
<path>
— путь к kubeconfig-файлуимя_кластера.yaml
. -
Обратитесь к кластеру через kubectl. Например, запросите информацию о нодах кластера:
kubectl get nodes
Автоматически в браузере откроется страница аутентификация у OIDC-провайдера.
-
Аутентифицируйтесь у OIDC-провайдера.
После аутентификации появится вывод команды, которую вы вводили на шаге 5.
Отключить OIDC-провайдера
После отключения OIDC-провайдера все пользователи, которые подключились к кластеру через этого провайдера, потеряют доступ к кластеру.
- В панели управления перейдите в раздел Облачная платформа → Kubernetes.
- Откройте страницу кластера → вкладка Настройки.
- В блоке Настройки сервера в поле OIDC-провайдер откройте блок OIDC-провайдера.
- Нажмите Отключить.