Установка и настройка OpenSearch. Debian 12.

Установка и настройка OpenSearch. Debian 12.

OpenSearch – система полнотекстового поиска. Является форком Elasticsearch. Разработана компанией A9.com, дочерней компанией Amazon.com.

Стэк OpenSearch (OpenSearch + Logstash-oss-with-OpenSearch-output-plugin + OpenSearch–Dashboards) является бесплатным аналогом с отрытым исходным кодом стэку ELK (Elasticsearch + Logstash + Kibana). В совокупности с Beat’ами (Filebeat, Winlogbeat, и т.д.) образуют полный цикл управления логами: сбор, систематизация, поиск.

На момент установки актуальная версия OpenSearch — 2.18
Данная версия работает с Java 11, 17, 21.

Установка производится на Debian 12.

Установка Java:
# apt install openjdk-17-jre

Включение требуемой версии версии Java:
# update-alternatives --config java

Установка корневых сертификатов:
# apt-get install ca-certificates

В файл /etc/sysctl.conf добавляю параметр vm.max_map_count=262144 и перечитываю параметры ядра:
# sysctl -p

Создаю пользователя openserach:
# adduser --system --shell /bin/bash --no-create-home opensearch

Создаю группу:
# addgroup opensearch

Добавляю пользователя в группу:
# usermod -aG opensearch opensearch

Дистрибутивы находятся на странице https://opensearch.org/downloads.html

Устанавливать компоненты стека буду в каталог /var/lib.

Установка OpenSearch.

Скачиваю и разархивирую нужную версию OpenSearch:
# mkdir -p /usr/local/src/Opensearch
# cd /usr/local/src/Opensearch
# wget https://artifacts.opensearch.org/releases/bundle/opensearch/2.18.0/opensearch-2.18.0-linux-x64.tar.gz
# tar zxvf ./opensearch-2.18.0-linux-x64.tar.gz
# cp -r ./opensearch-2.18.0/ /var/lib/opensearch
# chown -R opensearch /var/lib/opensearch

Настраиваю параметры JVM в файле /var/lib/opensearch/config/jvm.options:

-Xms4g
-Xmx4g

Настройка TLS.

Самодписанные сертификаты будут храниться в каталоге /var/lib/opensearch/config. Перехожу в данный каталог и генерирую сертификаты:
# cd /var/lib/opensearch/config

Генерация приватного ключа:
openssl genrsa -out root-ca-key.pem 2048

На основе приватного ключа создаётся корневой сертификат:
openssl req -new -x509 -sha256 -key root-ca-key.pem -subj "/C=RU/ST=Ekat/L=Ekat/O=ORG/OU=IT/CN=ROOT" -out root-ca.pem -days 3650

Создаю админский ключ:
# openssl genrsa -out admin-key-temp.pem 2048

Конвертация админского ключа в формат PKCS#8:
# openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem

Формирование запроса на генерацию сертификата:
# openssl req -new -key admin-key.pem -subj "/C=RU/ST=EKAT/L=EKAT/O=ORG/OU=IT/CN=A" -out admin.csr

Генерация сертификата:
# openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem -days 3650

Создаю ключ для ноды:
# openssl genrsa -out node1-key-temp.pem 2048

Конвертация ключа в формат PKCS#8:
# openssl pkcs8 -inform PEM -outform PEM -in node1-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node1-key.pem

Формирование запроса на генерацию сертификата:
openssl req -new -key node1-key.pem -subj "/C=RU/ST=Ekat/L=Ekat/O=ORG/OU=IT/CN=node1" -out node1.csr

Создание файла расширения, определяющий DNS-имя SAN для хоста. Оно должно соответствовать DNS-записи A хоста.
# echo 'subjectAltName=DNS:node1' > node1.ext

Генерация сертификата:
# openssl x509 -req -in node1.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node1.pem -days 3650 -extfile node1.ext

В файл /var/lib/opensearch/config/opensearch.yml добавляю строки:

plugins.security.disabled: false
discovery.type: single-node
plugins.security.ssl.transport.pemcert_filepath: /var/lib/opensearch/config/node1.pem
plugins.security.ssl.transport.pemkey_filepath: /var/lib/opensearch/config/node1-key.pem
plugins.security.ssl.transport.pemtrustedcas_filepath: /var/lib/opensearch/config/root-ca.pem
plugins.security.ssl.http.enabled: true
plugins.security.ssl.http.pemcert_filepath: /var/lib/opensearch/config/node1.pem
plugins.security.ssl.http.pemkey_filepath: /var/lib/opensearch/config/node1-key.pem
plugins.security.ssl.http.pemtrustedcas_filepath: /var/lib/opensearch/config/root-ca.pem
plugins.security.allow_default_init_securityindex: true
plugins.security.authcz.admin_dn:
  - 'CN=A,OU=IT,O=ORG,L=Ekat,ST=Ekat,C=RU'
