• Русский
  • JFrog Connector

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

    Вы можете использовать JFrog Connector для безопасного доступа к приватным Maven, NPM и PyPI репозиториям, размещённым в JFrog Artifactory, в CICD пайплайнах, либо использовать его в Kubernetes workload для выполнения операций с пакетами без учётных данных.

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

    Overview

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

    • Требования к интеграции: предпосылки для целевых экземпляров JFrog Artifactory
    • Создание JFrog коннектора
    • Расширенные возможности: прокси и конфигурационные файлы для Maven, NPM и PyPI

    Integration Requirements

    JFrog Artifactory предпосылки

    • Экземпляр JFrog Artifactory, доступный из кластера Kubernetes
    • Учётные данные пользователя с соответствующими правами на репозитории

    Creating a simple JFrog connector

    Пример создания базового JFrog Connector:

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

    Fields Reference

    spec.connectorClassName:

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

    spec.address:

    Базовый URL JFrog Artifactory, например: https://jfrog.example.com.

    spec.auth(optional):

    Определяет метод аутентификации для экземпляра JFrog Artifactory.

    • spec.auth.name: должен быть basicAuth для JFrog коннектора.

    • spec.auth.secretRef: указывает секрет, содержащий данные аутентификации JFrog Artifactory. Секрет должен быть создан в том же namespace, что и коннектор.

    Опциональные поля Metadata:

    • cpaas.io/description: описание JFrog коннектора, например:

      apiVersion: connectors.alauda.io/v1alpha1
      kind: Connector
      metadata:
        name: jfrog-connector
        annotations:
          cpaas.io/description: "Connect to team JFrog Artifactory instance"

    Capabilities of JFrog Connector

    Authentication

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

    • basicAuth: аутентификация по имени пользователя и паролю, соответствующий тип секрета: kubernetes.io/basic-auth

    Пример:

    apiVersion: v1
    stringData:
      username: your-jfrog-username
      password: your-jfrog-password
    kind: Secret
    metadata:
      name: jfrog-secret
    type: kubernetes.io/basic-auth

    Для подробной информации о статусе смотрите Connector Status Documentation.

    Credential Permissions Required

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

    Например:

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

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

    JFrog Connector Proxy and Configuration Files

    Для предоставления клиентам возможности доступа к JFrog Artifactory без учётных данных, JFrog коннектор предоставляет прокси-сервер, который автоматически внедряет информацию об аутентификации.

    При создании коннектора система автоматически разворачивает прокси-сервис для целевого экземпляра JFrog Artifactory.

    Адрес прокси записывается в status.proxy.httpAddress:

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

    JFrog ConnectorClass предоставляет следующие конфигурационные файлы, которые можно монтировать через Connectors CSI Driver:

    Название конфигурацииСгенерированный файлСценарий использования
    settingssettings.xmlMaven операции через прокси
    npmrc.npmrcОперации с NPM пакетами
    yarnrc.yarnrc.ymlОперации с Yarn пакетами
    pipconfpip.confЗагрузка PyPI пакетов
    pypirc.pypircПубликация PyPI пакетов

    Maven Configuration: settings.xml

    JFrog коннектор предоставляет конфигурационный файл settings.xml для Maven, который направляет загрузку артефактов через прокси коннектора к Maven репозиторию JFrog Artifactory.

    Параметры конфигурации:

    • mirrorRepository (опционально): ключ репозитория JFrog Artifactory, используемый в качестве Maven mirror. Если не указан, в сгенерированном settings.xml не будет секции <mirrors>.

    Пример определения CSI volume:

    volumes:
    - name: maven-settings
      csi:
        readOnly: true
        driver: connectors-csi
        volumeAttributes:
          connector.name: "jfrog-connector"
          configuration.names: "settings"
          configuration.params: '{"settings":{"mirrorRepository":"libs-release"}}'

    Пример сгенерированного settings.xml:

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" ...>
      <proxies>
        <proxy>
          <id>connectors-proxy</id>
          <active>true</active>
          <protocol>http</protocol>
          <host>connectors-proxy-service.connectors-system.svc.cluster.local</host>
          <port>80</port>
          <username>NAMESPACE/CONNECTOR_NAME</username>
          <password>TOKEN</password>
          <nonProxyHosts>localhost</nonProxyHosts>
        </proxy>
      </proxies>
      <mirrors>
        <mirror>
          <id>jfrog-connector-mirror</id>
          <url>https://jfrog.example.com/artifactory/libs-release</url>
          <mirrorOf>*</mirrorOf>
        </mirror>
      </mirrors>
    </settings>

    NPM Configuration: .npmrc and .yarnrc.yml

    JFrog коннектор предоставляет конфигурационные файлы .npmrc и .yarnrc.yml для NPM/Yarn, которые направляют запросы через прокси коннектора к NPM репозиторию JFrog Artifactory.

    Параметры конфигурации:

    • repository: ключ NPM репозитория JFrog Artifactory, используется для формирования URL реестра NPM/Yarn
    • strictSSL (опционально): если задан, коннектор записывает это значение в .npmrc (strict-ssl) и .yarnrc.yml (enableStrictSsl)

    Пример определения CSI volume:

    volumes:
    - name: npmrc
      csi:
        readOnly: true
        driver: connectors-csi
        volumeAttributes:
          connector.name: "jfrog-connector"
          configuration.names: "npmrc"
          configuration.params: '{"npmrc":{"repository":"npm-local"}}'
    - name: yarnrc
      csi:
        readOnly: true
        driver: connectors-csi
        volumeAttributes:
          connector.name: "jfrog-connector"
          configuration.names: "yarnrc"
          configuration.params: '{"yarnrc":{"repository":"npm-local"}}'

    PyPI Configuration: pip.conf and .pypirc

    JFrog коннектор предоставляет конфигурационные файлы pip.conf и .pypirc для PyPI инструментов, которые направляют запросы через прокси коннектора к PyPI репозиторию JFrog Artifactory.

    Параметры конфигурации:

    • repository: ключ PyPI репозитория JFrog Artifactory (для pip.conf)
    • deployRepository: ключ PyPI репозитория JFrog Artifactory для публикации (для .pypirc)

    Пример определения CSI volume:

    volumes:
    - name: pipconf
      csi:
        readOnly: true
        driver: connectors-csi
        volumeAttributes:
          connector.name: "jfrog-connector"
          configuration.names: "pipconf"
          configuration.params: '{"pipconf":{"repository":"pypi-local"}}'
    - name: pypirc
      csi:
        readOnly: true
        driver: connectors-csi
        volumeAttributes:
          connector.name: "jfrog-connector"
          configuration.names: "pypirc"
          configuration.params: '{"pypirc":{"deployRepository":"pypi-local"}}'

    Using Connectors CSI Driver to Mount Configuration Files

    Описание параметров CSI volume:

    • csi.readOnly: фиксированное значение true
    • csi.driver: драйвер Connector CSI, фиксированное значение connectors-csi
    • csi.volumeAttributes: атрибуты CSI volume
      • connector.name: имя JFrog Connector
      • connector.namespace: namespace JFrog Connector; если не указан, используется namespace Pod
      • configuration.names: имя конфигурации. Поддерживаемые значения: settings (Maven), npmrc, yarnrc, pipconf, pypirc
      • configuration.params: JSON-строка с параметрами времени выполнения для каждой именованной конфигурации

    configuration.params for JFrog

    Общий формат, процесс валидации и поведение слияния configuration.params описаны в configuration.params в документации Connectors CSI Driver.

    В текущем манифесте JFrog ConnectorClass схема/значения по умолчанию для configurations[].params явно не объявлены. Шаблоны конфигураций читают следующие ключи из configuration.params:

    КонфигурацияПараметрПоведение шаблона
    settingsmirrorRepositoryЕсли задан, генерирует Maven mirror URL <address>/artifactory/{mirrorRepository} в settings.xml
    npmrcrepositoryГенерирует URL реестра/аутентификации NPM <address>/artifactory/api/npm/{repository} в .npmrc
    npmrcstrictSSLЕсли задан, записывает strict-ssl в .npmrc
    yarnrcrepositoryГенерирует URL реестра Yarn <address>/artifactory/api/npm/{repository} в .yarnrc.yml
    yarnrcstrictSSLЕсли задан, записывает enableStrictSsl в .yarnrc.yml
    pipconfrepositoryГенерирует URL индекса PyPI <address>/artifactory/api/pypi/{repository}/simple/ в pip.conf
    pypircdeployRepositoryГенерирует URL публикации PyPI http://<proxy-host>/artifactory/api/pypi/{deployRepository}/ в .pypirc

    Further Reading

    References