Инструкция по ручному развертыванию OpenSearch учетных данных
Введение
OpenSearch кластер использует HTTP Basic Auth для аутентификации. В штатном режиме учетные данные конфигурируются через Terraform, но в некоторых случаях (тестирование, аварийное восстановление) может потребоваться вручную задать учетные данные для подключения к кластеру.
Обзор кластера
| Параметр | Значение |
|---|---|
| Название кластера | opensearch-mini |
| URL | https://rc1d-ecamgl4rt4sgudef.mdb.yandexcloud.net:9200 |
| Версия | 1.x |
| Пользователь | admin |
| Password | из secrets (ossadmin_passwd) |
| Окружение | PRODUCTION |
Параметры подключения
| Параметр | Значение | Источник |
|---|---|---|
| URL | https://rc1d-ecamgl4rt4sgudef.mdb.yandexcloud.net:9200 | Terraform output |
| User | admin | Terraform конфигурация |
| Password | ossadmin_passwd | Yandex 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)