• Русский
  • 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)

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

    # Вариант 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}}