OCI Connector
OCI Connector — это независимый от платформы коннектор, который позволяет подключаться к любому OCI Registry, например Docker Hub, Harbor и т. д. Вы можете использовать OCI Connector для безопасного доступа к приватным OCI repositories в CI/CD pipelines или для выполнения OCI-операций в контейнеризованных workload без предоставления учетных данных. Кроме того, вы можете централизованно управлять конфигурациями доступа к OCI, избегая необходимости дублировать конфигурации учетных данных OCI в каждом namespace.
В этом документе рассматриваются:
- Требования к доступу для OCI Registry
- Как создать OCI Connector на основе типа OCI Connector
- Возможности proxy и конфигурации OCI Connector
Содержание
Требования к OCI RegistryСоздание OCI Connector на основе типа OCI Connectorspec.connectorClassNamedescriptionAddressAuthenticationИспользование аутентификации на основе TokenТребуемые разрешения токенаProxy и конфигурацияProxyАдрес ProxyForward ProxyReverse ProxyДополнительноТребования к OCI Registry
OCI Registry, к которому требуется доступ, должен соответствовать следующим условиям:
-
Требования к реализации интерфейсов:
- Должен реализовывать как минимум интерфейсы, определенные в спецификации v1.0 opencontainers/distribution-spec
- Должен успешно проходить тесты на соответствие distribution-spec
-
Требования к способу аутентификации:
- Должен поддерживать аутентификацию на основе Token и соответствовать CNCF Distribution Token Authentication Specification
Создание OCI Connector на основе типа OCI Connector
Вот как создать базовый OCI Connector:
spec.connectorClassName
Используйте константное значение oci.
description
Вы можете добавить описательную информацию к OCI Connector через поле annotations.
cpaas.io/description: описание OCI Connector.
Например:
Address
spec.address указывает адрес доступа к OCI Registry, например: https://index.docker.io.
Authentication
OCI Connector поддерживает следующие типы аутентификации:
tokenAuth: аутентификация на основе Token (необязательно)- Соответствующий тип учетных данных:
cpaas.io/distribution-registry-token. Этот тип учетных данных используется для процесса аутентификации, определенного в CNCF Distribution Token Authentication Specification, и учетные данные должны предоставлять информациюusernameиpassword.
- Соответствующий тип учетных данных:
Использование аутентификации на основе Token
Например:
Если целевой OCI Registry не требует аутентификации, вы можете опустить информацию об аутентификации. Пример конфигурации приведен ниже:
Требуемые разрешения токена
Требуемые разрешения для настроенного токена зависят от того, как вы планируете использовать его в ваших Pods/Pipelines.
Например:
- Операции pull образов: если вам нужно только выполнять pull образов с помощью этого коннектора, токену требуются только права на чтение целевых repositories.
- Операции pull и push образов: если вам нужно выполнять push образов с помощью этого коннектора, токен должен иметь как права на чтение, так и права на запись в целевых repositories. Иными словами, токен должен позволять выполнять как pull из registry, так и push в него.
В качестве рекомендации по безопасности мы советуем создавать токен с минимально необходимыми правами. Когда требуются дополнительные привилегии, создавайте отдельные Connectors с более привилегированным secret и используйте изоляцию namespace, чтобы контролировать, какие пользователи могут получать доступ к каждому Connector.
Proxy и конфигурация
Чтобы предоставить клиентам возможность получать доступ к OCI repositories без учетных данных, тип OCI Connector предлагает proxy server, который автоматически подставляет информацию аутентификации.
Клиенты, имеющие доступ к коннектору, могут использовать этот proxy server для доступа к OCI repositories без настройки учетных данных на стороне клиента.
Чтобы упростить использование, тип OCI Connector предоставляет информацию о конфигурации, которую можно монтировать в Pods через CSI. В Pod при выполнении OCI-операций proxy service может использоваться автоматически для выполнения OCI-операций.
Proxy
Адрес Proxy
При создании Connector система:
- Автоматически создаст Service для proxy.
- Запишет адрес proxy в поле
status.proxy.httpAddress.
Вы можете использовать этот адрес proxy для операций push и pull образов.
Например:
Forward Proxy
Вы можете монтировать информацию о proxy в Pods с помощью CSI, а затем использовать ее через переменные среды или конфигурационные файлы.
Затем, перед выполнением операций контейнера, используйте информацию о proxy через переменные среды или конфигурационные файлы.
Reverse Proxy
При использовании reverse proxy вам нужно изменить адрес целевого образа на адрес proxy.
Пример: index.docker.io/test/abc:v1 → c-dockerhub-demo.default.svc.cluster.local/namespaces/oci-connector-demo/connectors/oci-connector/test/abc:v1
и смонтировать файлы конфигурации учетных данных в Pod, а также настроить адрес proxy в insecure-registries.
OCI Connector, созданный на основе типа OCI Connector, предоставляет следующие конфигурации:
docker-config: конфигурационные учетные данные, необходимые для OCI CLI, например buildkit, buildah.
- Предоставляет файл конфигурации
config.json. - Содержит информацию аутентификации, необходимую для доступа к proxy.
Например:
buildkitd: информация конфигурации, необходимая для BuildKit Daemon.
- Предоставляет файл конфигурации
buildkitd.toml. - В файле конфигурации текущий connector по умолчанию будет установлен в
insecure-registries.
Например:
Вы можете монтировать эту информацию о конфигурации в Pods с помощью connectors-csi и, в сочетании с возможностями proxy, выполнять операции push или pull образов без секретов.