• Русский
  • Maven Connector

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

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

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

    Overview

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

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

    Integration Requirements

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

    • Maven-реестр должен поддерживать операции maven, такие как mvn deploy, mvn install, mvn package и т. д. Он должен быть одним из следующих типов: maven snapshots repository, maven release repository или maven proxy repository. Например, maven central, maven-репозиторий, размещённый на nexus, artifactory и т. п.

    Существуют некоторые предварительные условия для клиента, использующего Maven Connector:

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

    • Клиент должен доверять сертификату прокси-сервера коннектора, поэтому необходимо импортировать файл ca.cert в truststore клиента перед выполнением операций mvn. Обычно для этого можно использовать команду keytool -importcert. Например:

      keytool -importcert -noprompt \
                  -trustcacerts \
                  -keystore $JAVA_HOME/lib/security/cacerts \
                  -storepass changeit \
                  -alias corp-ca \
                  -file /opt/maven/ca.cert
    • Клиент mvn должен использовать transport=wagon для выполнения операций mvn. Это можно сделать, добавив параметр -Dmaven.resolver.transport=wagon к команде mvn или установив переменную окружения MAVEN_OPTS в значение -Dmaven.resolver.transport=wagon.

    Creating a simple Maven connector

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

    # Maven Connector
    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: maven-connector
    spec:
      connectorClassName: maven
      address: https://repo.maven.apache.org/maven2
      auth:
        name: basicAuth

    Fields Reference

    spec.connectorClassName:

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

    spec.address:

    Адрес целевого Maven-реестра, например: https://nexus.example.com/repository/maven-snapshots или https://repo.maven.apache.org/maven2. Он должен быть одним из следующих типов: maven snapshots repository, maven release repository или maven proxy repository.

    spec.auth:

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

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

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

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

    • cpaas.io/description: Описание для maven connector, например:

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

    Capabilities of Maven Connector

    Authentication

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

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

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

    Пример:

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

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

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: maven-connector
    spec: {}
    status:
      conditions:
        - type: Ready
          status: False
          reason: "xxxxx"
          message: "xxxx"

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

    Если Maven-реестр не требует аутентификации, поле secretRef можно опустить:

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: maven-connector
    spec:
      connectorClassName: maven
      address: https://repo.maven.apache.org/maven2
      auth:
        name: basicAuth

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

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

    Например:

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

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

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

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

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

    Для упрощения использования класс Maven Connector предоставляет файлы settings.xml, которые можно монтировать в Pods через CSI. В Pod при выполнении операций maven прокси-сервис автоматически внедряет информацию для аутентификации.

    Адрес прокси

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

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

    Пример:

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

    Конфигурационный файл settings.xml

    Maven Connector предоставляет следующую конфигурацию:

    settings.xml:

    • Предоставляет конфигурационный файл settings.xml. В сочетании с connector-csi-driver этот файл монтируется в Pod, что позволяет обращаться к maven-реестру через прокси без необходимости настройки учётных данных на стороне клиента.

    Пример конфигурационного файла, сгенерированного в Pod:

    <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-maven-connector.connectors-maven-demo.svc.cluster.local</host>
          <port>80</port>
          <username>connectors-maven-demo/maven-connector</username>
          <password>eyJhbGciOiJEnEZaTQ</password>
          <nonProxyHosts>localhost</nonProxyHosts>
        </proxy>
      </proxies>
    </settings>

    Для подробностей о работе прокси см. How It Works в руководстве Quick Start.

    Файл ca.cert

    Maven Connector предоставляет файл ca.cert, который можно монтировать в Pod через Connector CSI Driver. Он используется для доверия прокси-серверу коннектора, поэтому файл ca.cert необходимо импортировать в truststore клиента перед выполнением операций mvn.

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

    Использование Connectors CSI Driver для монтирования settings.xml и ca.cert

    Maven Connector предоставляет файлы settings.xml и ca.cert, которые можно монтировать в Pod через Connector CSI Driver.

    Пример:

    spec:
      volumes:
      - name: settings
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "maven-connector"
            configuration.names: "settings"

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

    • csi.readOnly: фиксированное значение true
    • csi.driver: драйвер Connector CSI, фиксированное значение connectors-csi
    • csi.volumeAttributes: атрибуты CSI тома
      • connector.name: имя Maven Connector
      • connector.namespace: пространство имён Maven Connector; если не указано, используется пространство имён Pod
      • configuration.names: имя конфигурации, предоставляемое Maven Connector. Как указано выше, поддерживается settings.

    Для подробной информации о том, как использовать файл settings в Pod с помощью connectors-csi-driver, см. Using Maven Connectors in kubernetes jobs

    Further Reading

    References