Подключение к кластеру OpenSearch
К хостам кластера Managed Service for OpenSearch с ролью DATA
можно подключиться:
-
Через интернет, если вы настроили публичный доступ для нужной группы хостов.
-
С виртуальных машин Yandex Cloud, расположенных в той же виртуальной сети.
Вне зависимости от способа подключения, Managed Service for OpenSearch поддерживает только соединения с SSL-сертификатом к хостам кластера.
Настройка групп безопасности
Для подключения к кластеру необходимо, чтобы группы безопасности содержали правила, которые разрешают трафик с определенных портов, IP-адресов или из других групп безопасности.
Настройки правил доступа будут различаться в зависимости от выбранного способа подключения:
Настройте все группы безопасности кластера так, чтобы они разрешали входящий трафик с любых IP-адресов на порты 443 (Dashboards) и 9200 (OpenSearch). Для этого создайте следующие правила для входящего трафика:
- Диапазон портов —
443
,9200
. - Протокол —
TCP
. - Источник —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
На каждый порт создается отдельное правило.
-
Настройте все группы безопасности кластера так, чтобы они разрешали входящий трафик из группы безопасности, в которой находится ВМ, на порты 443 (Dashboards) и 9200 (OpenSearch). Для этого создайте в этих группах следующие правила для входящего трафика:
- Диапазон портов —
443
,9200
. - Протокол —
TCP
. - Источник —
Группа безопасности
. - Группа безопасности — если кластер и ВМ находятся в одной и той же группе безопасности, выберите значение
Текущая
(Self
). В противном случае укажите группу безопасности ВМ.
На каждый порт создается отдельное правило.
- Диапазон портов —
-
Настройте все группы безопасности, в которых находится ВМ, так, чтобы можно было подключаться к ВМ и был разрешен трафик между ней и хостами кластера.
Пример правил для ВМ:
-
Для входящего трафика:
- Диапазон портов —
22
,443
,9200
. - Протокол —
TCP
. - Источник —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
На каждый порт создается отдельное правило.
- Диапазон портов —
-
Для исходящего трафика:
- Диапазон портов —
0-65535
. - Протокол —
Любой
(Any
). - Назначение —
CIDR
. - CIDR блоки —
0.0.0.0/0
.
Это правило разрешает любой исходящий трафик, что позволяет не только подключаться к кластеру, но и устанавливать на ВМ необходимые для этого сертификаты и утилиты.
- Диапазон портов —
-
Примечание
Вы можете задать более детальные правила для групп безопасности, например, разрешающие трафик только в определенных подсетях.
Группы безопасности должны быть корректно настроены для всех подсетей, в которых будут размещены хосты кластера. При неполных или некорректных настройках групп безопасности можно потерять доступ к кластеру.
Подробнее о группах безопасности см. в разделе Группы безопасности.
Получение SSL-сертификата
Чтобы использовать шифрованное соединение, получите SSL-сертификат:
mkdir -p ~/.opensearch && \
wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \
--output-document ~/.opensearch/root.crt && \
chmod 0600 ~/.opensearch/root.crt
Сертификат будет сохранен в файле ~/.opensearch/root.crt
.
mkdir $HOME\.opensearch; curl --output $HOME\.opensearch\root.crt https://storage.yandexcloud.net/cloud-certs/CA.pem
Сертификат будет сохранен в файле $HOME\.opensearch\root.crt
.
FQDN хоста OpenSearch
Для подключения к хосту потребуется его FQDN — доменное имя. Его можно получить несколькими способами:
-
Скопируйте команду для подключения к кластеру в консоли управления
. Команда содержит заполненный FQDN хоста. Чтобы получить команду, перейдите на страницу кластера и нажмите кнопку Подключиться. -
Посмотрите FQDN в консоли управления:
- Перейдите на страницу кластера.
- Перейдите в раздел Хосты.
- Скопируйте значение в столбце FQDN хоста.
Для хостов с ролью DASHBOARDS
также используется особый FQDN.
Особый FQDN
Наравне с обычными FQDN Managed Service for OpenSearch предоставляет особый FQDN, который также можно использовать при подключении к кластеру.
FQDN вида c-<идентификатор_кластера>.rw.mdb.yandexcloud.net
всегда указывает на доступный хост OpenSearch с ролью DASHBOARDS
в кластере. Идентификатор кластера можно получить со списком кластеров в каталоге.
Сервис не предоставляет особые FQDN для хостов с ролью DATA
.
Подключение к OpenSearch Dashboards
Вы можете подключиться к OpenSearch Dashboards:
- Через интернет, если для хоста с ролью
DASHBOARDS
включен публичный доступ. - Через виртуальную машину в Yandex Cloud, если публичный доступ не включен ни для какого из хостов с ролью
DASHBOARDS
.
-
Установите SSL-сертификат в хранилище доверенных корневых сертификатов браузера (инструкция
для Mozilla Firefox). -
На странице кластера в консоли управления нажмите кнопку OpenSearch Dashboards или перейдите в браузере по адресу
https://c-<идентификатор_кластера>.rw.mdb.yandexcloud.net>
.Идентификатор кластера можно получить со списком кластеров в каталоге.
-
Введите имя пользователя
admin
и пароль, который был задан при создании кластера.
-
Создайте виртуальную машину на основе Linux в той же виртуальной сети, что и кластер.
-
Подключитесь к виртуальной машине по SSH.
-
Установите зависимости:
sudo apt update && \ sudo apt install --yes nginx ssl-cert
-
Скопируйте загруженный SSL-сертификат в директорию
/etc/nginx/
:sudo cp ~/.opensearch/root.crt /etc/nginx/root.crt
-
Измените файл конфигурации по умолчанию для NGINX, например, так:
/etc/nginx/sites-available/default
upstream os-dashboards-nodes { server <FQDN_хоста_1_с_ролью_DASHBOARDS>:443; ... server <FQDN_хоста_N_с_ролью_DASHBOARDS>: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://os-dashboards-nodes; proxy_ssl_trusted_certificate /etc/nginx/root.crt; proxy_ssl_session_reuse on; } }
Важно
В этом примере конфигурационного файла используется самоподписанный сертификат
snakeoil
из пакетаssl-cert
. Использовать этот сертификат в реальном кластере небезопасно. Вместо самоподписанного сертификата укажите путь к вашим публичным и приватным ключам SSL-сертификата в директивахssl_certificate
иssl_certificate_key
. -
Перезапустите NGINX:
sudo systemctl restart nginx
-
Добавьте сертификат, указанный в директиве
ssl_certificate
, в хранилище доверенных корневых сертификатов браузера (инструкция для Mozilla Firefox). -
Перейдите в браузере по адресу
https://<публичный_IP-адрес_ВМ>
. -
Введите имя пользователя
admin
и пароль.
Примечание
При использовании API OpenSearch Dashboards:
- Для отправки запросов используйте порт
443
вместо штатного5601
. - Добавьте путь к SSL-сертификату в конфигурацию вашего приложения для работы с API.
Подготовка к подключению из Docker-контейнера
Чтобы подключаться к кластеру Managed Service for OpenSearch из Docker-контейнера, добавьте в Dockerfile строки:
RUN apt-get update && \
apt-get install curl --yes
RUN apt-get update && \
apt-get install wget curl --yes && \
mkdir --parents ~/.opensearch && \
wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \
--output-document ~/.opensearch/root.crt && \
chmod 0600 ~/.opensearch/root.crt
Примеры строк подключения
Перед подключением подготовьте сертификат.
Для подключения нужно использовать имя пользователя admin
и пароль, который был задан при создании кластера.
Примеры кода с заполненным FQDN хоста доступны в консоли управления
Bash
curl \
--user admin:<пароль> \
--cacert ~/.opensearch/root.crt \
--request GET 'https://<FQDN_хоста_OpenSearch_с_ролью_DATA>:9200/'
О том, как получить FQDN хоста, см. инструкцию.
Go
Перед подключением установите зависимости:
go mod init opensearch-example && \
go get github.com/opensearch-project/opensearch-go
-
Пример кода:
connect.go
package main import ( "crypto/tls" "crypto/x509" "crypto/x509" "github.com/opensearch-project/opensearch-go" "io/ioutil" "log" "net/http" ) var hosts = []string{ "<FQDN_хоста_1_с_ролью_DATA>:9200", ..., "<FQDN_хоста_N_с_ролью_DATA>:9200" } var CA = "/home/<домашняя_директория>/.opensearch/root.crt" var password = "<пароль>" func main() { caCert, err := ioutil.ReadFile(CA) if err != nil { log.Fatal(err) } caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM(caCert) cfg := opensearch.Config{ Addresses: hosts, Transport: &http.Transport{ TLSClientConfig: &tls.Config{ RootCAs: caCertPool, }, }, Username: "admin", Password: password, } es, err := opensearch.NewClient(cfg) if err != nil { log.Printf("Error creating the client: %s", err) } else { log.Println(es.Info()) } }
В отличие от других способов подключения, в этом примере необходимо указывать полный путь к сертификату
CA.pem
для OpenSearch в переменнойCA
. -
Подключение:
go run connect.go
О том, как получить FQDN хоста, см. инструкцию.
PowerShell
curl `
-Certificate <абсолютный_путь_к_файлу_сертификата> `
-Uri https://<FQDN_хоста_OpenSearch_с_ролью_DATA>:9200 `
-Credential admin
О том, как получить FQDN хоста, см. инструкцию.
Python
Перед подключением установите зависимости:
sudo apt update && sudo apt install --yes python3 python3-pip && \
pip3 install opensearch-py
-
Пример кода:
connect.py
from opensearchpy import OpenSearch CA = '~/.opensearch/root.crt' PASS = '<пароль>' HOSTS = [ "<FQDN_хоста_1_с_ролью_DATA>", ..., "<FQDN_хоста_N_с_ролью_DATA>" ] conn = OpenSearch( HOSTS, http_auth=('admin', PASS), use_ssl=True, verify_certs=True, ca_certs=CA) print(conn.info())
-
Подключение:
python3 connect.py
О том, как получить FQDN хоста, см. инструкцию.