• Русский
  • CSI-драйвер Connectors

    Обзор

    CSI-драйвер Connectors — это драйвер хранения, реализованный на основе спецификации Container Storage Interface (CSI). Он может монтировать конфигурации из Connector в рабочие нагрузки Kubernetes как тома. Ключевые возможности:

    • Монтирование файлов конфигурации из Connector в Pod'ы
    • Поддержка динамического рендеринга переменных в файлах конфигурации для автоматической подстановки информации во время выполнения
    • Поддержка одновременного монтирования нескольких файлов конфигурации

    Все данные конфигурации поступают из конфигурации ConnectorClass, связанной с Connector.

    Быстрый старт

    1. Создайте ConnectorClass

    Сначала создайте ConnectorClass, который включает конфигурацию Git:

    cat << EOF | kubectl apply -f -
    apiVersion: connectors.alauda.io/v1alpha1
    kind: ConnectorClass
    metadata:
      name: my-git
    spec:
      address:
        type: string
      configurations:
      - name: config
        data:
          .gitconfig: |
            this is git config
    EOF

    2. Создайте Connector

    Затем создайте Connector, который подключается к GitHub:

    cat << EOF | kubectl apply -f -
    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: git-connector
    spec:
      address: https://github.com
      connectorClassName: my-git
    EOF

    3. Создайте Pod с использованием CSI-драйвера

    Создайте Pod, который монтирует конфигурацию:

    cat << EOF | kubectl create -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: csi-demo
      namespace: default
    spec:
      restartPolicy: Never
      containers:
      - name: web
        image: bitnami/git:2.47.1
        imagePullPolicy: IfNotPresent
        command: ["sleep", "3600"]
        volumeMounts:
        - name: git-config
          mountPath: /tmp/config
      volumes:
      - name: git-config
        csi:
          readOnly: true
          driver: connectors-csi
          volumeAttributes:
            connector.name: "git-connector"
            connector.namespace: "default"
            configuration.names: "config"
    EOF

    Проверьте смонтированные файлы:

    # Вывести список всех смонтированных файлов (включая встроенные конфигурации)
    kubectl exec -ti csi-demo -- ls -l /tmp/config
    
    # Просмотреть пользовательскую конфигурацию из ConnectorClass
    kubectl exec -ti csi-demo -- cat /tmp/config/.gitconfig

    Встроенные конфигурации

    CSI-драйвер автоматически предоставляет встроенные файлы конфигурации, которые всегда монтируются в Pod'ы.

    Имя файлаОписание
    .envФайл переменных окружения, содержащий http_proxy, https_proxy и no_proxy в формате key=value
    http.proxyURL прямого прокси с аутентификацией для HTTP
    https.proxyURL прямого прокси с аутентификацией для HTTPS
    context.tokenТокен аутентификации для прокси-сервиса
    context.proxy.caCertCA-сертификат для Connectors proxy
    connector.status.proxyAddressАдрес proxy (см. Connectors Proxy)

    Использование прямого прокси:

    # Вариант 1
    export http_proxy=$(cat /{mount-path}/http.proxy)
    export https_proxy=$(cat /{mount-path}/https.proxy)
    
    # Вариант 2
    source /{mount-path}/.env

    Использование обратного прокси:

    export TOKEN=$(cat /{mount-path}/context.token)
    export SERVER=$(cat /{mount-path}/connector.status.proxyAddress)
    
    {cli} --server $SERVER --token $TOKEN

    Параметры тома CSI

    Параметры тома

    ПараметрОбязательноОписание
    readOnlyДаДолжно быть true
    driverДаДолжно быть connectors-csi

    Атрибуты тома

    ПараметрОбязательноОписание
    connector.nameДаИмя Connector
    connector.namespaceНетNamespace Connector (по умолчанию используется namespace Pod)
    configuration.namesНетИмена конфигураций, разделенные запятыми (например, config1,config2); имена конфигураций соответствуют именам конфигураций в ConnectorClass
    token.expirationНетВремя истечения срока действия токена (по умолчанию: 30m)

    Примеры

    Монтирование одной конфигурации:

    volumes:
    - name: config
      csi:
        driver: connectors-csi
        readOnly: true
        volumeAttributes:
          connector.name: "my-connector"
          configuration.names: "config1"

    Монтирование нескольких конфигураций:

    volumes:
    - name: config
      csi:
        driver: connectors-csi
        readOnly: true
        volumeAttributes:
          connector.name: "my-connector"
          configuration.names: "config1,config2"

    Примечания:

    • Если configuration.names не указан, монтируются только встроенные конфигурации
    • Если несколько конфигураций содержат файлы с одинаковым именем, более поздние конфигурации перезаписывают более ранние

    Рендеринг файлов конфигурации

    CSI-драйвер выполняет рендеринг переменных при монтировании файлов конфигурации, используя синтаксис Go template.

    Доступные переменные

    ПеременнаяОписание
    .connector.status.proxyAddressАдрес proxy Connector; см. connectors-proxy
    .connector.spec.*Spec Connector, вы можете получить все поля Spec Connector, например .connector.spec.address или .connector.spec.params
    .context.tokenТокен аутентификации для доступа к proxy-сервису
    .context.proxy.caCertCA-сертификат для доступа к Connectors proxy (forward proxy); см. connectors-proxy

    Встроенные функции

    Поддерживаемые функции см. в sprig

    Например: b64enc — кодирование строки в Base64

    О proxy-сервисе

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

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

    Константное содержимое

    apiVersion: connectors.alauda.io/v1alpha1
    kind: ConnectorClass
    metadata:
      name: my-git
    spec:
      address:
        type: string
      configurations:
      - name: config
        data:
          .gitconfig: |
            this is git config

    Использование connector.spec.params

    Следующий ConnectorClass определяет параметр sslVerify для управления проверкой SSL во время git clone.

    kind: ConnectorClass
    metadata:
      name: git
    spec:
    
      params:
      - name: sslVerify
        type: string
        default: "true"
    
      configurations:
      - name: config
        data:
          .gitconfig: |
            {{ $sslVerify := "true" -}}
            {{- range .connector.spec.params }}{{- if eq .name "sslVerify" }}{{$sslVerify = .value }}{{ end }}{{- end }}
            [http]
              sslVerify = {{ $sslVerify }}

    Использование proxy-сервиса и токена

    Следующий ConnectorClass предоставляет файл с именем .gitconfig, который автоматически подставляет заголовки и заменяет URL git во время git clone с использованием proxy-сервиса и токена.

    kind: ConnectorClass
    metadata:
      name: git
    spec:
      configurations:
      - name: config
        data:
          .gitconfig: |
            [http]
                extraHeader = Authorization: Basic {{ printf ":%s" .context.token | b64enc }}
            [url "{{ .connector.status.proxyAddress }}"]
                insteadOf = {{.connector.spec.address}}