• Русский
  • PyPI Connector

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

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

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

    Overview

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

    • Integration Requirements: Предварительные требования для целевых реестров PyPI
    • Creating PyPI connector
    • Advanced Features: Возможности прокси и конфигурационные возможности PyPI connector

    Integration Requirements

    PyPI Registries Prerequisites

    Creating a simple PyPI connector

    Вот как создать базовый PyPI Connector:

    # PyPI Connector
    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: pypi-connector
    spec:
      connectorClassName: pypi
      address: https://pypi.org

    Fields Reference

    spec.connectorClassName:

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

    spec.address:

    Адрес целевого реестра PyPI, например: https://pypi.org.

    spec.auth(optional):

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

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

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

    Optional Metadata fields:

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

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

    Capabilities of PyPI Connector

    Authentication

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

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

    Using Basic Authentication

    Например:

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

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

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

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

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

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

    Credential Permissions Required

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

    Например:

    • Установка пакетов: Если вам нужно только устанавливать пакеты с помощью pip install, учётные данные требуют только права на чтение целевого реестра PyPI.
    • Загрузка пакетов: Если необходимо загружать пакеты с помощью twine upload или аналогичных инструментов, учётные данные должны иметь права на чтение и запись для целевого реестра.

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

    Proxy and pip.conf, .pypirc Configuration

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

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

    Для упрощения использования класс PyPI connector предоставляет файлы pip.conf и .pypirc, которые можно смонтировать в Pods через CSI. В Pod при выполнении операций PyPI прокси-сервис автоматически подставит информацию аутентификации.

    Proxy Address

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

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

    Например:

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

    pip.conf configuration file

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

    pip.conf:

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

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

    [global]
    index-url = http://connectors-pypi-demo-pypi-connector:eyJhbGciOiJEnEZaTQ@c-pypi-connector.connectors-pypi-demo.svc.cluster.local/simple/
    timeout = 30
    
    [install]
    trusted-host = c-pypi-connector.connectors-pypi-demo.svc.cluster.local

    .pypirc configuration file

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

      [distutils]
      index-servers = connectors-pypi
      
      [connectors-pypi]
      repository = http://c-pypi-connector.connectors-pypi-demo.svc.cluster.local/
      username = connectors-pypi-demo-pypi-connector
      password = eyJhbGciOiJEnEZaTQ

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

    Using Connectors CSI Driver to mount pip.conf and .pypirc file

    PyPI connector предоставляет файлы pip.conf и .pypirc, которые можно смонтировать в Pod через Connector CSI Driver.

    Например:

    spec:
      volumes:
      - name: pip.conf
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "pypi-connector"
            configuration.names: "pipconf"
      - name: pypirc
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "pypi-connector"
            configuration.names: "pypirc"

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

    • csi.readOnly: фиксированное значение true
    • csi.driver: Connector CSI Driver, фиксированное значение connectors-csi.
    • csi.volumeAttributes: атрибуты CSI Volume
      • connector.name: имя PyPI Connector
      • connector.namespace: пространство имён PyPI Connector; если не указано, используется пространство имён Pod
      • configuration.names: имя конфигурации, предоставляемое PyPI Connector. Поддерживаются pipconf и pypirc.

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

    Further Reading

    References