ConnectorClass
Содержание
ОбзорИнформация об адресеПараметрыИнформация об аутентификацииТип аутентификацииПараметры аутентификацииНеобязательная аутентификацияПроверка доступностиПроверка с использованием HTTP-запросовПроверка с использованием ConnectorClass APIПроверка аутентификацииПроверка с использованием HTTP-запросовПроверка с использованием ConnectorClass APIПользовательские параметры проверки аутентификацииВыражения проверки аутентификацииНастройка логики аутентификации на основе RegoПеременные, доступные в RegoПримеры политик RegoПродвинутые приемы RegoConnectorClass APIНастройка адреса APIРазрешение адреса APIОписание OpenAPIВозможности конфигурацииТипы конфигурацийПользовательские конфигурацииМетаданные для отображения в удобочитаемом видеConnectorClass ProxyИспользование Rego для извлечения токена из запросаТип resolverИнформация о состоянииСовместимостьБольше примеровДополнительноОбзор
ConnectorClass — это ресурс уровня кластера, который определяет режимы доступа и спецификации поведения для определенных типов инструментов.
Следующий пример определяет коннектор типа hello-git, который поддерживает базовую аутентификацию:
В ConnectorClass режимы доступа и спецификации поведения для подключения инструментов к платформе определяются через описание следующей информации:
- Формат адреса доступа к инструменту
- Поддерживаемые методы аутентификации
- Как проверять доступность инструмента
- Как проверять корректность аутентификации
- Как инструмент предоставляет возможности API
- Какие возможности конфигурации предоставляет инструмент
- Метаданные для удобного отображения
В этом документе также приведены примеры, которые помогут читателям лучше понять, как настраивать ConnectorClass. Примеры
Информация об адресе
Информация об адресе определяет формат доступа к инструменту. В настоящее время поддерживаются конфигурации адреса строкового типа. Эта информация об адресе ограничивает проверки типа поля, которым должен соответствовать текущий тип инструмента.
На этом этапе это означает, что информация об адресе для подключения инструмента к платформе должна иметь тип string.
Параметры
Параметры используются для определения дополнительных параметров при создании коннектора.
Вы можете определить обязательные параметры для создания коннектора с помощью поля connectorclass spec.params.
spec.params[].name— имя параметра.spec.params[].type— тип параметра. В настоящее время поддерживается только типstring.spec.params[].default— значение параметра по умолчанию (необязательно). Если задано значение по умолчанию, пользователи могут не указывать этот параметр при создании коннектора.spec.params[].description— описание параметра (необязательно).
Например, следующее определение позволяет пользователям указывать параметр sslVerify при создании коннектора типа git, со значением по умолчанию true.
См. документацию Connector для параметров конфигурации при создании Connectors.
В сочетании с возможностями connectors-csi-driver это обеспечивает более гибкую настройку. Это особенно полезно, когда требуется предоставить параметризованные конфигурации. Например, при создании коннектора типа git пользователи могут указать параметр sslVerify, чтобы управлять проверкой SSL-сертификата. Дополнительные сведения см. в документации Конфигурация ConnectorClass.
Информация об аутентификации
Тип аутентификации
Тип аутентификации определяет тип учетных данных, используемых для аутентификации инструмента. Инструмент может поддерживать несколько типов аутентификации, позволяя пользователям выбирать один из них при использовании инструмента.
Пользователи могут задавать уникальное имя текущего типа аутентификации через:
spec.auth.types[].name, которое должно быть уникальным и не может повторяться.spec.auth.types[].secretType, которое указывает типSecret, необходимого для аутентификации, и соответствует Kubernetes Secret Type.
Пример:
В встроенных типах K8S Secret Type все типы, кроме Opaque, имеют ограничения на поля. При предоставлении Secret пользователь должен убедиться, что поля Secret соответствуют ограничениям типа.
При использовании типа Opaque необходимо объявить параметры аутентификации.
Как и в k8s, вы также можете использовать собственный Secret Type. В этом случае необходимо объявить параметры аутентификации.
Параметры аутентификации
Параметры, необходимые для учетных данных при аутентификации, определяются через 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 можно не указывать.
Проверка доступности
Проверки доступности используются для проверки того, доступен ли инструмент в обычном режиме. Конфигурация этого типа проверки задается через поле livenessProbe.
Проверка доступности может выполняться либо с помощью HTTP-запросов, либо через ConnectorClass API.
Проверка с использованием HTTP-запросов
Вы можете настроить spec.livenessProbe.http для выполнения проверки доступности с помощью HTTP-запросов.
Пример
Следующий фрагмент показывает, что проверка выполняется с использованием HTTP-запросов.
Когда инструмент возвращает статус 200, он считается доступным.
Дополнительные сведения см. в разделе Проверка с использованием HTTP-запросов в Authentication Probe. Конфигурация идентична, за исключением путей к полям.
Проверка с использованием ConnectorClass API
Вы можете настроить spec.livenessProbe.api для выполнения проверки доступности с использованием ConnectorClass API.
Пример
Следующий фрагмент показывает, что проверка выполняется с использованием ConnectorClass API.
Дополнительные сведения см. в разделе Проверка с использованием ConnectorClass API в Authentication Probe. Конфигурация идентична, за исключением путей к полям.
Проверка аутентификации
Проверка аутентификации используется для подтверждения корректности учетных данных аутентификации для инструментов этого типа. Если проверка аутентификации не требуется, поле authProbes можно не указывать.
spec.authProbes[].authNameуказывает проверяемый тип аутентификации и должен совпадать с одним из имен, определенных вspec.auth.types[].name.
Проверка аутентификации может выполняться либо с помощью HTTP-запросов, либо через ConnectorClass API.
Проверка с использованием HTTP-запросов
Вы можете настроить spec.authProbes[].probe.http для выполнения проверки аутентификации с использованием HTTP-запросов.
spec.authProbes[].probe.http.hostуказывает целевой host для проверки аутентификации. По умолчанию используется host из адреса коннектора.spec.authProbes[].probe.http.pathуказывает путь запроса для проверки аутентификации. Это абсолютный путь, который будет добавлен к URI host, полученному из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 scheme для проверки аутентификации. По умолчанию используется scheme из адреса коннектора.
Пример
Следующая конфигурация YAML демонстрирует, что во время проверки аутентификации система отправит запрос GET https://example.com/ HTTP/1.1 к адресу коннектора с заголовком Authorization: abc.
Проверка с использованием ConnectorClass API
Вы можете настроить spec.authProbes[].probe.api для выполнения проверки аутентификации с использованием ConnectorClass API. Сначала необходимо настроить spec.api в спецификации ConnectorClass. Ответ 200 указывает на успешную аутентификацию, тогда как ответ 401 или 403 указывает на сбой аутентификации. Подробнее о ConnectorClass API.
spec.authProbes[].probe.api.pathуказывает путь endpoint API для проверки аутентификации. Это относительный путь, который будет добавлен к адресу API, полученному из конфигурацииspec.apiConnectorClass. Еслиspec.apiсодержит префикс пути, этот префикс будет включен при выполнении проверки аутентификации.
Пример
Следующая конфигурация YAML демонстрирует, что во время проверки аутентификации система отправит запрос GET https://example-api.default.svc.cluster.local/api/auth/check HTTP/1.1 к ConnectorClass API.
Пользовательские параметры проверки аутентификации
Некоторые сценарии проверки аутентификации могут требовать дополнительных параметров, например указания имени репозитория при проверке доступа к 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для удаления префиксов строк
- Например:
Пример
Проверка аутентификации Basic Authentication:
Коннектор выполнит проверку аутентификации на основе конфигурации, определенной в ConnectorClass.
Приведенный выше YAML демонстрирует проверку Basic Authentication:
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 (необязательно, используется вместе с позицией
"body") - auth: map пар ключ-значение для аутентификации
- position: место внедрения аутентификации, например
Переменные, доступные в Rego
Примеры политик Rego
Basic Authentication
Аутентификация с API Key
Аутентификация через JSON Body
Продвинутые приемы Rego
Вы можете использовать условную логику Rego для разных методов аутентификации:
Условная аутентификация
Аутентификация на основе времени
Дополнительные сведения о языке Rego см. в документации:
ConnectorClass API
ConnectorClass API позволяет разработчикам расширять возможности API для ConnectorClass через дополнительный HTTP API service. Это предоставляет RESTful API для ConnectorClass, позволяя клиентам легко получать доступ к ресурсам внутри инструментов при использовании Connectors.
Если для инструмента не требуется предоставлять пользовательские возможности API, spec.api можно не задавать.
Настройка адреса API
ConnectorClass API настраивается в поле spec.api. Вы можете указать API service тремя способами:
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 пользовательским API или использует Connector Proxy для доступа к исходному API инструмента
- Предоставляет определения API для поддержки ссылок на API в динамических формах клиента
Вы можете определить описание OpenAPI с помощью spec.api.openapi. Структура соответствует спецификации OpenAPI 3.0. Например:
В путях API можно определить расширение x-provider-type, чтобы отметить, является ли API пользовательским или использует Proxy для доступа к исходному API инструмента. Допустимые значения: api или proxy.
Расширение x-provider-type определяется как: api.openapi.paths[<path>].<verb>[x-provider-type]
Пример:
Когда клиенты запрашивают Connector API, система Connectors определяет, использовать ли пользовательский API или напрямую применять Connectors Proxy для доступа к исходному API инструмента, на основе значения x-provider-type в ConnectorClass, соответствующем текущему Connector. Если эта информация не предоставлена или не найден подходящий путь API, система по умолчанию использует Connectors Proxy для доступа к исходному API инструмента.
Когда требуется ссылаться на API в динамических формах, в spec.api.openapi необходима дополнительная конфигурация. Дополнительные сведения см. в разделе Использование Connectors API в динамических формах.
Возможности конфигурации
Возможности конфигурации определяют файлы конфигурации, которые ConnectorClass предоставляет клиентам. Эти файлы можно монтировать в Pods с помощью Connectors-CSI Driver.
Типы конфигураций
- Пользовательские конфигурации: определяются в
spec.configurations - Встроенные конфигурации: автоматически предоставляются Connectors-CSI Driver (см.: Встроенные конфигурации)
Пользовательские конфигурации
Конфигурации задаются через spec.configurations:
Дополнительные сведения см. в разделе: Рендеринг файлов конфигурации
Примечание: spec.configurations необязателен. Если он не задан, доступны только встроенные конфигурации.
Метаданные для отображения в удобочитаемом виде
ConnectorClass — это стандартный ресурс k8s, которому можно назначать пользовательскую информацию с помощью labels и annotations.
Например:
Например:
ConnectorClass Proxy
ConnectorClass Proxy используется для настройки адреса proxy для ConnectorClass.
ConnectorClass Proxy настраивается через spec.proxy. Например:
Connector будет использовать адрес proxy для проксирования запроса к ConnectorClass. Дополнительная информация
Использование Rego для извлечения токена из запроса
При использовании встроенного reverse proxy вы можете настроить правила Rego через spec.proxy.authExtractor, чтобы извлекать токены из запросов клиента, позволяя встроенному reverse proxy проверять аутентификацию клиента с использованием извлеченного токена.
Например:
Правила Rego должны соответствовать следующим требованиям:
- Правила должны быть определены в пакете
proxy - Используйте переменную
authдля возврата токена, где токен имеет строковый тип, например:auth = { "token": "abcd1234" } - Если токен не удается извлечь, возвращайте пустую строку, например:
auth = { "token": "" }
В Rego доступны следующие переменные:
Примечания:
- Ключи заголовков в
headersиспользуют формат Canonical MIME Header Key (первая буква в слове в верхнем регистре) - При реализации правил Rego обеспечьте устойчивую логику. Например, возвращайте пустую строку, если
input.request.headersравен null или пуст
Пример
Этот пример демонстрирует устойчивое извлечение токена за счет:
- определения правила по умолчанию, возвращающего пустую строку токена
- проверки, что заголовки существуют и не равны null, перед обращением к ним
- проверки, что указанный ключ заголовка существует и содержит как минимум одно значение
Дополнительные сведения о более продвинутых правилах Rego см. в документации Rego Policy Language. Дополнительные сведения об использовании встроенного reverse proxy см. в Connectors Proxy.
Тип resolver
Адрес 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: информация о состоянии возможности APIProxyReady: информация о состоянии возможности ProxyReady: отмечает общее состояние текущего ConnectorClass
Состояние Ready
Состояние Ready Condition используется для обозначения статуса текущего ConnectorClass. Оно агрегирует статусы других условий.
- Когда другие Conditions имеют значение True, текущее Condition имеет значение True.
- Когда любое другое Condition имеет значение False, текущее Condition имеет значение False.
- Когда любое другое Condition имеет значение Unknown, текущее Condition имеет значение Unknown.
Состояние APIReady
Указывает информацию о состоянии API service, настроенного для ConnectorClass. API service настраивается через spec.api ConnectorClass.
Примечание:
- Проверка API только пытается обратиться по ссылке и не выполняет оценку HTTP-ответа. Проверка работоспособности API service должна опираться на механизм health check самого API service.
- Поскольку API service может измениться в любой момент, информация о состоянии API не может отражать данные в реальном времени. Рекомендуется использовать эту информацию как подсказку, а не как механизм, блокирующий действия клиента.
Состояние ProxyReady
Указывает информацию о состоянии Proxy service, настроенного для ConnectorClass. Proxy service настраивается через spec.proxy ConnectorClass.
Совместимость
Обновления ConnectorClass могут повлиять на существующие Connectors. Если в ConnectorClass вносятся несовместимые изменения, это может привести к тому, что ранее созданные Connectors станут недействительными. Ниже приведены возможные изменения, которые могут привести к несовместимости:
-
Изменения в информации об аутентификации: если ConnectorClass изменяет поддерживаемые типы или методы аутентификации, это может привести к сбоям в работе Connectors, использующих старый метод аутентификации.
-
Изменения в информации о конфигурации: если изменяется информация о конфигурации ConnectorClass, например удаляется существующая конфигурация, это может привести к сбоям в работе рабочих нагрузок Kubernetes, зависящих от старой конфигурации.
Рекомендуется уточнять масштаб влияния при обновлении ConnectorClass, либо при необходимости создавать новый ConnectorClass.
Больше примеров
-
ConnectorClass, поддерживающий тип аутентификации
basic-auth -
ConnectorClass с пользовательским типом аутентификации
-
ConnectorClass, настроенный с
liveness probe -
ConnectorClass, настроенный с
auth probe -
Полный пример конфигурации Git-коннектора: