Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Решения
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Managed Service for Elasticsearch
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Информация об имеющихся кластерах
    • Создание кластера
    • Подключение к кластеру
    • Остановка и запуск кластера
    • Управление хостами Elasticsearch
    • Управление пользователями Elasticsearch
    • Удаление кластера
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Индексы
    • Поиск с помощью Elasticsearch
    • Классы хостов
    • Сеть в Managed Service for Elasticsearch
    • Квоты и лимиты
    • Типы хранилища
    • Шардирование и репликация
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC
      • Обзор
      • ClusterService
      • OperationService
      • ResourcePresetService
      • UserService
      • OperationService
    • REST
      • Обзор
      • Cluster
        • Обзор
        • addHosts
        • create
        • delete
        • deleteHosts
        • get
        • list
        • listHosts
        • listLogs
        • listOperations
        • move
        • start
        • stop
        • streamLogs
        • update
      • Operation
        • Обзор
        • get
      • ResourcePreset
        • Обзор
        • get
        • list
      • User
        • Обзор
        • get
        • list
  • Вопросы и ответы
  1. Пошаговые инструкции
  2. Подключение к кластеру

Подключение к кластеру

  • Настройка SSL-сертификата
  • Автоматический выбор хоста для подключения
  • Примеры строк подключения

К хостам кластера Managed Service for Elasticsearch с ролью Data node можно подключиться:

  • Через интернет, если вы настроили публичный доступ для нужного хоста.
  • С виртуальных машин Yandex.Cloud, расположенных в той же виртуальной сети.

Вне зависимости от способа подключения, Managed Service for Elasticsearch поддерживает только соединения с SSL-сертификатом к хостам кластера.

Настройка SSL-сертификата

Подготовить SSL-сертификат можно так:

mkdir ~/.elasticsearch && \
wget  "https://storage.yandexcloud.net/cloud-certs/CA.pem" -O ~/.elasticsearch/root.crt && \
chmod 0600 ~/.elasticsearch/root.crt

Автоматический выбор хоста для подключения

При подключении к кластеру Elasticsearch вы можете:

  • Явно задать имена хостов с ролью Data node в строках подключения.

    Этот способ подходит для любого способа подключения. Например, его можно использовать для подключения через интернет в случае, когда только нескольким хостам назначен публичный IP-адрес.

  • Использовать специальный FQDN вида c-<идентификатор кластера Elasticsearch>.rw.mdb.yandexcloud.net (например, https://c-e4ut2....rw.mdb.yandexcloud.net).

    Этот способ подходит только в том случае, если все хосты с ролью Data node имеют публичный IP-адрес или же подключение осуществляется только с виртуальных машин Yandex.Cloud. Это связано с тем, что хост для подключения, на который указывает этот FQDN, выбирается случайным образом среди все хостов с ролью Data node.

Примеры строк подключения

Примеры проверялись в следующем окружении:

  • Виртуальная машина в Облаке c Ubuntu 20.04 LTS.
  • Bash: 5.0.16.
  • Python: 3.8.2; pip3: 20.0.2.
  • Go: 1.13.8.

Перед подключением подготовьте сертификат. В этих примерах предполагается, что сертификат root.crt расположен в директории /home/<домашняя директория>/.elasticsearch/.

Для подключения нужно использовать имя пользователя и пароль, которые были заданы при создании кластера.

Пример команды с заполненным FQDN хоста вы можете посмотреть в консоли управления, нажав на кнопку Подключиться на странице кластера.

Kibana
Bash
Python
Go

Если хосту с ролью Data node назначен публичный IP-адрес:

  1. Перед подключением установите SSL-сертификат в хранилище доверенных корневых сертификатов браузера (инструкция для Mozilla Firefox).
  2. В браузере перейдите по одному из адресов:
    • https://c-<идентификатор кластера Elasticsearch>.rw.mdb.yandexcloud.net, если публичный IP-адрес назначен всем хостам с этой ролью. Идентификатор кластера можно получить со списком кластеров в каталоге.
    • https://<имя любого хоста с ролью Data node и публичным IP>.mdb.cloud.yandex.net
  3. Введите имя пользователя и пароль.

Если ни одному хосту с ролью Data node не назначен публичный IP-адрес:

  1. Создайте виртуальную машину на основе Linux в той же виртуальной сети, что и кластер.

  2. Подключитесь к виртуальной машине по SSH.

  3. Установите зависимости:

    sudo apt update && sudo apt install -y nginx ssl-cert
    
  4. Скопируйте загруженный SSL-сертификат в директорию /etc/nginx/:

    sudo cp ~/.elasticsearch/root.crt /etc/nginx/root.crt
    
  5. Измените файл конфигурации по умолчанию для NGINX, например, так:

    /etc/nginx/sites-available/default

    upstream es-datanodes {
       server <FQDN хоста 1 с ролью Data Node>:443;
       ...
       server <FQDN хоста N с ролью Data Node>:443;
    }
    
    server {
       listen 443 ssl;
    
       ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
       ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
    
       server_name _;
    
       location / {
    
           proxy_pass https://es-datanodes;
           
           proxy_ssl_trusted_certificate /etc/nginx/root.crt;
           proxy_ssl_session_reuse on;
       }
    }
    

    Также можно использовать директиву proxy_pass со специальным FQDN:

    proxy_pass https://c-<идентификатор кластера Elasticsearch>.rw.mdb.yandexcloud.net;
    

    Важно

    В этом примере конфигурационного файла используется самоподписанный сертификат snakeoil из пакета ssl-cert. Использовать этот сертификат в реальном кластере небезопасно. Вместо самоподписанного сертификата укажите путь к вашим публичным и приватным ключам SSL-сертификата в директивах ssl_certificate и ssl_certificate_key.

  6. Перезапустите NGINX:

    sudo systemctl restart nginx
    
  7. Добавьте сертификат, указанный в директиве ssl_certificate, в хранилище доверенных корневых сертификатов браузера (инструкция для Mozilla Firefox).

  8. Перейдите в браузере по адресу https://<публичный IP-адрес ВМ>.

  9. Введите имя пользователя и пароль.

Пример команды для подключения с использованием SSL-соединения :

 curl \
   --user <имя пользователя>:<пароль> \
   --cacert ~/.elasticsearch/root.crt \  
   -X GET 'https://c-<идентификатор кластера Elasticsearch>.rw.mdb.yandexcloud.net:9200/'

Перед подключением установите зависимости:

sudo apt update && sudo apt install -y python3 python3-pip && \
pip3 install elasticsearch

Пример кода для подключения с использованием SSL-соединения:

connect.py

from elasticsearch import Elasticsearch

ES_CA = '~/.elasticsearch/root.crt'

ES_USER = '<имя пользователя>'
ES_PASS = '<пароль>'

ES_HOSTS = [
  "<FQDN хоста 1 Elasticsearch с ролью Data Node>",
  ...,
  "<FQDN хоста N Elasticsearch с ролью Data Node>"
  ]

conn = Elasticsearch(
  ES_HOSTS,
  http_auth=(ES_USER, ES_PASS),
  use_ssl=True,
  verify_certs=True,
  ca_certs=ES_CA)

print(conn.info())

conn.close()

Подключение:

python3 connect.py

Перед подключением установите зависимости:

sudo apt update && sudo apt install -y golang git && \
go get github.com/elastic/go-elasticsearch

Пример кода для подключения с использованием SSL-соединения:

connect.go

package main

import (
      "crypto/tls"
      "crypto/x509"
      "github.com/elastic/go-elasticsearch"
      "io/ioutil"
      "log"
      "net/http"
)

var ES_CA = "/home/<домашняя директория>/.elasticsearch/root.crt"

var ES_USER = "<имя пользователя>"
var ES_PASS = "<пароль>"

var ES_HOSTS = []string{
  "https://<FQDN хоста 1 Elasticsearch с ролью Data Node>:9200",
  ...,
  "https://<FQDN хоста N Elasticsearch с ролью Data Node>:9200"}

func main() {
     caCert, err := ioutil.ReadFile(ES_CA)
      if err != nil {
              log.Fatal(err)
      }
      caCertPool := x509.NewCertPool()
      caCertPool.AppendCertsFromPEM(caCert)

      cfg := elasticsearch.Config{
              Addresses: ES_HOSTS,
              Transport: &http.Transport{
                      TLSClientConfig: &tls.Config{
                              RootCAs: caCertPool,
                      },
              },
              Username: ES_USER,
              Password: ES_PASS,
      }
      conn, err := elasticsearch.NewClient(cfg)
      if err != nil {
              log.Printf("Error creating the client: %s", err)
      } else {
              log.Println(conn.Info())
      }
}

В отличие от других способов подключения, в этом коде необходимо указывать полный путь к сертификату CA.pem для Elasticsearch в переменной ES_CA.

Подключение:

go run connect.go

При успешном подключении будет выведена общая информация о кластере Elasticsearch.

В этой статье:
  • Настройка SSL-сертификата
  • Автоматический выбор хоста для подключения
  • Примеры строк подключения
Language
Вакансии
Политика конфиденциальности
Условия использования
© 2021 ООО «Яндекс.Облако»