• Русский
  • Harbor Connector

    Harbor Connector — это платформонезависимый коннектор, который можно использовать для подключения к любому реестру Harbor.

    Вы можете использовать Harbor Connector для безопасного выполнения операций с контейнерными образами в CICD-пайплайнах или использовать его в Kubernetes-ворклоадах для выполнения операций с образами без использования учетных данных.

    Кроме того, вы можете централизовать управление конфигурациями доступа к Harbor по пространствам имен, избегая необходимости повторять учетные данные Harbor в каждом пространстве имен.

    Overview

    В этом документе рассматриваются:

    • Требования к интеграции: предпосылки для целевых реестров Harbor
    • Создание Harbor Connector
    • Расширенные возможности: прокси-функционал и возможности конфигурации Harbor Connector

    Integration Requirements

    Требования к реестрам Harbor

    • Поддерживаются версии Harbor 2.x

    Creating a simple Harbor connector

    Как создать базовый Harbor Connector:

    # Harbor Connector
    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: harbor-connector
    spec:
      connectorClassName: harbor
      address: https://harbor.example.com

    Fields Reference

    spec.connectorClassName:

    harbor (константа), указывает имя ConnectorClass для интеграции с Harbor.

    spec.address:

    Адрес целевого реестра Harbor, например: https://harbor.example.com.

    spec.auth (необязательно):

    устанавливает метод аутентификации реестра Harbor

    • spec.auth.name: должен быть basicAuth для Harbor Connector.

    • spec.auth.secretRef: указывает секрет, содержащий информацию для аутентификации в реестре Harbor, секрет должен быть создан в том же пространстве имен, что и коннектор. Если ваш реестр Harbor не требует аутентификации, это поле можно опустить. Тип секрета должен быть kubernetes.io/basic-auth.

    Необязательные поля метаданных:

    • cpaas.io/description: описание для Harbor Connector, например:

      apiVersion: connectors.alauda.io/v1alpha1
      kind: Connector
      metadata:
        name: harbor-connector
        annotations:
          cpaas.io/description: "Connect to team development Harbor registry"

    Connector Capabilities

    Authentication Methods

    Harbor Connector поддерживает следующие методы аутентификации:

    • Basic Authentication: аутентификация по имени пользователя и паролю, тип секрета должен быть kubernetes.io/basic-auth.

    Если ваш реестр Harbor не требует аутентификации, это поле можно опустить.

    Token Permissions Required

    Требуемые разрешения для настроенных учетных данных зависят от того, как вы планируете их использовать в Pods/Pipelines.

    Например:

    • Операции pull и push образов: если необходимо выполнять загрузку и выгрузку образов через этот коннектор, учетные данные должны иметь права на чтение и запись для целевого реестра Harbor.
    • API-операции: настройте разрешения в зависимости от требуемых операций. При настройке учетных данных убедитесь, что аккаунт имеет доступ к информации о пользователе (/users/current).

    Для обеспечения безопасности рекомендуется создавать учетные данные с минимально необходимыми правами. При необходимости дополнительных привилегий создавайте отдельные Connectors с более привилегированными секретами и используйте изоляцию по пространствам имен для контроля доступа пользователей к каждому Connector.

    Proxy and Configuration Capabilities

    Harbor Connector предоставляет возможности прокси для обеспечения безопасного доступа к реестрам Harbor.

    Чтобы клиенты могли обращаться к реестрам Harbor без прямого управления учетными данными, Harbor ConnectorClass предоставляет прокси-сервер, который автоматически внедряет информацию для аутентификации.

    Клиенты с доступом к коннектору могут использовать этот прокси-сервер для доступа к реестрам Harbor без необходимости настраивать учетные данные на стороне клиента.

    Proxy Address

    При создании Harbor Connector система автоматически создаст Service для проксирования доступа к реестру Harbor.

    Система запишет адрес прокси в поле status.proxy.httpAddress.

    Например:

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: harbor-connector
    spec:
      # . . .
    status:
      conditions:
      # . . .
      proxy:
        httpAddress:
          url: http://c-harbor-connector.default.svc.cluster.local

    Forward Proxy

    Вы можете монтировать информацию о прокси в Pods с помощью CSI, а затем использовать эту информацию через переменные окружения или конфигурационные файлы.

    volumes:
    - name: proxyconfig
      csi:
        readOnly: true
        driver: connectors-csi
        volumeAttributes:
          connector.name: "harbor"

    Затем перед выполнением операций с контейнерами используйте информацию о прокси через переменные окружения или конфигурационные файлы.

    export http_proxy=$(cat /{mount-path}/http.proxy)
    export https_proxy=$(cat /{mount-path}/https.proxy)
    export HTTP_PROXY=$http_proxy
    export HTTPS_PROXY=$https_proxy
    export no_proxy=localhost,127.0.0.1
    export NO_PROXY=$no_proxy
    echo "Using proxy: http_proxy=$http_proxy, https_proxy=$https_proxy, no_proxy=$no_proxy"

    Reverse 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 и настроить адрес прокси в insecure-registries. Предоставляются стандартные конфигурационные файлы buildkitd.toml и config.json.

    OCI Connector, созданный на основе типа OCI Connector, предоставляет следующие конфигурации:

    registry-config: конфигурационная информация, необходимая для OCI CLI, таких как buildkit, buildah и др.

    • Предоставляет конфигурационный файл config.json.
    • Содержит информацию для аутентификации, необходимую для доступа к прокси.

    Например:

    // config.json
    
    {
      "auths": {
          "<proxy address of the connector>": {
              "auth": "<authentication information required to access the connector proxy>"
          }
      }
    }

    buildkitd: конфигурационная информация, необходимая для демона BuildKit.

    • Предоставляет конфигурационный файл buildkitd.toml.
    • В конфигурационном файле текущий коннектор по умолчанию будет указан в insecure-registries.

    Например:

    insecure-entitlements = [ "network.host", "security.insecure" ]
    [registry."<proxy address of the connector>"]
      http = true

    Further Reading