Skip to main content
Version: 1.12-grodno (current)

Инструкция по ручному развертыванию OpenSearch учетных данных

Введение

OpenSearch кластер использует HTTP Basic Auth для аутентификации. В штатном режиме учетные данные конфигурируются через Terraform, но в некоторых случаях (тестирование, аварийное восстановление) может потребоваться вручную задать учетные данные для подключения к кластеру.

Обзор кластера

ПараметрЗначение
Название кластераopensearch-mini
URLhttps://rc1d-ecamgl4rt4sgudef.mdb.yandexcloud.net:9200
Версия1.x
Пользовательadmin
Passwordиз secrets (ossadmin_passwd)
ОкружениеPRODUCTION

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

ПараметрЗначениеИсточник
URLhttps://rc1d-ecamgl4rt4sgudef.mdb.yandexcloud.net:9200Terraform output
UseradminTerraform конфигурация
Passwordossadmin_passwdYandex Lockbox

Аутентификация

OpenSearch использует HTTP Basic Auth. Для подключения передайте учетные данные в заголовке Authorization:

Authorization: Basic YWRtaW46cGFzc3dvcmQ=

Где YWRtaW46cGFzc3dvcmQ= - это base64 кодирование строки admin:password.

Структура YAML манифеста (для хранения в Kubernetes)

apiVersion: v1
kind: Secret
metadata:
name: opensearch-credentials
namespace: prod
type: Opaque
data:
host: cmMxZC1lY21sZzRydDRzZ3VkZWYubWRiLnltYW5kLmNsb3VkLm5ldA==
port: OjIwMA==
user: YWRtaW4=
password: <base64-encoded-password>

Пошаговая инструкция ручного создания

Шаг 1: Получите пароль администратора из Yandex Lockbox

yc lockbox secret get --name <lockbox-name> --format text

Или используйте terraform state для получения пароля:

terraform state show data.yandex_lockbox_secret_version.referenced

Шаг 2: Получите URL кластера

terraform state show module.opensearch_mini.yandex_mdb_opensearch_cluster.this

Или используйте DNS-имя кластера из output-ов Terraform:

terraform output opensearch_url

Шаг 3: Закодируйте учетные данные в base64

Для заголовка Authorization:

echo -n "admin:<password>" | base64

Для хранения в Kubernetes secret:

# Host (URL without protocol)
echo -n "rc1d-ecamgl4rt4sgudef.mdb.yandexcloud.net" | base64

# Port (9200)
echo -n "9200" | base64

# User
echo -n "admin" | base64

# Password
echo -n "<password>" | base64

Шаг 4: Создайте YAML манифест

Создайте файл opensearch-secret.yaml:

apiVersion: v1
kind: Secret
metadata:
name: opensearch-credentials
namespace: prod
type: Opaque
data:
host: cmMxZC1lY21sZzRydDRzZ3VkZWYubWRiLnltYW5kLmNsb3VkLm5ldA==
port: OjIwMA==
user: YWRtaW4=
password: <base64-encoded-password>

Шаг 5: Примените секрет в кластере

kubectl apply -f opensearch-secret.yaml

Проверьте создание:

kubectl get secret opensearch-credentials -n prod
kubectl get secret opensearch-credentials -n prod -o yaml

Проверка подключения

После создания можно проверить доступ к OpenSearch:

С использованием curl

# Получить пароль из секрета
PASSWORD=$(kubectl get secret opensearch-credentials -n prod -o jsonpath='{.data.password}' | base64 -d)

# Проверить подключение
curl -u "admin:$PASSWORD" https://rc1d-ecamgl4rt4sgudef.mdb.yandexcloud.net:9200/_cluster/health?pretty

С использованием kubectl port-forward для локального доступа

# Установите port-forward (если кластер не доступен извне)
kubectl port-forward svc/opensearch 9200:9200 -n prod &

# Проверить подключение
curl -u "admin:$PASSWORD" http://localhost:9200/_cluster/health?pretty

С использованием Python

# Проверить подключение через Python
python3 << EOF
import base64
import requests

password = "$(kubectl get secret opensearch-credentials -n prod -o jsonpath='{.data.password}' | base64 -d)"
url = "https://rc1d-ecamgl4rt4sgudef.mdb.yandexcloud.net:9200/_cluster/health"
auth = ("admin", password)

response = requests.get(url, auth=auth, verify=True)
print(response.json())
EOF

Предупреждения

  • Не рекомендуется для production-среды - используйте Terraform развертывание
  • HTTPS - всегда используйте HTTPS для подключения к OpenSearch
  • Бэкапы - не забудьте обновитьterraform state файлы при ручном создании секретов
  • Секреты - никогда не храните пароли в открытом виде в файловой системе
  • Namespace - убедитесь, что секрет создается в правильном namespace (prod для production)