---
title: 'Доступ к кластеру Managed Kubernetes через OIDC-провайдера'
sidebar_label: 'Доступ к кластеру через OIDC-провайдера'
sidebar_position: 2
description: 'Как подключить OIDC-провайдера к кластеру, подключиться к кластеру по OIDC и отключить OIDC-провайдера'
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import { TabItemLabel } from '@selectel/docux/components';
import Formbricks from '@theme/MDXComponents/Formbricks';

# Доступ к кластеру Managed Kubernetes через OIDC-провайдера

В Managed Kubernetes можно настроить доступ к кластеру по протоколу [OpenID Connect (OIDC)](https://openid.net/developers/how-connect-works/).
OIDC — это протокол аутентификации, который базируется на протоколе OAuth 2.0 и дополнительно предоставляет возможность передачи информации о пользователе.
Информация о пользователе передается в токене доступа ID Token.
Это токен в формате JSON Web Token (JWT), который подписывает сервер.
Подробнее об использовании OpenID Connect в Kubernetes в статье [Authenticating](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#openid-connect-tokens) документации Kubernetes.

OIDC позволяет пользователям проходить аутентификацию в одном сервисе, а потом получать доступ к другим сервисам без необходимости повторной аутентификации, поэтому с помощью OIDC можно обеспечить единый вход (SSO) для пользователей в несколько сервисов или приложений.

Для аутентификации пользователей по OIDC используются OIDC-провайдеры — например, [Keycloak](https://www.keycloak.org/) или [Dex](https://dexidp.io/).
С помощью OIDC-провайдера можно централизованно управлять пользователями и их доступом ко всем сервисам и приложениям, для которых подключен OIDC-провайдер, в том числе и к кластеру Managed Kubernetes.
Если необходимо изменить роль пользователя или ограничить доступ ко всем сервисам, например, в случае увольнения сотрудника, вы можете сделать это через OIDC-провайдера.

## Подключить OIDC-провайдера к кластеру \{#connect-oidc-provider-to-cluster}

Подключение к OIDC-провайдеру доступно в кластерах Managed Kubernetes версии 1.28 и выше.
Вы можете [обновить версию кластера на облачном сервере](/managed-kubernetes/clusters/upgrade-version.mdx).

Вы можете подключить OIDC-провайдера к кластеру через панель управления и Terraform.
Данные для подключения можно посмотреть в вашем OIDC-провайдере.

1. В [панели управления](https://my.selectel.ru/mks/) в верхнем меню нажмите **Продукты** и выберите **Managed Kubernetes**.
2. В разделе **Кластеры** откройте страницу кластера → вкладка **Настройки**.
3. В поле **OIDC-провайдер** нажмите **Подключить**.
4. Введите название OIDC-провайдера.
   Название используется только для идентификации провайдера в панели управления.
5. В поле **Issuer URL** введите URL-адрес OIDC-провайдера, который доступен через интернет.
   Он будет использоваться для аутентификации пользователей, которые запрашивают доступ к кластеру.
6. В поле **Client ID** введите идентификатор сервиса, который необходим для идентификации кластера на стороне OIDC-провайдера.
   Например, `kubernetes`.
7. Опционально: в поле **Username claim** введите название поля JWT-токена, в котором будет храниться имя пользователя.
   Это имя используется для его идентификации.
   Значение по умолчанию — `sub`.
   В зависимости от OIDC-провайдера можно использовать другие варианты, например `email` или `name`.
8. Опционально: в поле **Groups claim** введите название поля JWT-токена, в котором будет храниться имя группы, к которой принадлежит пользователь.
   Значение по умолчанию — `groups`.
9. Опционально: чтобы добавить корневой сертификат, отметьте чекбокс **Загрузить свой корневой сертификат** и вставьте корневой сертификат.
   Он должен начинаться с `-----BEGIN CERTIFICATE-----` и заканчиваться `-----END CERTIFICATE-----`.
   Сертификат нельзя изменить после подключения OIDC-провайдера.

## Настроить подключение через OIDC-провайдера \{#configure-oidc-connection}

1. В [панели управления](https://my.selectel.ru/mks/) в верхнем меню нажмите **Продукты** и выберите **Managed Kubernetes**.

2. В разделе **Кластеры** откройте страницу кластера → вкладка **Настройки**.

3. Нажмите **Скачать kubeconfig**.
   Скачивание kubeconfig-файла недоступно, если у кластера статус `PENDING_CREATE`, `PENDING_ROTATE_CERTS`, `PENDING_DELETE` или `ERROR`.

4. Добавьте в kubeconfig-файл данные для подключения через OIDC-провайдера:

   ```yaml
   apiVersion: v1
   clusters:
   - cluster:
       certificate-authority-data: cluster_ca_certificate
       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>
             - --certificate-authority=<oidc_ca_certificate>
           command: kubectl
   ```

   Укажите:

   * `<issuer_url>` — URL-адрес OIDC-провайдера, который доступен через интернет.
     Он будет использоваться для аутентификации пользователей, которые запрашивают доступ к кластеру;
   * `<client_id>` — идентификатор сервиса, который необходим для идентификации кластера на стороне OIDC-провайдера.
     Например, `kubernetes`;
   * `<client_secret>` — общий секретный ключ, установленный между сервером авторизации и клиентом, который используется для подписи запросов;
   * опционально: `--certificate-authority = <oidc_ca_certificate>` — тег для добавления корневого сертификата OIDC-провайдера.
     Параметр `<oidc_ca_certificate>` — путь до корневого сертификата, который вы загрузили при [подключении OIDC-провайдера к кластеру](#connect-oidc-provider-to-cluster).

5. Настройте роли пользователей в кластере с помощью механизма RBAC-авторизации.
   Подробнее об использовании RBAC в Kubernetes в статье [Using RBAC Authorization](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) официальной документации Kubernetes.
   Например, для настройки роли developer, которая дает доступ к просмотру подов и сервисов, добавьте манифест:

   ```yaml
   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
   ```

6. Отправьте обновленный kubeconfig-файл пользователям, у которых нет доступа к панели управления.

## Подключиться к кластеру по OIDC \{#connect-to-cluster-with-oidc-provider}

Мы рекомендуем выполнять все действия с нодами, балансировщиками и дисками кластера только через [kubectl](https://kubernetes.io/docs/reference/kubectl/kubectl/).

После [обновления сертификатов для системных компонентов](/managed-kubernetes/clusters/update-certificate.mdx#update-certificates-when-error-occurs) необходимо заново подключаться к кластеру.

<Tabs queryString="connect-to-cluster-with-oidc-provider">
  <TabItem value="kubectl" default>
    <TabItemLabel>
      Linux
    </TabItemLabel>

    1. Установите консольный клиент Kubernetes [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/).

    2. Установите плагин [kubelogin](https://github.com/int128/kubelogin).

    3. Откройте CLI.

    4. Экспортируйте в переменную окружения `KUBECONFIG` путь к kubeconfig-файлу:

       ```bash
       export KUBECONFIG=<path>
       ```

       Укажите `<path>` — путь к kubeconfig-файлу. Имя файла написано в формате `<cluster_name>.yaml`, где `<cluster_name>` — имя кластера.

    5. Обратитесь к кластеру через kubectl. Например, запросите информацию о нодах кластера:

       ```bash
       kubectl get nodes
       ```

       Автоматически в браузере откроется страница аутентификации у OIDC-провайдера.

    6. Аутентифицируйтесь у OIDC-провайдера.

       После аутентификации появится вывод команды, которую вы вводили на шаге 5.
  </TabItem>

  <TabItem value="windows">
    <TabItemLabel>
      Windows
    </TabItemLabel>

    1. Установите консольный клиент Kubernetes [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/).

    2. Установите плагин [kubelogin](https://github.com/int128/kubelogin).

    3. Запустите PowerShell от имени администратора.

    4. Экспортируйте в переменную окружения `KUBECONFIG` путь к kubeconfig-файлу:

       ```bash
       $env:KUBECONFIG = <path>
       ```

       Укажите `<path>` — путь к kubeconfig-файлу. Имя файла написано в формате `<cluster_name>.yaml`, где `<cluster_name>` — имя кластера.

    5. Обратитесь к кластеру через kubectl. Например, запросите информацию о нодах кластера:

       ```bash
       kubectl get nodes
       ```

       Автоматически в браузере откроется страница аутентификация у OIDC-провайдера.

    6. Аутентифицируйтесь у OIDC-провайдера.

       После аутентификации появится вывод команды, которую вы вводили на шаге 5.
  </TabItem>
</Tabs>

## Отключить OIDC-провайдера \{#disconnect-oidc-provider}

После отключения OIDC-провайдера все пользователи, которые подключились к кластеру через этого провайдера, потеряют доступ к кластеру.

1. В [панели управления](https://my.selectel.ru/mks/) в верхнем меню нажмите **Продукты** и выберите **Managed Kubernetes**.
2. В разделе **Кластеры** откройте страницу кластера → вкладка **Настройки**.
3. В блоке **Настройки сервера** в поле **OIDC-провайдер** откройте блок OIDC-провайдера.
4. Нажмите **Отключить**.

<Formbricks />