plugins.security.nodes_dn:
  - 'CN=node1,OU=IT,O=ORG,L=Ekat,ST=Ekat,C=RU'
plugins.security.audit.type: internal_opensearch
plugins.security.enable_snapshot_restore_privilege: true
plugins.security.check_snapshot_restore_write_privileges: true
plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]

Также в этом файле настраиваю параметры хоста:

node.name: node1
network.host: 0.0.0.0

Значение node.name должно соответствовать имени хоста в ДНС и открываем доступ к сервису снаружи.

 

Добавление самоподписанного корневого сертификата в доверенные провожу по методике: Добавление корневого сертификата(CA) в доверенные.

Настройка пользователей.

Внутренние пользователи хранятся в файле /var/lib/opensearch/config/opensearch-security/internal_users.yml.
Из этого файла рекомендуется удалить все демо-учётки за исключением admin, а для admin сменить пароль.
Для смены пароля выполняю следующие действия.

Делаю скрипты исполняемыми:
# chmod 755 /var/lib/opensearch/plugins/opensearch-security/tools/*.sh

Запускаю скрипт генерации хеша пароля:
# /var/lib/opensearch/plugins/opensearch-security/tools/hash.sh

Задаю новый пароль, полученный хеш помещаю в файл /var/lib/opensearch/config/opensearch-security/internal_users.yml

Для принятия изменений требуется запустить opensearch в консоли и выполнить скрипт securityadmin.sh

# # OPENSEARCH_JAVA_HOME=/var/lib/opensearch/jdk sudo -u opensearch /var/lib/opensearch/bin/opensearch

Открываю второе окно терминала и в нём выполняю:
# OPENSEARCH_JAVA_HOME=/var/lib/opensearch/jdk /var/lib/opensearch/plugins/opensearch-security/tools/securityadmin.sh -cd /var/lib/opensearch/config/opensearch-security/ -cacert /var/lib/opensearch/config/root-ca.pem -cert /var/lib/opensearch/config/admin.pem -key /var/lib/opensearch/config/admin-key.pem -icl -nhnv

Для чистоты эксперимента рестартую сервис в первом окне. Во втором окне выполняю:
# curl https://127.0.0.1:9200 -u admin:password -k

В качестве результата возвращается структура:

{
  "name" : "node1",
  "cluster_name" : "opensearch",
  "cluster_uuid" : "QuMQZc5qQj6cA0nUAR-h_Q",
  "version" : {
    "distribution" : "opensearch",
    "number" : "2.18.0",
    "build_type" : "tar",
    "build_hash" : "99a9a81da366173b0c2b963b26ea92e15ef34547",
    "build_date" : "2024-10-31T19:08:39.157471098Z",
    "build_snapshot" : false,
    "lucene_version" : "9.12.0",
    "minimum_wire_compatibility_version" : "7.10.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
}

На первый взгляд всё хорошо. Иду дальше.

Запуск сервиса через systemd.

Настраиваю запуск сервиса через systemd:
# touch /etc/systemd/system/opensearch.service

В файл добавляю:

[Unit]
Description=OpenSearch
Wants=network-online.target
After=network-online.target

[Service]
Type=forking
RuntimeDirectory=data
Environment="OPENSEARCH_JAVA_OPTS=-Xms4g -Xmx4g"

WorkingDirectory=/var/lib/opensearch
ExecStart=/var/lib/opensearch/bin/opensearch -d

User=opensearch
Group=opensearch
StandardOutput=journal
StandardError=inherit
LimitNOFILE=65535
LimitNPROC=4096
LimitAS=infinity
LimitFSIZE=infinity
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
TimeoutStartSec=75

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable opensearch.service
# systemctl start opensearch

Установка OpenSearch Dashboards.

Данный сервис предпочитаю устанавливать из пакета. Качаю со страницы https://opensearch.org/downloads.html ( прямая ссылка OpenSearch Dashboards DEB-package v.2.18 )

# cd cd /usr/local/src/Opensearch
# wget https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.18.0/opensearch-dashboards-2.18.0-linux-x64.deb
# dpkg -i ./opensearch-dashboards-2.18.0-linux-x64.deb

После завершения установки перезагружаю systemd, включаю автозапуск и стартую OpenSearch Dashboards:
# systemctl daemon-reload
# systemctl enable opensearch-dashboards.service
# systemctl start opensearch-dashboards.service

По умолчанию OpenSearch Dashboards слушает порт 5601 на локальном интерфейсе, для доступа снаружи требуется настроить реверс-прокси на базе nginx или в файле конфигурации /etc/opensearch-dashboards/opensearch_dashboards.yml прописать строку:
server.host: 0.0.0.0

В последнем случае доступ к веб-интерфейсу будет по адресу http://ИмяХоста:5601

Nicko

Добавить комментарий