Расширение API ConnectorClass по сути сводится к созданию Restful API сервера. При расширении возможностей API для ConnectorClass необходимо включить две части информации:
spec.api
ConnectorClass. Это позволяет системе знать текущий адрес API для ConnectorClass. См. раздел «API Address Specification».Информация об адресе API должна быть указана в поле spec.api
ConnectorClass.
Нет ограничений на то, находится ли сервис API ConnectorClass внутри текущего кластера. Главное, чтобы система Connectors могла достучаться до адреса сервиса.
Конфигурация полей может ссылаться на описание connectorclass api
в connectorclass.
Когда система Connectors получает запрос от клиента, она перенаправляет запрос на адрес API ConnectorClass, к которому принадлежит Connector.
Адрес API имеет формат {connectorclass.status.api.address.url}/{resource-name}
При перенаправлении API-запросов система Connectors передаёт информацию для аутентификации сервису API ConnectorClass через Http Header.
Информация для аутентификации включает:
Tool Address Information
: передаётся через Http Header X-Plugin-Meta
.Authentication Type
: передаётся через Http Header X-Plugin-Auth
.Authentication Data
: передаётся через Http Header X-Plugin-Secret
.X-Plugin-Meta
Значение — это строка, закодированная в Base64, содержащая {"baseURL":"Адрес инструмента Connector"}
. Например:
{"baseURL":"http://github.com"}
кодируется в eyJiYXNlVVJMIjoiaHR0cDovL2dpdGh1Yi5jb20ifQ==
При декодировании Base64 из заголовка получается JSON-строка {"baseURL":""}
, где значение baseURL
— это адрес доступа к инструменту.
X-Plugin-Auth
Значение — это строка, закодированная в Base64, представляющая K8S Secret Type.
Например, kubernetes.io/basic-auth
кодируется в a3ViZXJuZXRlcy5pby9iYXNpYy1hdXRo
При декодировании Base64 из заголовка получается тип Secret.
X-Plugin-Secret
Значение — это строка, закодированная в Base64, представляющая JSON-строку с K8S Secret Data.
Например, {"username":"YWRtaW4=","password":"c2VjcmV0"}
кодируется в eyJ1c2VybmFtZSI6IllXUnRhVzQ9IiwicGFzc3dvcmQiOiJjMlZqY21WMCJ9
При декодировании Base64 из заголовка получается JSON-строка {"username":"YWRtaW4=","password":"c2VjcmV0"}
. Чтобы получить значение ключа, необходимо повторно декодировать base64, чтобы получить исходное значение.
Пример запроса
Указывается через параметры Query:
Parameter Name | Type | Required | Description |
---|---|---|---|
page | int | false | Номер страницы |
itemsPerPage | int | false | Количество элементов на странице |
При возврате списка структура должна быть следующей:
Field Name | Type | Required | Description |
---|---|---|---|
listMeta | ListMeta | true | Метаданные списка |
listMeta.totalItems | int | true | Общее количество запрошенных ресурсов, используется клиентом для анализа пагинации |
items | [] | true | Элементы данных списка, структура которых определяется API ConnectorClass |
Если ответ не 200, возвращаемая структура данных должна соответствовать k8s status
Например:
Определения полей и значения перечислений совпадают с k8s status
Разработчики могут определять самостоятельно. Рекомендуется: