Интеграция с Excel

Инструкции ниже описывают, как развернуть YTsaurus Excel-интеграцию в Kubernetes. Подробнее про функционал можно прочитать в разделе по работе с данными Microsoft Excel.

Описание

Интеграция включает в себя два микросервиса:

  • Exporter — скачивает данные из схематизированных статических таблиц YTsaurus или результатов Query Tracker в виде Excel-таблицы.
  • Uploader — загружает данные из Excel-таблиц в статические таблицы YTsaurus.

Весь код микросервиса находится в отдельном репозитории ytsaurus/ytsaurus-excel-integration.

Установка Helm-чарта

Для установки обоих сервисов используется единый Helm-чарт.

  1. Подготовьте файл values.yaml.

    Минимальная конфигурация:

    settings:
      clusters:
        - proxy: http-proxies.default.svc.cluster.local
          # Определяет псевдоним прокси, используемый в пути API:
          #   <http_addr>/<api_path_prefix>/<api_endpoint_name>/api/
          # По умолчанию: совпадает с proxy.
          api_endpoint_name: <cluster-name> # Имя вашего кластера (см. в //sys/@cluster_connection/cluster_name)
      cors:
        allowed_hosts:
          - "yt.example.com" # Адрес вашего UI
    
  2. Установите чарт:

    helm install ytsaurus-excel oci://ghcr.io/ytsaurus/ytsaurus-excel-chart \
      --version 0.0.1 \
      -f values.yaml \
      -n <namespace>
    

Настройка сетевого доступа и включение в UI

Для того чтобы функции экспорта и импорта Excel появились в интерфейсе, необходимо настроить доступность сервисов для браузера пользователя и указать их адреса в конфигурации UI.

Production

Рекомендуемый способ для production-окружения — настроить Ingress.

  1. Пример values.yaml с настройкой CORS для вашего домена UI:

    settings:
      clusters:
        - proxy: http-proxies.default.svc.cluster.local
          api_endpoint_name: ytsaurus
      exporter:
        api_path_prefix: "api/excel/exporter"
      uploader:
        api_path_prefix: "api/excel/uploader"
      cors:
        allowed_hosts:
          - "yt.example.com"
    
  2. Пример Ingress-манифеста:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ui-ingress
      namespace: <namespace>
    spec:
      rules:
        - host: <your-ui-domain> # Укажите здесь ваш домен UI
          http:
            paths:
              - backend:
                  service:
                    name: ytsaurus-excel-uploader-svc
                    port:
                      name: http
                path: /api/excel/uploader
                pathType: Prefix
              - backend:
                  service:
                    name: ytsaurus-excel-exporter-svc
                    port:
                      name: http
                path: /api/excel/exporter
                pathType: Prefix
              - backend:
                  service:
                   name: ytsaurus-ui-ytsaurus-ui-chart
                   port:
                      name: http
                path: /
                pathType: Prefix
    
  3. Настройка UI:

    В values.yaml чарта ytsaurus-ui необходимо добавить следующие настройки:

    settings:
      exportTableBaseUrl: "https://yt.example.com/api/excel/exporter"
      uploadTableExcelBaseUrl: "https://yt.example.com/api/excel/uploader"
    

    И обновить чарт UI:

    helm upgrade ytsaurus-ui oci://ghcr.io/ytsaurus/ytsaurus-ui-chart \
      --version "0.5.0" \
      -f values.yaml \
      -n <namespace>
    

Testing

Для локальной разработки или тестирования можно использовать port-forward:

  1. Пример values.yaml:

    settings:
      clusters:
        - proxy: http-proxies.default.svc.cluster.local
          api_endpoint_name: minisaurus
      cors:
        allowed_hosts:
          - "localhost:8080" # Адрес локального UI
    
  2. Откройте доступ к микросервисам:

    kubectl port-forward service/ytsaurus-excel-uploader-svc 9095:80
    
    kubectl port-forward service/ytsaurus-excel-exporter-svc 9096:80
    
  3. Настройка UI:

    В values.yaml чарта ytsaurus-ui необходимо добавить следующие настройки:

    settings:
      uploadTableExcelBaseUrl: "http://localhost:9095"
      exportTableBaseUrl: "http://localhost:9096"
    

И обновить чарт UI:

helm upgrade ytsaurus-ui oci://ghcr.io/ytsaurus/ytsaurus-ui-chart \
  --version "0.5.0" \
  -f values.yaml \
  -n <namespace>

Проверка результата

  1. В YTsaurus UI откройте схематизированную статическую таблицу.

  2. Нажмите на кнопку Download.

  3. Убедитесь, что вкладка Excel отображается:

    Вкладка экспорта Excel в UI

Вкладка должна отображаться, если с вашего браузера запрос <exportTableBaseUrl>/<cluster-name>/api/ready вернёт статус 200 OK. Если этого не происходит, обратите внимание на настройки: UI Helm Chart, Excel Helm Chart и Ingress.

Детальная конфигурация

Ниже приведены параметры, которые может потребоваться переопределить:

replicaCount: 1

settings:
  cors:
    # Разрешенные имена хостов, например yt.example.com. Проверяется точное совпадение: origin.Host == "yt.example.com"
    allowed_hosts: []
    # Разрешенные суффиксы имен хостов, например .yt.example.com. Проверяется через HasSuffix(origin.Host, ".yt.example.com")
    allowed_host_suffixes: []

  # Список кластеров с настройками, специфичными для кластера.
  clusters:
    - proxy: http-proxies.default.svc.cluster.local
      # Определяет псевдоним прокси, используемый в пути API:
      #   <http_addr>/<api_path_prefix>/<api_endpoint_name>/api/
      # По умолчанию: совпадает с proxy.
      api_endpoint_name: minisaurus

  # Имя cookie запроса, которое сервис пересылает в YTsaurus.
  # YTsaurus-прокси использует этот cookie для авторизации запросов.
  auth_cookie_name: "YTCypressCookie"
  sso_cookie_name: "yt_oauth_access_token"

  exporter:
    # Максимальное время обработки запроса.
    http_handler_timeout: 2m

    # Максимальный размер входного файла.
    max_excel_file_size_bytes: 104857600 # (100 МБ)

    # Определяет глобальный префикс пути, используемый в пути API:
    #   <http_addr>/<api_path_prefix>/<api_endpoint_name>/api/
    # По умолчанию: пусто.
    api_path_prefix: ""

  uploader:
    # Максимальное время обработки запроса.
    http_handler_timeout: 2m

    # Максимальный размер входного файла.
    max_excel_file_size_bytes: 104857600 # (100 МБ)

    # Определяет глобальный префикс пути, используемый в пути API:
    #   <http_addr>/<api_path_prefix>/<api_endpoint_name>/api/
    # По умолчанию: пусто.
    api_path_prefix: ""

Все параметры можно посмотреть в исходном коде.

Предыдущая
Следующая