• Русский
  • Harbor Connector

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

    Вы можете использовать Harbor Connector для безопасного выполнения операций с container image в CICD pipelines или применять его в kubernetes workloads для выполнения операций с image без учетных данных.

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

    Обзор

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

    • Требования к интеграции: предварительные условия для целевых Harbor registries
    • Создание Harbor connector
    • Дополнительные возможности: proxy-возможности и возможности конфигурации Harbor connector

    Требования к интеграции

    Предварительные требования для Harbor registries

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

    Создание простого 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

    Справочник по полям

    spec.connectorClassName:

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

    spec.address:

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

    spec.auth(optional):

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

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

    • spec.auth.secretRef: указывает secret, содержащий информацию аутентификации Harbor registry; secret должен быть создан в том же namespace, что и connector. Если ваш Harbor registry не требует аутентификации, это поле можно опустить. Тип secret должен быть 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"

    Возможности коннектора

    Методы аутентификации

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

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

    if your Harbor registry does not require authentication, you can omit this field.

    Required permissions for token

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

    Например:

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

    В целях соблюдения рекомендаций по безопасности мы советуем создавать учетные данные с минимально необходимыми permissions. Если требуются дополнительные привилегии, создавайте отдельные Connectors с более привилегированным secret и используйте изоляцию namespace, чтобы контролировать, какие пользователи могут получить доступ к каждому Connector.

    Proxy и возможности конфигурации

    Harbor Connector предоставляет proxy-возможности, обеспечивающие безопасный доступ к Harbor registries.

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

    Клиенты, имеющие доступ к connector, могут использовать этот proxy server для доступа к Harbor registries без необходимости настраивать учетные данные на стороне клиента.

    Proxy Address

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

    Система запишет proxy address в поле 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

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

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

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

    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

    При использовании reverse proxy необходимо изменить адрес целевого image на адрес 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 address в insecure-registries. По умолчанию предоставляются файлы конфигурации buildkitd.toml и config.json.

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

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

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

    Например:

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

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

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

    Например:

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

    Дополнительные материалы