• Русский
  • Connectors CSI Driver

    Overview

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

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

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

    Quick Start

    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 Driver

    Создайте 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 автоматически предоставляет встроенные конфигурационные файлы, которые всегда монтируются в Pods.

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

    Использование форвард-прокси:

    # Вариант 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НетПространство имён 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Адрес прокси Connector; см. connectors-proxy
    .connector.spec.*Спецификация Connector, можно получить все поля Spec Connector, например .connector.spec.address или .connector.spec.params
    .context.tokenТокен аутентификации для доступа к прокси-сервису
    .context.proxy.caCertCA-сертификат для доступа к прокси Connectors (форвард-прокси); см. connectors-proxy

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

    См. sprig для поддерживаемых функций

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

    О прокси-сервисе

    Connectors предоставляют прокси-сервис для каждого 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 }}

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

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

    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}}