• Русский
  • Аутентификация кластера

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

    Обзор

    Интеграция аутентификации использует Connector Custom Resources (CR) для настройки провайдеров идентификации OIDC или LDAP.

    Основы Connector CR

    • CR Kind: Connector (apiVersion: dex.coreos.com/v1)
    • Namespace: cpaas-system
    • Формат конфигурации: поле config должно быть строкой JSON, закодированной в base64. Создайте конфигурацию в виде JSON-файла, затем закодируйте её с помощью base64 -w0 config.json (на macOS флаг -w0 можно опустить).

    Шаблон Connector CR:

    apiVersion: dex.coreos.com/v1
    kind: Connector
    metadata:
      name: <connector-name>
      namespace: cpaas-system
      labels:
        cpaas.io/idp.version: v2  # маркер версии коннектора
    spec:
      type: <oidc|ldap>           # тип коннектора
      id: <connector-id>          # уникальный в платформе
      name: <display-name>        # отображается на экране входа
      config: <base64-encoded-connector-config-json>

    Интеграция с LDAP

    Конфигурация LDAP

    Пример конфигурации LDAP-коннектора:

    {
      "bindDN": "cn=Administrator,cn=Users,dc=example,dc=com",
      "bindPW": "<password>",
      "host": "ldap.example.com:389",
      "insecureNoSSL": true,
      "insecureSkipVerify": true,
      "startTLS": true,
      "userSearch": {
        "baseDN": "dc=example,dc=com",
        "filter": "(objectClass=organizationalPerson)",
        "idAttr": "distinguishedName",
        "nameAttr": "cn",
        "username": "cn",
        "emailAttr": "mail"
      }
    }

    Описание полей:

    ПолеОписаниеОбязательноПримечания
    bindDNDN учетной записи для bindДаТребуется разрешение на поиск
    bindPWПароль учетной записи bindДаСоответствует bindDN
    hostХост LDAP:порт Да389+StartTLS или 636 (LDAPS)
    insecureNoSSLОтключить SSLДаУстановить в true
    startTLSВключить StartTLSДаУстановить в true
    insecureSkipVerifyПропустить проверку TLSДаУстановить в true
    userSearch.baseDNБазовый DN для поискаДаКорень каталога или организационный DN
    userSearch.filterФильтр пользователейДаНапример, (objectClass=organizationalPerson)
    userSearch.idAttrАтрибут уникального IDДаНапример, distinguishedName
    userSearch.nameAttrАтрибут отображаемого имениДаИспользуется как идентификатор на стороне платформы
    userSearch.usernameАтрибут(ы) для логинаДаКандидаты через запятую
    userSearch.emailAttrАтрибут emailНетПропустить, если в каталоге нет email

    Применение LDAP-коннектора

    Пошаговые инструкции:

    # 1) Создать JSON-файл конфигурации
    cat <<'EOF' > ldap-config.json
    {
      "bindDN": "cn=Administrator,cn=Users,dc=example,dc=com",
      "bindPW": "<password>",
      "host": "ldap.example.com:389",
      "insecureNoSSL": true,
      "insecureSkipVerify": true,
      "startTLS": true,
      "userSearch": {
        "baseDN": "dc=example,dc=com",
        "filter": "(objectClass=organizationalPerson)",
        "idAttr": "distinguishedName",
        "nameAttr": "cn",
        "username": "cn",
        "emailAttr": "mail"
      }
    }
    EOF
    
    # 2) Закодировать конфигурацию в base64
    LDAP_B64=$(base64 -w0 ldap-config.json)
    
    # 3) Создать Connector CR
    cat <<EOF > ldap-connector.yaml
    apiVersion: dex.coreos.com/v1
    kind: Connector
    metadata:
      name: ldap-sample
      namespace: cpaas-system
      labels:
        cpaas.io/idp.version: v2
    spec:
      type: ldap
      id: ldap-sample
      name: LDAP Sample
      config: ${LDAP_B64}
    EOF
    
    # 4) Применить Connector
    kubectl apply -f ldap-connector.yaml

    Интеграция с OIDC

    Конфигурация OIDC

    Пример конфигурации OIDC-коннектора:

    {
      "issuer": "https://idp.example.com/auth/realms/master",
      "issuerAlias": "",
      "clientID": "<client-id>",
      "clientSecret": "<client-secret>",
      "redirectURI": "https://<clusterEndpoint>:11780/dex/callback",
      "scopes": ["openid", "profile", "email", "groups"],
      "claimMapping": {
        "email": "email",
        "preferred_username": "preferred_username",
        "groups": "groups"
      },
      "getUserInfo": true,
      "insecureSkipVerify": true
    }

    Описание полей:

    ПолеОписаниеОбязательноПримечания
    issuerIssuer upstream IdPДаДолжно совпадать с метаданными IdP
    clientIDOIDC client IDДаСоздан в IdP
    clientSecretOIDC client secretДаСоответствует clientID
    redirectURIDex callbackДаДолжно совпадать с регистрацией в IdP. Пример: https://<clusterEndpoint>:11780/dex/callback
    scopesOIDC scopesДаРекомендуется: openid, profile, email, groups
    claimMapping.emailОтображение emailДаОтображение на upstream claim
    claimMapping.preferred_usernameОтображение имени пользователяНетОтображение на upstream claim
    claimMapping.groupsОтображение группНетЕсли upstream предоставляет группы
    getUserInfoВызов endpoint UserInfoНетУстановить в true, если в ID Token отсутствуют поля
    insecureSkipVerifyПропуск проверки TLSДаУстановить в true (согласно текущей конфигурации)

    Применение OIDC-коннектора

    Пошаговые инструкции:

    # 1) Создать JSON-файл конфигурации
    cat <<'EOF' > oidc-config.json
    {
      "issuer": "https://idp.example.com/auth/realms/master",
      "issuerAlias": "",
      "clientID": "<client-id>",
      "clientSecret": "<client-secret>",
      "redirectURI": "https://<clusterEndpoint>:11780/dex/callback",
      "scopes": ["openid", "profile", "email", "groups"],
      "claimMapping": {
        "email": "email",
        "preferred_username": "preferred_username",
        "groups": "groups"
      },
      "getUserInfo": true,
      "insecureSkipVerify": true
    }
    EOF
    
    # 2) Закодировать конфигурацию в base64
    OIDC_B64=$(base64 -w0 oidc-config.json)
    
    # 3) Создать Connector CR
    cat <<EOF > oidc-connector.yaml
    apiVersion: dex.coreos.com/v1
    kind: Connector
    metadata:
      name: oidc-sample
      namespace: cpaas-system
      labels:
        cpaas.io/idp.version: v2
    spec:
      type: oidc
      id: oidc-sample
      name: OIDC Sample
      config: ${OIDC_B64}
    EOF
    
    # 4) Применить Connector
    kubectl apply -f oidc-connector.yaml
    INFO

    Важные замечания:

    • Размещайте Connector CR в namespace cpaas-system для соответствия настройкам глобального кластера.
    • Кодирование base64: в Linux используйте base64 -w0 config.json, на macOS флаг -w0 можно опустить.

    Использование AC CLI для подключения к ACP

    В этом разделе описывается, как использовать AC CLI для аутентификации и подключения к ACP (Application Control Plane) с использованием настроенных провайдеров идентификации.

    Предварительные требования

    Перед использованием AC CLI для подключения убедитесь в следующем:

    1. AC CLI установлен (версия >= 1.1)
    2. Кластер доступен по сети
    3. Внешний адрес доступа к сервису аутентификации плагина: https://<clusterEndpoint>:<DefaultPort> (по умолчанию DefaultPort равен 11780)
    4. Коннектор настроен для целевого IDP и имя Connector CR подтверждено

    Проверка конфигурации Connector:

    kubectl get connector -n cpaas-system

    Пример вывода:

    NAME        AGE
    ldap-test   7m53s
    oidc-test   6m27s

    Примеры команд

    Вход с использованием LDAP-провайдера:

    ac login https://<clusterEndpoint>:11780 \
      --idp <ldap-connector-name> \
      --workload \
      --auth-type ldap \
      --username '<username>' \
      --password '<password>'

    Вход с использованием OIDC-провайдера:

    ac login https://<clusterEndpoint>:11780 \
      --idp <oidc-connector-name> \
      --workload \
      --auth-type oidc
    TIP

    Для аутентификации через OIDC, если требуется интерактивный вход, следуйте подсказкам CLI для завершения процесса входа.

    Параметры команд

    ПараметрОписаниеОбязательноПримечания
    --idpИмя ConnectorДаИмя Connector CR, настроенного в namespace cpaas-system
    --workloadВход в кластер нагрузкиДаФлаг для входа в кластер нагрузки
    --auth-typeТип аутентификацииДаПоддерживаемые значения: ldap, oidc
    --usernameИмя пользователя для LDAPДа (только LDAP)Используется для аутентификации LDAP
    --passwordПароль для LDAPДа (только LDAP)Используется для аутентификации LDAP