Коннектор
Содержание
ОбзорАдрес коннектораБазовый формат URLURL с префиксом путиРасширения адреса коннектораПараметры коннектораИнформация об аутентификацииНастройка информации об аутентификацииНеобязательная аутентификацияПроверка аутентификацииПользовательские CA-сертификатыСсылка на CA-сертификат для конкретного ConnectorГлобальные CA-сертификатыАдрес proxyИнформация о статусеПримерыКоннектор Git с базовой аутентификациейКоннектор Git без аутентификацииОбзор
Connector — ресурс уровня namespace, используемый для определения конфигурации подключения между инструментами и платформами. Он включает:
- Адрес доступа к инструменту
- Информацию аутентификации инструмента
- Информацию о состоянии инструмента
Например, следующее определение иллюстрирует коннектор типа Git:
Адрес коннектора
Поле address задает URL endpoint целевого инструмента, с которым Connector будет интегрироваться. Оно принимает как корневые URL, так и URL с префиксом пути.
Базовый формат URL
Для инструментов, доступных в корневом домене:
URL с префиксом пути
Для инструментов, развернутых за reverse proxy или доступных по определенным путям:
Примечание
Проверки аутентификации и liveness probe на основе http не будут выполняться по префиксу пути. Если вы хотите выполнять проверку по префиксу пути, можно использовать выражения проверки аутентификации и выражения проверки liveness.
Подробнее см. liveness probe и authentication probe.
Расширения адреса коннектора
spec.addressExtensions определяет дополнительные именованные адреса в экземпляре Connector.
Доступные имена берутся из расширений адреса ConnectorClass.
spec.addressExtensions[].name: Имя расширения. Должно быть уникальным в пределах одного Connector.spec.addressExtensions[].value: Значение расширения. Должно быть непустым URL сhttp/https.
Проверка при допуске обеспечивает соблюдение как синтаксических ограничений, так и ограничений класса:
- Должны быть указаны расширения, требуемые ConnectorClass (без
default). - Connector не может указывать имена расширений, которые не объявлены в ConnectorClass.
- Имена расширений должны быть уникальными в Connector.
- Значения расширений не должны дублировать
spec.address.
Поведение во время выполнения:
Connectors APIможет выбирать backend-адрес по имени расширения или по прямому URL черезx-openapi-address.Connectors Proxyможет рассматриватьspec.addressиspec.addressExtensions[*].valueкак адреса назначения для внедрения учетных данных.
Пример
Параметры коннектора
Параметры коннектора позволяют передавать в экземпляр Connector дополнительную информацию о конфигурации. Эти параметры сначала определяются в спецификации ConnectorClass, а затем настраиваются при создании отдельных ресурсов Connector.
Значения параметров можно задавать в Connector с помощью поля spec.params.
spec.params[].name: Имя параметра, которое должно совпадать с именем параметра, определенным в соответствующемConnectorClass.spec.params[].value: Значение параметра. Тип значения должен соответствовать типу параметра, определенному вConnectorClass. В настоящее время поддерживается только типstring.
Если для параметра в ConnectorClass задано значение по умолчанию, вы можете не указывать этот параметр при создании Connector, и будет использовано значение по умолчанию.
Подробнее о задании параметров в ConnectorClass см. Параметры ConnectorClass.
Пример
Следующий пример демонстрирует Connector, настроенный с параметром sslVerify:
Информация об аутентификации
Информация аутентификации задает учетные данные для доступа к инструменту. В зависимости от типа инструмента можно настроить разные методы аутентификации. Этот метод аутентификации определяется в ConnectorClass. Подробнее см. описание информации аутентификации в ConnectorClass.
Настройка информации об аутентификации
Информация аутентификации настраивается следующим образом:
- Укажите имя типа аутентификации, используемого согласно определению ConnectorClass.
- Создайте Secret, содержащий учетные данные.
- Ссылайтесь на Secret в Connector через
spec.auth.secretRef. - Укажите информацию о параметрах, требуемых при проверке аутентификации.
Например, чтобы настроить базовую аутентификацию:
Необязательная аутентификация
Некоторые инструменты поддерживают доступ без аутентификации. В этом случае spec.auth.secretRef можно опустить.
Например, доступ к публичному Git-репозиторию:
Проверка аутентификации
Connector поддерживает проверку корректности информации аутентификации. Конфигурация проверки задается через spec.auth.params, который включает параметры, необходимые для проверки аутентификации.
Например, чтобы проверить права доступа к Git-репозиторию:
Обратите внимание, что если ConnectorClass задает параметры обнаружения аутентификации, параметры в connector должны быть указаны обязательно. Даже если Connector создается без указания сведений Secret, spec.auth.params должен быть передан.
Пользовательские CA-сертификаты
Когда TLS-сертификат инструмента подписан внутренним или закрытым центром сертификации (CA), платформу Connector можно настроить на доверие этим CA без отключения проверки сертификата.
Поддержка пользовательских CA-сертификатов доступна только при включенном feature flag enable-custom-ca-certs, который по умолчанию отключен для сохранения обратной совместимости с существующими развертываниями.
Когда флаг включен, платформа формирует пул CA, состоящий из трех дополняющих слоев:
- Системный пул CA по умолчанию — хранилище доверенных сертификатов на уровне ОС, встроенное в образ контейнера.
- Глобальные пользовательские CA-сертификаты — Secret в namespace
connectors-systemс меткойconnectors.cpaas.io/ca-cert: "true". Несколько Secret агрегируются. - CA-сертификаты для конкретного Connector — необязательный Secret, на который ссылается
spec.caCertSecretRef.nameвConnector. Secret ДОЛЖЕН находиться в том же namespace, что иConnector.
Сформированный пул CA используется для:
- проверок liveness и аутентификации, выполняемых контроллером по отношению к инструменту
- proxy-доступа к инструменту из proxy-компонентов
- проверок доступности ConnectorClass со стороны контроллера
- proxy-расширений (OCI, Harbor, Git HTTPS и т. д.), где это применимо
Ссылка на CA-сертификат для конкретного Connector
Чтобы доверять определенному CA только для одного Connector, задайте spec.caCertSecretRef.name:
Указанный Secret ДОЛЖЕН содержать как минимум один CA-сертификат в PEM-формате. В пул загружаются только ключи, оканчивающиеся на .crt или .pem, либо значения, содержащие PEM-заголовок, — остальные ключи (например, токены или пароли, случайно помещенные в тот же Secret), игнорируются.
Глобальные CA-сертификаты
Администраторы кластера могут настроить CA-сертификаты, которые применяются ко всем коннекторам, создав Secret в namespace connectors-system с меткой connectors.cpaas.io/ca-cert: "true". Платформа автоматически обнаруживает все подходящие Secret и агрегирует их сертификаты в глобальный пул CA.
Добавление или удаление помеченных Secret приводит к автоматическому повторному согласованию затронутых Connector — после включения feature flag перезапуск компонентов для изменения глобальных CA не требуется.
Пошаговые инструкции см. в Как настроить пользовательские CA-сертификаты.
Адрес proxy
Если Connector указывает на ConnectorClass, в котором настроена поддержка proxy, система выделит адрес proxy для каждого Connector.
Клиенты могут использовать этот адрес proxy для доступа к инструменту без секретов.
Формат адреса proxy по умолчанию — http://c-{connector-name}.{namespace}.svc.cluster.local, его можно получить из status.proxy.
Например, следующий пример описывает Connector с адресом proxy:
Когда в ConnectorClass настроен тип resolver proxy path, формат адреса proxy — http://c-{connector-name}.{namespace}.svc.cluster.local/namespaces/{namespace}/connectors/{connector-name}, где {path} — путь Connector.
Например, следующий пример описывает Connector с адресом proxy:
Информация о статусе
Информация о статусе Connector записывается в поле status и содержит адрес proxy, адрес API и состояния:
status.conditions: Состояния Connector.status.proxy: Адрес proxy Connector.status.api: Адрес API Connector.
Адрес proxy
Поле proxy содержит адрес proxy Connector.
status.proxy.httpAddress.url: HTTP-адрес proxy для текущего Connector.
Вы можете использовать этот адрес с существующими клиентами инструмента, чтобы получать доступ к инструменту внутри кластера без секретов. Подробнее см. Прокси Connector.
Если ConnectorClass не имеет возможности proxy, поле status.proxy будет пустым.
Адрес API
Поле api содержит адрес API Connector.
status.api.path: Относительный путь API для текущего Connector (относительно точки входа доступа через кластерный ingress).
Вы можете использовать этот путь вне кластера для доступа к исходному API инструмента через текущий Connector. Подробнее см. API Connector.
Состояния
Тип conditions включает:
ConnectorClassReady: Указывает, корректен ли тип connector.SecretReady: Указывает, корректно ли настроена информация аутентификации.LivenessReady: Указывает, доступен ли инструмент.AuthReady: Указывает, действительна ли информация аутентификации.ProxyServiceReady: Указывает, успешно ли выделен адрес proxy для текущего Connector.CACertReady: Информационное — указывает состояние конфигурации пользовательских CA-сертификатов. Это состояние не влияет на верхнеуровневое состояниеReady.Ready: Указывает общее состояние.
Состояние SecretReady
Указывает информацию о состоянии Secret для Connector.
Состояние AuthReady
Указывает информацию о состоянии аутентификации для Connector.
Состояние LivenessReady
Указывает информацию о состоянии liveness для Connector.
Состояние ProxyServiceReady
Указывает информацию о состоянии службы proxy для Connector.
Состояние CACertReady
Информационное — указывает состояние конфигурации пользовательских CA-сертификатов. Это состояние не входит в стандартный набор состояний готовности, имеет severity: Info и не влияет на верхнеуровневое состояние Ready. Оно присутствует только тогда, когда включен feature flag enable-custom-ca-certs.
Когда состояние равно False, контроллер также создает в объекте Connector событие Kubernetes Warning Event с причиной CACertSecretNotFound или InvalidCACert, которое можно увидеть с помощью kubectl describe connector <name>.
Когда feature flag отключен, состояние CACertReady вообще отсутствует.
Например: