Перейти к основному содержимому
Доступ к кластеру через OIDC-провайдера
Последнее изменение:

Доступ к кластеру через 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-провайдере.

  1. В панели управления перейдите в раздел Облачная платформа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.

Настроить подключение через OIDC-провайдера

  1. В панели управления перейдите в раздел Облачная платформаKubernetes.

  2. Откройте страницу кластера → вкладка Настройки.

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

  4. Добавьте в 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> — общий секретный ключ, установленный между сервером авторизации и клиентом, который используется для подписи запросов.
  5. Настройте роли пользователей в кластере с помощью механизма 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
  6. Отправьте обновленный kubeconfig-файл пользователям, у которых нет доступа к панели управления.

Подключиться к кластеру по OIDC

Мы рекомендуем выполнять все действия с нодами, балансировщиками и дисками кластера только через kubectl.

После обновления сертификатов для системных компонентов необходимо заново подключаться к кластеру.

  1. Установите консольный клиент Kubernetes kubectl.

  2. Установите плагин kubelogin.

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

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

    export KUBECONFIG=<path>

    Укажите <path> — путь к kubeconfig-файлу имя_кластера.yaml.

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

    kubectl get nodes

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

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

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

Отключить OIDC-провайдера

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

  1. В панели управления перейдите в раздел Облачная платформаKubernetes.
  2. Откройте страницу кластера → вкладка Настройки.
  3. В блоке Настройки сервера в поле OIDC-провайдер откройте блок OIDC-провайдера.
  4. Нажмите Отключить.