• Русский
  • Nexus Connector

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

    С помощью Nexus Connector вы можете безопасно выполнять операции Maven, NPM и PyPI в CICD-пайплайнах или Kubernetes-ворклоадах без использования учетных данных.

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

    Overview

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

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

    Integration Requirements

    Требования к репозиторию Nexus

    • Сервер Nexus должен быть доступен из кластера.
    • Поддерживаемые типы репозиториев: Maven (hosted/proxy/group), NPM (hosted/proxy/group), PyPI (hosted/proxy/group).

    Требования к клиенту

    Для Maven-клиентов необходимо доверять сертификату прокси-сервера коннектора перед выполнением операций mvn:

    keytool -importcert -noprompt \
      -trustcacerts \
      -keystore $JAVA_HOME/lib/security/cacerts \
      -storepass changeit \
      -alias corp-ca \
      -file /opt/maven/ca.cert

    Клиент mvn также должен использовать транспорт wagon:

    MAVEN_OPTS=-Dmaven.resolver.transport=wagon

    Creating a Nexus Connector

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

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

    Fields Reference

    spec.connectorClassName:

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

    spec.address:

    Адрес целевого сервера Nexus, например: https://nexus.example.com. Это корневой адрес сервера Nexus, а не URL конкретного репозитория.

    spec.auth:

    Указывает метод аутентификации для сервера Nexus.

    • spec.auth.name: должен быть basicAuth для Nexus Connector.
    • spec.auth.secretRef: указывает Secret с информацией для аутентификации. Секрет должен быть создан в том же неймспейсе, что и коннектор. Если сервер Nexus не требует аутентификации, это поле можно опустить.

    Опциональные поля метаданных:

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

      apiVersion: connectors.alauda.io/v1alpha1
      kind: Connector
      metadata:
        name: nexus-connector
        annotations:
          cpaas.io/description: "Подключение к командному серверу Nexus"

    Capabilities of Nexus Connector

    Authentication

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

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

    Использование базовой аутентификации

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

    Если секрет указан неверно, в поле status.conditions коннектора будет отображено сообщение об ошибке.

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

    Требуемые разрешения для учетных данных

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

    • Только скачивание: учетные данные требуют только права на чтение целевого репозитория.
    • Загрузка/Деплой: учетные данные должны иметь права на чтение и запись целевого репозитория.

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

    Proxy и конфигурационные файлы

    Чтобы предоставить клиентам возможность доступа к репозиториям Nexus без учетных данных, Nexus Connector предоставляет прокси-сервер, который автоматически внедряет информацию для аутентификации.

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

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

    Адрес прокси

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

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

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

    Maven: конфигурация settings.xml

    Конфигурация settings предоставляет файл settings.xml и файл ca.cert, монтируемые через Connectors CSI Driver.

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

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
    
      <proxies>
        <proxy>
          <id>connectors-proxy</id>
          <active>true</active>
          <protocol>http</protocol>
          <host>c-nexus-connector.connectors-nexus-demo.svc.cluster.local</host>
          <port>80</port>
          <username>connectors-nexus-demo/nexus-connector</username>
          <password>eyJhbGciOiJEnEZaTQ</password>
          <nonProxyHosts>localhost</nonProxyHosts>
        </proxy>
      </proxies>
    </settings>

    Опциональный параметр: mirrorRepository — репозиторий Nexus, используемый как зеркало Maven. При указании в сгенерированном settings.xml будет добавлен раздел <mirrors>, указывающий на {address}/repository/{mirrorRepository}.

    Для монтирования конфигурации settings:

    spec:
      volumes:
      - name: settings
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "nexus-connector"
            configuration.names: "settings"
            configuration.params: '{"settings": {"mirrorRepository": "maven-public"}}' # опционально

    NPM: конфигурация .npmrc

    Конфигурация npmrc предоставляет файл .npmrc для операций с пакетами NPM.

    Обязательный параметр: registry — имя прокси-репозитория Nexus для NPM (например, npm-proxy).

    Опциональный параметр: strictSSL — требовать ли SSL (по умолчанию: "true").

    spec:
      volumes:
      - name: npmrc
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "nexus-connector"
            configuration.names: "npmrc"
            configuration.params: '{"npmrc": {"registry": "npm-proxy"}}'

    Yarn: конфигурация .yarnrc.yml

    Конфигурация yarnrc предоставляет файл .yarnrc.yml для операций с пакетами Yarn.

    Обязательный параметр: registry — имя прокси-репозитория Nexus для NPM.

    Опциональный параметр: strictSSL — требовать ли SSL (по умолчанию: "true").

    spec:
      volumes:
      - name: yarnrc
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "nexus-connector"
            configuration.names: "yarnrc"
            configuration.params: '{"yarnrc": {"registry": "npm-proxy"}}'

    PyPI Download: конфигурация pip.conf

    Конфигурация pipconf предоставляет файл pip.conf для загрузки пакетов PyPI.

    Обязательный параметр: repository — имя прокси-репозитория Nexus для PyPI (например, pypi-proxy).

    spec:
      volumes:
      - name: pipconf
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "nexus-connector"
            configuration.names: "pipconf"
            configuration.params: '{"pipconf": {"repository": "pypi-proxy"}}'

    PyPI Publish: конфигурация .pypirc

    Конфигурация pypirc предоставляет файл .pypirc для публикации пакетов PyPI.

    Обязательный параметр: deployRepository — имя hosted-репозитория Nexus для PyPI (например, pypi-hosted).

    spec:
      volumes:
      - name: pypirc
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "nexus-connector"
            configuration.names: "pypirc"
            configuration.params: '{"pypirc": {"deployRepository": "pypi-hosted"}}'

    Использование Connectors CSI Driver

    Параметры атрибутов CSI volume:

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

    Несколько конфигураций можно монтировать одновременно, разделяя имена запятыми:

    configuration.names: "settings,npmrc"
    configuration.params: '{"settings": {"mirrorRepository": "maven-public"}, "npmrc": {"registry": "npm-proxy"}}'

    configuration.params для Nexus

    О формате, правилах валидации и поведении по умолчанию для configuration.params смотрите configuration.params в документации Connectors CSI Driver.

    Параметры, принимаемые каждой конфигурацией Nexus:

    КонфигурацияПараметрОбязательныйЗначение по умолчаниюОписание
    settingsmirrorRepositoryНет""Репозиторий Nexus Maven для использования как зеркало в settings.xml
    npmrcregistryДаИмя прокси-репозитория Nexus для NPM
    npmrcstrictSSLНет"true"Требовать SSL ("true" или "false")
    yarnrcregistryДаИмя прокси-репозитория Nexus для NPM
    yarnrcstrictSSLНет"true"Требовать SSL ("true" или "false")
    pipconfrepositoryДаИмя прокси-репозитория Nexus для PyPI
    pypircdeployRepositoryДаИмя hosted-репозитория Nexus для публикации PyPI

    Further Reading

    References