Коннектор Harbor
Коннектор Harbor — это независимый от платформы коннектор, который можно использовать для подключения к любому Harbor registry.
Вы можете использовать Harbor Connector для безопасного выполнения операций с образами контейнеров в пайплайнах CICD или использовать его в рабочих нагрузках Kubernetes для выполнения операций с образами без учетных данных.
Кроме того, вы можете централизовать управление конфигурациями доступа Harbor в разных namespace, избавившись от необходимости повторять учетные данные Harbor в каждом namespace.
Содержание
ОбзорТребования к интеграцииСоздание простого коннектора HarborСправка по полямВозможности коннектораМетоды аутентификацииТребуемые права токенаВозможности прокси и конфигурацииАдрес проксиПрямой проксиКонфигурация Harbor CLIОбратный проксиДополнительные материалыОбзор
В этом документе рассматриваются:
- Требования к интеграции: предварительные требования к целевым Harbor registry
- Создание Harbor connector
- Расширенные возможности: возможности прокси и конфигурации коннектора Harbor
Требования к интеграции
Предварительные требования к Harbor Registries
- Поддерживаются версии Harbor 2.x
Создание простого коннектора Harbor
Вот как создать базовый Harbor Connector:
Справка по полям
spec.connectorClassName:
harbor (constant), указывает имя ConnectorClass для интеграции с Harbor.
spec.address:
Адрес целевого Harbor registry, например: https://harbor.example.com.
spec.auth(optional):
указывает метод аутентификации Harbor registry
-
spec.auth.name: должно бытьbasicAuthдля Harbor connector. -
spec.auth.secretRef: указывает secret, содержащий информацию аутентификации Harbor registry; secret должен быть создан в том же namespace, что и коннектор. Если вашему Harbor registry не требуется аутентификация, это поле можно опустить. Тип secret должен бытьkubernetes.io/basic-auth.
Необязательные поля метаданных:
-
cpaas.io/description: информация-описание для Harbor connector, например:
Возможности коннектора
Методы аутентификации
Коннектор Harbor поддерживает следующие методы аутентификации:
- Basic Authentication: аутентификация по имени пользователя и паролю, тип secret должен быть
kubernetes.io/basic-auth.
если ваш Harbor registry не требует аутентификации, это поле можно опустить.
Требуемые права токена
Требуемые права для настроенных учетных данных зависят от того, как вы планируете использовать их в своих Pods/Pipelines.
Например:
- Операции pull и push образов: если вам нужно выполнять pull и push образов с помощью этого коннектора, учетные данные должны иметь права на чтение и запись в целевом Harbor registry.
- Операции API: настраивайте права в зависимости от операций, которые необходимо выполнять. При настройке учетных данных убедитесь, что у учетной записи есть право доступа к информации о пользователе (/users/current).
В соответствии с лучшими практиками безопасности мы рекомендуем создавать учетные данные с минимально необходимыми правами. Если требуются дополнительные привилегии, создавайте отдельные коннекторы с более привилегированным secret и используйте изоляцию namespace, чтобы управлять тем, какие пользователи могут получить доступ к каждому коннектору.
Возможности прокси и конфигурации
Коннектор Harbor предоставляет возможности прокси, обеспечивающие безопасный доступ к Harbor registries.
Чтобы клиенты могли получать доступ к Harbor registries без прямой обработки учетных данных, Harbor ConnectorClass предоставляет proxy-сервер, который автоматически подставляет информацию аутентификации.
Клиенты, имеющие доступ к коннектору, могут использовать этот proxy-сервер для доступа к Harbor registries без необходимости настраивать учетные данные на стороне клиента.
Адрес прокси
При создании коннектора Harbor система автоматически создаст Service для проксирования доступа к Harbor registry.
Система запишет адрес прокси в поле status.proxy.httpAddress.
Например:
Прямой прокси
Вы можете смонтировать информацию о proxy в Pods с помощью CSI, а затем использовать ее через переменные окружения или конфигурационные файлы.
Затем, перед выполнением операций с контейнерами, используйте информацию о proxy через переменные окружения или конфигурационные файлы.
Конфигурация Harbor CLI
Используйте harbor-cli-config, когда вам нужно, чтобы workload выполняла команды harbor-cli через коннектор Harbor, не помещая исходные имя пользователя или пароль Harbor в Pod.
После подключения harbor-cli-config ваша workload получает готовую к использованию настройку Harbor CLI:
config.yamlдля Harbor CLI.envдля переменных окружения proxy коннектораHARBOR_ENCRYPTION_KEY, который требуется Harbor CLI при чтении сгенерированной конфигурации
Для одного коннектора Harbor подключите его так:
Для нескольких коннекторов Harbor запросите их одним подключением. Сгенерированный config.yaml включает по одному контексту Harbor CLI для каждого выбранного коннектора, поэтому вы можете переключаться между ними с помощью harbor context switch.
Функция нескольких коннекторов зависит от флага enable-multi-connector. Подробности о флаге см. в Feature Flags.
Перед запуском harbor-cli загрузите окружение proxy, добавьте CA proxy в доверенные и экспортируйте смонтированный ключ шифрования:
HARBOR_ENCRYPTION_KEY используется только для того, чтобы Harbor CLI мог читать сгенерированную конфигурацию. Это не исходный secret Harbor, и сгенерированное значение пароля в config.yaml не используется как реальный учетный данные для доступа к Harbor. Реальный доступ по-прежнему проходит через proxy коннектора.
Обратный прокси
При использовании обратного прокси необходимо изменить адрес целевого образа на адрес прокси.
Пример: harbor.example.com/test/abc:v1 → c-harbor-connector.default.svc.cluster.local/namespaces/harbor-connector-demo/connectors/harbor-connector/test/abc:v1
Кроме того, необходимо смонтировать конфигурационные файлы в Pod и настроить адрес proxy в insecure-registries. По умолчанию предоставляются конфигурационные файлы buildkitd.toml и config.json.
OCI Connector, созданный на основе типа OCI Connector, предоставляет следующие конфигурации:
registry-config: конфигурационная информация, требуемая для OCI CLI, например buildkit, buildah и т. д.
- Предоставляет файл конфигурации
config.json. - Содержит информацию аутентификации, необходимую для доступа к proxy.
Например:
buildkitd: конфигурационная информация, требуемая для BuildKit Daemon.
- Предоставляет файл конфигурации
buildkitd.toml. - В файле конфигурации текущий коннектор по умолчанию будет установлен как
insecure-registries.
Например: