ConnectorClass
— это ресурс уровня кластера, который определяет режимы доступа и спецификации поведения для определённых типов инструментов.
Следующий пример определяет коннектор типа hello-git
, который поддерживает базовую аутентификацию:
В ConnectorClass режимы доступа и спецификации поведения для подключения инструментов к платформе определяются описанием следующей информации:
В этом документе также приведены примеры, которые помогут лучше понять, как настраивать ConnectorClass. Примеры
Информация об адресе определяет формат доступа к инструменту. В настоящее время поддерживаются конфигурации адреса типа string. Эта информация ограничивает тип поля, которому должен соответствовать текущий тип инструмента.
Это означает, что информация об адресе для подключения инструмента к платформе должна быть типа string
.
Тип аутентификации определяет тип учетных данных, используемых для аутентификации инструмента. Инструмент может поддерживать несколько типов аутентификации, позволяя пользователю выбирать один из них при использовании инструмента.
Пользователь может уникально назвать текущий тип аутентификации через
spec.auth.types[].name
, который должен быть уникальным и не повторяться.spec.auth.types[].secretType
, который указывает тип Secret
, необходимого для аутентификации, соответствующий типу Kubernetes Secret.Пример:
В встроенных типах K8S Secret все типы, кроме Opaque
, имеют ограничения по полям. При предоставлении Secret пользователь должен обеспечить соответствие полей Secret этим ограничениям.
При использовании типа Opaque
необходимо объявить параметры аутентификации.
Как и в k8s, можно использовать собственный тип 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 может быть опущена.
Проверка доступности используется для проверки, можно ли нормально получить доступ к инструменту. Конфигурация способа проведения этой проверки задаётся через поле livenessProbe
.
Например, следующий фрагмент указывает, что проверка выполняется с помощью HTTP-запросов.
Если инструмент возвращает статус 200, считается, что он доступен.
Проверка аутентификации используется для проверки валидности информации аутентификации для инструментов данного типа. Если проверка аутентификации не требуется, authProbes
можно опустить.
Например, следующий YAML указывает, что при проверке аутентификации инструмента будет выполнен HTTP GET-запрос с добавленным заголовком Authorization: abc
.
authName
указывает используемый тип аутентификации, должен совпадать с spec.auth.types[].name
.spec.authProbes[].probe.http.method
задаёт HTTP-метод для аутентификации, поддерживаются GET и POST. По умолчанию GET.spec.authProbes[].probe.http.disableRedirect
указывает, отключать ли переадресацию при аутентификации. По умолчанию разрешена автоматическая переадресация.Некоторые проверки аутентификации могут требовать дополнительных параметров, например, указания имени репозитория при проверке доступа к Git-репозиторию. Они могут быть заданы через spec.authProbes[].params
.
При настройке authProbes
можно использовать выражения для динамического получения информации об учетных данных или информации о Connector.
Например,
httpHeaders
и path
..Connector
: информация самого Connector.Secret
: информация Secret, используемого для данных Connectorb64enc
— Base64 кодирование строк, trimPrefix
— удаление префикса строкиПроверка аутентификации Basic Auth
Коннектор будет выполнять проверку валидности на основе информации в ConnectorClass.
Приведённый выше yaml
указывает проверку аутентификации для basic auth
:
path
: использует значение repository
, заданное в auth.params
внутри информации Connector
, объединённое в строку /<repository>/info/refs?service=git-upload-pack
Authorization
: если в Connector настроен Secret, возвращаются поля username
и password
из Secret в base64.Если коннекторам инструментов требуется более сложная логика аутентификации, можно использовать конфигурацию логики аутентификации на основе Rego.
Rego — декларативный язык политик, позволяющий определять логику аутентификации. В ConnectorClass политики Rego задаются в поле auth.types[].generator.rego
:
Политика Rego должна соответствовать следующим правилам:
Можно использовать условную логику Rego для разных методов аутентификации:
Для получения дополнительной информации о языке Rego см.:
Предоставляет RESTful API для текущего ConnectorClass, позволяя клиентам легко получать доступ к ресурсам внутри инструментов при использовании Connectors.
Если нет необходимости предоставлять API возможности для инструмента, spec.api
можно не определять.
API ConnectorClass настраивается в поле spec.api
, например:
Можно указать информацию о Service API через spec.api.ref
. Если у API ConnectorClass есть фиксированный префикс адреса, его можно указать через spec.api.uri
. Например:
Кроме того, можно использовать spec.api.uri
для указания абсолютного пути API. Например:
Вне зависимости от формы, итоговый разрешённый адрес API будет храниться в status.api.address.url
. Например:
Указание API connectorclass через service:
Указание API connectorclass через uri:
Указание API connectorclass через svc с использованием spec.api.uri
для указания пути API:
Для дополнительной информации см.:
Возможности конфигурации используются для определения конфигурационной информации для данного типа инструмента. Эта конфигурационная информация может быть смонтирована в Pods совместно с connectors-csi-driver.
Если клиенту не требуется опираться на конфигурационную информацию при доступе к инструменту, spec.configurations
можно не определять.
Конфигурационная информация задаётся через spec.configurations
. Например:
Обычно можно указать определённый тип конфигурационной информации для класса инструментов, чтобы облегчить конфигурацию при использовании. Например:
git
предоставить конфигурацию для .gitconfig
oci registry
предоставить конфигурацию для config.json
Содержимое конфигурации поддерживает использование переменных, которые могут динамически рендериться при монтировании. Подробнее см. описание "Рендеринг конфигурационных файлов" в connectors-csi-driver.
Следующий ConnectorClass предоставляет файл с именем .gitconfig
, который используется для игнорирования проверки SSL при git clone
.
Следующий ConnectorClass предоставляет файл с именем .gitconfig
, который автоматически внедряет заголовки и заменяет URL git при git clone
.
ConnectorClass
— стандартный ресурс k8s, который можно помечать пользовательской информацией с помощью labels
и annotations
.
Например:
Ключ | Описание |
---|---|
ui.cpaas.io/icon | Иконка для ConnectorClass, необязательно. Формат: data:image/svg+xml;base64,PD94bWwgdmVyc2... |
cpaas.io/display-name | Отображаемое имя для ConnectorClass, необязательно. |
cpaas.io/description | Описание для ConnectorClass, необязательно. |
connectors.cpaas.io/readme | Инструкция по использованию ConnectorClass, необязательно. Обычно используется для кастомных сценариев, когда docs-link недоступна. Поддерживает Markdown. |
connectors.cpaas.io/docs-link | Ссылка на документацию ConnectorClass, необязательно. Относительный или абсолютный путь. |
Пример:
Proxy ConnectorClass используется для настройки адреса прокси для ConnectorClass.
Proxy ConnectorClass настраивается через spec.proxy
. Например:
Коннектор будет использовать адрес прокси для проксирования запросов к ConnectorClass. Подробнее
Адрес прокси 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 Condition
используется для отметки статуса текущего ConnectorClass. Оно агрегирует статусы других условий.
Условие APIReady
Отражает статус API сервиса, настроенного для ConnectorClass. API сервис настраивается через spec.api ConnectorClass.
Статус | Причина | Описание |
---|---|---|
True | NonAPI | spec.api не настроен, у текущего ConnectorClass нет API возможностей |
True | spec.api определён, API сервис работает нормально | |
False | spec.api определён, API возможности работают некорректно или проверка неудачна | |
Unknown | Проверка API возможностей в процессе |
Примечания:
Условие ProxyReady
Отражает статус Proxy сервиса, настроенного для ConnectorClass. Proxy сервис настраивается через spec.proxy ConnectorClass.
Статус | Причина | Описание |
---|---|---|
True | NonProxy | spec.proxy не настроен, у текущего ConnectorClass нет Proxy возможностей |
True | spec.proxy определён, Proxy сервис работает нормально | |
False | spec.proxy определён, Proxy возможности работают некорректно или проверка неудачна | |
Unknown | Проверка Proxy возможностей в процессе |
Обновления ConnectorClass могут повлиять на существующие Connectors. Если в ConnectorClass внесены несовместимые изменения, это может привести к тому, что ранее созданные Connectors станут недействительными. Возможные изменения, приводящие к несовместимости:
Изменения в информации об аутентификации: если ConnectorClass изменяет поддерживаемые типы или методы аутентификации, это может привести к сбоям Connectors, использующих старый метод аутентификации.
Изменения в конфигурационной информации: если изменяется конфигурация ConnectorClass, например удаляется существующая конфигурация, это может привести к сбоям Kubernetes workloads, зависящих от старой конфигурации.
Рекомендуется при обновлении ConnectorClass подтверждать область влияния или при необходимости создавать новый ConnectorClass.
ConnectorClass, поддерживающий тип аутентификации basic-auth
ConnectorClass с пользовательским типом аутентификации
ConnectorClass с настроенной liveness probe
ConnectorClass с настроенной auth probe
Полный пример конфигурации Git коннектора: