ConnectorClass
Содержание
OverviewИнформация об адресеПараметрыИнформация об аутентификацииТип аутентификацииПараметры аутентификацииОпциональная аутентификацияПроверка доступности (Liveness Probe)Проверка с помощью HTTP-запросовПроверка с помощью API ConnectorClassПроверка аутентификации (Authentication Probe)Проверка с помощью HTTP-запросовПроверка с помощью API ConnectorClassПользовательские параметры проверки аутентификацииВыражения проверки аутентификацииКонфигурация логики аутентификации на основе RegoПеременные, доступные в RegoПримеры политик RegoПродвинутые техники RegoAPI ConnectorClassНастройка адреса APIРазрешение адреса APIОписание OpenAPIВозможности конфигурацииТипы конфигурацийПользовательские конфигурацииМетаданные для удобочитаемого отображенияProxy ConnectorClassИспользование Rego для извлечения токена из запросаТип резолвераИнформация о статусеСовместимостьДополнительные примерыMoreOverview
ConnectorClass — это ресурс уровня кластера, который определяет режимы доступа и спецификации поведения для конкретных типов инструментов.
В следующем примере определяется коннектор типа hello-git, поддерживающий базовую аутентификацию:
В ConnectorClass режимы доступа и спецификации поведения для подключения инструментов к платформе определяются описанием следующей информации:
- Формат адреса доступа инструмента
- Поддерживаемые методы аутентификации
- Как проверять доступность инструмента
- Как проверять валидность аутентификации
- Как инструмент предоставляет API-возможности
- Какие возможности конфигурации предоставляет инструмент
- Метаданные для отображения в удобочитаемом виде
В этом документе также приведены примеры, которые помогут лучше понять, как настраивать ConnectorClass. Примеры
Информация об адресе
Информация об адресе определяет формат доступа к инструменту. В настоящее время поддерживаются адреса только строкового типа. Эта информация ограничивает тип поля, которому должен соответствовать текущий тип инструмента.
Это означает, что адрес для подключения инструмента к платформе должен быть типа string.
Параметры
Параметры используются для определения дополнительных параметров при создании коннектора.
Вы можете определить обязательные параметры для создания коннектора с помощью поля spec.params в ConnectorClass.
spec.params[].name— имя параметра.spec.params[].type— тип параметра. В настоящее время поддерживается только типstring.spec.params[].default— значение параметра по умолчанию (опционально). Если задано значение по умолчанию, пользователь может не указывать этот параметр при создании коннектора.spec.params[].description— описание параметра (опционально).
Например, следующее определение позволяет пользователям указывать параметр sslVerify при создании коннектора типа git, со значением по умолчанию true.
Для конфигурации параметров при создании Connectors смотрите документацию Connector.
В сочетании с возможностями connectors-csi-driver это позволяет более гибко настраивать конфигурацию. Особенно полезно, когда необходимо передавать параметризованные настройки. Например, при создании git-коннектора пользователь может указать параметр sslVerify для управления проверкой SSL-сертификата. Подробнее см. в документации ConnectorClass Configuration.
Информация об аутентификации
Тип аутентификации
Тип аутентификации определяет тип учетных данных, используемых для аутентификации инструмента. Инструмент может поддерживать несколько типов аутентификации, позволяя пользователям выбирать один из них при использовании инструмента.
Пользователь может уникально назвать текущий тип аутентификации через
spec.auth.types[].name, который должен быть уникальным и не повторяться.spec.auth.types[].secretType, который указывает типSecret, необходимого для аутентификации, соответствующий типу Secret Kubernetes.
Пример:
В встроенных типах Secret Kubernetes все типы, кроме Opaque, имеют ограничения по полям. При предоставлении Secret пользователь должен убедиться, что поля Secret соответствуют этим ограничениям.
При использовании типа Opaque необходимо объявить параметры аутентификации.
Как и в Kubernetes, можно использовать собственный тип Secret. В этом случае также необходимо объявить параметры аутентификации.
Параметры аутентификации
Параметры, необходимые для учетных данных при аутентификации, определяются в spec.auth.types[].params.
Для стандартных типов Kubernetes Secret с четко определенными полями данных параметры можно не указывать. Например:
kubernetes.io/basic-auth: аутентификация по имени пользователя и паролюkubernetes.io/ssh-auth: аутентификация по SSH-ключу
Для пользовательских типов аутентификации можно определить необходимые параметры аутентификации, при этом secretType указывается как Opaque или с пользовательским именем.
Например, для аутентификации GitLab с использованием Personal Access Token (PAT):
Это определение требует, чтобы учетные данные, используемые в коннекторе инструмента, содержали поля, указанные в params.
Опциональная аутентификация
Некоторые инструменты поддерживают доступ без аутентификации, что отмечается полем optional, указывающим, является ли аутентификация необязательной:
Например, следующий пример указывает, что учетные данные для basicAuth необязательны, а для sshAuth обязательны.
В этом случае при подключении данного типа инструмента к платформе аутентификация типа basicAuth может быть опущена.
Проверка доступности (Liveness Probe)
Проверка доступности используется для подтверждения, что инструмент доступен и работает нормально. Конфигурация способа проверки задается через поле livenessProbe.
Проверка доступности может выполняться с помощью HTTP-запросов или API ConnectorClass.
Проверка с помощью HTTP-запросов
Вы можете настроить spec.livenessProbe.http для выполнения проверки доступности с помощью HTTP-запросов.
Пример
Следующий фрагмент указывает, что проверка выполняется через HTTP-запросы.
Если инструмент возвращает статус 200, он считается доступным.
Подробнее см. Probe using HTTP Requests in Authentication Probe. Конфигурация идентична, за исключением путей полей.
Проверка с помощью API ConnectorClass
Вы можете настроить spec.livenessProbe.api для выполнения проверки доступности с помощью API ConnectorClass.
Пример
Следующий фрагмент указывает, что проверка выполняется через API ConnectorClass.
Подробнее см. Probe using ConnectorClass API in Authentication Probe. Конфигурация идентична, за исключением путей полей.
Проверка аутентификации (Authentication Probe)
Проверка аутентификации используется для проверки валидности учетных данных для инструментов данного типа. Если проверка аутентификации не требуется, поле authProbes можно опустить.
spec.authProbes[].authNameуказывает тип аутентификации, который проверяется, и должен совпадать с одним из имен, определенных вspec.auth.types[].name.
Проверка аутентификации может выполняться с помощью HTTP-запросов или API ConnectorClass.
Проверка с помощью HTTP-запросов
Вы можете настроить spec.authProbes[].probe.http для выполнения проверки аутентификации с помощью HTTP-запросов.
spec.authProbes[].probe.http.hostуказывает целевой хост для проверки аутентификации. По умолчанию берется хост из адреса коннектора.spec.authProbes[].probe.http.pathуказывает путь запроса для проверки аутентификации. Это абсолютный путь, который будет добавлен к URI хоста, полученному изspec.addressконнектора при выполнении проверки. Если вspec.addressесть префикс пути, он игнорируется при проверке аутентификации. Чтобы включить префикс пути, используйтеAuthentication Check Expressionsдля динамического получения.spec.authProbes[].probe.http.methodуказывает HTTP-метод для проверки аутентификации, поддерживаются GET и POST. По умолчанию GET.spec.authProbes[].probe.http.disableRedirectуказывает, отключать ли HTTP-перенаправления при проверке аутентификации. По умолчанию false (разрешено автоматическое перенаправление).spec.authProbes[].probe.http.httpHeadersуказывает HTTP-заголовки, которые будут включены в запросы проверки аутентификации.spec.authProbes[].probe.http.schemeуказывает схему URI для проверки аутентификации. По умолчанию берется схема из адреса коннектора.spec.authProbes[].probe.http.response.celуказывает ожидаемый ответ для проверки аутентификации.- Поведение по умолчанию: успех при возврате 200.
- Пользовательская проверка: при настройке выражения CEL аутентификация считается успешной, если выражение возвращает
true.
В выражении CEL доступны следующие переменные:
Пример
Следующая YAML-конфигурация демонстрирует, что при проверке аутентификации система отправит запрос GET https://example.com/ HTTP/1.1 на адрес коннектора с заголовком Authorization: abc.
Проверка с помощью API ConnectorClass
Вы можете настроить spec.authProbes[].probe.api для выполнения проверки аутентификации с помощью API ConnectorClass. Для этого сначала необходимо настроить spec.api в спецификации ConnectorClass. Ответ 200 означает успешную аутентификацию, а 401 или 403 — ошибку аутентификации. Подробнее о ConnectorClass API.
spec.authProbes[].probe.api.pathуказывает путь эндпоинта API для проверки аутентификации. Это относительный путь, который будет добавлен к адресу API, полученному из конфигурацииspec.apiConnectorClass. Если вspec.apiесть префикс пути, он будет включен при проверке аутентификации.
Пример
Следующая YAML-конфигурация демонстрирует, что при проверке аутентификации система отправит запрос GET https://example-api.default.svc.cluster.local/api/auth/check HTTP/1.1 к API ConnectorClass.
Пользовательские параметры проверки аутентификации
Некоторые сценарии проверки аутентификации требуют дополнительных параметров, например, указания имени репозитория при проверке доступа к Git-репозиторию. Эти параметры можно определить с помощью spec.authProbes[].params.
Выражения проверки аутентификации
При настройке authProbes можно использовать выражения для динамического получения информации об учетных данных или метаданных Connector.
Например:
- Выражения можно использовать в полях
probe.http.httpHeaders,probe.http.pathиprobe.api.path. - Формат выражений соответствует синтаксису Go template.
- Поддерживаемые верхнеуровневые поля включают:
.Connector: содержит информацию о ресурсе Connector.Secret: содержит данные Secret, используемые для аутентификации Connector
- Доступные методы в выражениях документированы в библиотеке sprig:
- Например:
b64encдля Base64-кодирования строк,trimPrefixдля удаления префиксов строк
- Например:
Пример
Проверка базовой аутентификации:
Коннектор выполнит проверку аутентификации согласно конфигурации, определённой в ConnectorClass.
В приведённом YAML показана базовая проверка аутентификации:
path: использует значениеrepositoryизauth.paramsConnector, формируя путь как/<repository>/info/refs?service=git-upload-packAuthorization: если в Connector настроен Secret, поляusernameиpasswordкодируются в Base64 и включаются в заголовок Basic аутентификации.
Конфигурация логики аутентификации на основе Rego
Если коннекторы инструментов требуют более сложной логики аутентификации, можно использовать конфигурацию логики аутентификации на основе Rego.
Rego — декларативный язык политик, позволяющий определять логику аутентификации. В ConnectorClass политики Rego задаются в поле auth.types[].generator.rego:
Политика Rego должна соответствовать следующим правилам:
- Определять правила в пакете
proxy - Возвращать объект
authсо структурой:position: место вставки аутентификации, например,"header","query"или"body"contentType: тип содержимого для вставки в тело (опционально, используется с позицией"body")auth: карта ключ-значение аутентификации
Переменные, доступные в Rego
Примеры политик Rego
Базовая аутентификация
Аутентификация с API ключом
Аутентификация с JSON телом
Продвинутые техники Rego
Можно использовать условную логику Rego для разных методов аутентификации:
Условная аутентификация
Аутентификация на основе времени
Для подробностей по языку Rego смотрите:
API ConnectorClass
API ConnectorClass позволяет разработчикам расширять возможности API для ConnectorClass через дополнительный HTTP API-сервис. Это предоставляет RESTful API для ConnectorClass, позволяя клиентам легко получать доступ к ресурсам внутри инструментов при использовании Connectors.
Если нет необходимости предоставлять кастомные API-возможности для инструмента, spec.api можно не определять.
Настройка адреса API
API ConnectorClass настраивается в поле spec.api. Вы можете указать сервис API тремя способами:
1. Через ссылку на Kubernetes Service:
2. Через ссылку на Service с префиксом пути URI:
Если у API есть фиксированный префикс пути, его можно указать через spec.api.uri:
3. Через абсолютный URI:
Также можно использовать spec.api.uri для указания абсолютного пути API:
Разрешение адреса API
Независимо от способа настройки, итоговый разрешённый адрес API будет храниться в status.api.address.url. Например:
Подробнее см.:
Описание OpenAPI
Описание OpenAPI — это опциональная конфигурация, которая служит двум основным целям:
- Отметить, является ли API кастомным или использует Connector Proxy для доступа к оригинальному API инструмента
- Предоставить определения API для поддержки ссылок на API в динамических формах клиента
Вы можете определить описание OpenAPI с помощью spec.api.openapi. Структура соответствует спецификации OpenAPI 3.0. Например:
Вы можете определить расширенное поле x-provider-type в путях API, чтобы отметить, является ли API кастомным или использует Proxy для доступа к оригинальному API инструмента. Допустимые значения: api или proxy.
Расширение x-provider-type определяется как: api.openapi.paths[<path>].<verb>[x-provider-type]
Пример:
Когда клиенты запрашивают Connector API, система Connectors определяет, использовать ли кастомный API или напрямую обращаться к оригинальному API инструмента через Connectors Proxy на основе значения x-provider-type в ConnectorClass, соответствующем текущему Connector. Если эта информация отсутствует или не найдено совпадения по пути API, система по умолчанию использует Connectors Proxy для доступа к оригинальному API инструмента.
Если необходимо ссылаться на API в динамических формах, требуется дополнительная настройка в spec.api.openapi. Подробнее см. Использование API Connectors в динамических формах.
Возможности конфигурации
Возможности конфигурации определяют конфигурационные файлы, которые ConnectorClass предоставляет клиентам. Эти файлы могут монтироваться в Pods с помощью Connectors-CSI Driver.
Типы конфигураций
- Пользовательские конфигурации: определяются в
spec.configurations - Встроенные конфигурации: автоматически предоставляются Connectors-CSI Driver (см. Встроенные конфигурации)
Пользовательские конфигурации
Конфигурации задаются через spec.configurations:
Подробнее см.: Рендеринг конфигурационных файлов
Примечание: spec.configurations опционально. Если не определено, доступны только встроенные конфигурации.
Метаданные для удобочитаемого отображения
ConnectorClass — это стандартный ресурс Kubernetes, который можно помечать пользовательской информацией с помощью labels и annotations.
Например:
Например:
Proxy ConnectorClass
Proxy ConnectorClass используется для настройки адреса прокси для ConnectorClass.
Proxy ConnectorClass настраивается через spec.proxy. Например:
Коннектор будет использовать адрес прокси для проксирования запросов к ConnectorClass. Подробнее
Использование Rego для извлечения токена из запроса
При использовании встроенного обратного прокси можно настроить правила Rego через spec.proxy.authExtractor для извлечения токенов из запросов клиентов, что позволяет встроенному обратному прокси проверять аутентификацию клиента по извлечённому токену.
Например:
Правила Rego должны соответствовать следующим требованиям:
- Правила должны быть определены в пакете
proxy - Использовать переменную
authдля возврата токена, где токен — строка, например:auth = { "token": "abcd1234" } - Если токен не может быть извлечён, возвращать пустую строку, например:
auth = { "token": "" }
В Rego доступны следующие переменные:
Примечания:
- Ключи заголовков в
headersиспользуют формат Canonical MIME Header Key (первая буква заглавная) - При реализации правил Rego обеспечьте устойчивость логики. Например, возвращайте пустую строку, если
input.request.headersравен null или пуст.
Пример
Этот пример демонстрирует устойчивое извлечение токена за счёт:
- Определения правила по умолчанию, возвращающего пустой токен
- Проверки, что заголовки существуют и не равны null перед доступом к ним
- Проверки, что ключ заголовка существует и содержит хотя бы одно значение
Для более продвинутых правил Rego смотрите документацию Rego Policy Language. Для дополнительной информации по использованию встроенного обратного прокси смотрите Connectors Proxy.
Тип резолвера
Адрес прокси ConnectorClass будет разрешаться в соответствии с указанным типом resolver.
Тип resolver настраивается через аннотацию connectors.cpaas.io/proxy-resolver. Например:
Это соглашение между ConnectorClass-Proxy и Connector. Опционально.
Поддерживаемые значения: host, path. По умолчанию host.
- Формат
host:http://{.ConnectorClass.Status.ProxyAddress.URL} - Формат
path:http://{.ConnectorClass.Status.ProxyAddress.URL}/namespaces/{namespace}/connectors/{connector-name}
Информация о статусе
После определения ресурса ConnectorClass информация о статусе будет храниться в status.
Типы status.conditions включают:
APIReady: статус API-возможностейProxyReady: статус Proxy-возможностейReady: общий статус текущего ConnectorClass
Условие Ready
Условие Ready используется для обозначения статуса текущего ConnectorClass. Оно агрегирует статусы других условий.
- Если все другие условия True, текущее условие True.
- Если хотя бы одно другое условие False, текущее условие False.
- Если хотя бы одно другое условие Unknown, текущее условие Unknown.
Условие APIReady
Отражает статус API-сервиса, настроенного для ConnectorClass. API-сервис настраивается через spec.api ConnectorClass.
Примечания:
- Проверка API выполняет только запрос по ссылке и не оценивает HTTP-статусы. Проверка здоровья API должна опираться на собственный механизм проверки API-сервиса.
- Поскольку API-сервис может изменяться в любой момент, статус не отражает информацию в реальном времени. Рекомендуется использовать статус как подсказку, а не для блокировки поведения клиента.
Условие ProxyReady
Отражает статус Proxy-сервиса, настроенного для ConnectorClass. Proxy-сервис настраивается через spec.proxy ConnectorClass.
Совместимость
Обновления ConnectorClass могут повлиять на существующие Connectors. Если в ConnectorClass внесены несовместимые изменения, это может привести к неработоспособности ранее созданных Connectors. Возможные изменения, приводящие к несовместимости:
-
Изменения в информации об аутентификации: если ConnectorClass изменяет поддерживаемые типы или методы аутентификации, это может привести к сбоям у Connectors, использующих старый метод.
-
Изменения в конфигурационной информации: если изменяется конфигурация ConnectorClass, например, удаляется существующая конфигурация, это может привести к сбоям Kubernetes workloads, зависящих от старой конфигурации.
Рекомендуется тщательно оценивать область влияния при обновлении ConnectorClass или при необходимости создавать новый ConnectorClass.
Дополнительные примеры
-
ConnectorClass, поддерживающий тип аутентификации
basic-auth -
ConnectorClass с пользовательским типом аутентификации
-
ConnectorClass с настроенной
liveness probe -
ConnectorClass с настроенной
auth probe -
Полный пример конфигурации git-коннектора: