Passa al contenuto principale
Versione: 0.5.5

OpenSearch su Aruba Cloud

Distribuisci OpenSearch 2.x — la suite open-source guidata dalla community per la ricerca e l'analisi — su Aruba Cloud tramite Terraform e cloud-init. Distribuito tramite l'immagine Docker ufficiale con API REST protetta da TLS e password superutente admin configurata al momento del bootstrap.

Versione provider: arubacloud/arubacloud ~> 1.0 | Terraform: ≥ 1.9


Introduzione​

OpenSearch è il fork con licenza Apache 2.0 di Elasticsearch mantenuto da AWS e dalla community open-source. Fornisce ricerca full-text, analisi dei log e esplorazione dati in tempo reale su larga scala — senza problemi di licenza SSPL. Questo esempio distribuisce un'istanza OpenSearch single-node con:

  • OpenSearch 2.x tramite l'immagine Docker ufficiale
  • TLS abilitato sull'API REST (porta HTTPS 9200) — tutte le richieste API richiedono credenziali
  • Password superutente admin impostata al momento del bootstrap
  • Tuning del kernel vm.max_map_count=262144 applicato persistentemente
  • API REST sulla porta HTTPS 9200, limitata a admin_cidr

Nota su Elasticsearch: Se la licenza SSPL di Elastic non è un problema per il tuo caso d'uso, vedi l'esempio Elasticsearch in questo repository.


Panoramica dell'architettura​


Infrastruttura creata​

RisorsaPattern nomeDescrizione
arubacloud_projectos-prodContenitore progetto
arubacloud_vpcos-prod-vpcVirtual Private Cloud
arubacloud_subnetos-prod-subnetSubnet di base
arubacloud_securitygroupos-prod-vm-sgSecurity group
arubacloud_securityruleos-prod-vm-sshIngresso SSH
arubacloud_securityruleos-prod-vm-apiIngresso API REST TCP 9200
arubacloud_elasticipos-prod-vm-eipIP pubblico VM
arubacloud_blockstorageos-prod-bootDisco di avvio 100 GB (Performance)
arubacloud_keypairos-prod-keypairChiave pubblica SSH
arubacloud_cloudserveros-prod-vmCloudServer VM

Costo mensile stimato​

RisorsaSpecificheCosto/mese stimato
CloudServer VMCSO8A16 — 8 vCPU / 16 GB~€55
Disco di avvio100 GB Performance~€15
Elastic IP—~€3
Totale~€73/mese

Requisiti​

  • Terraform ≥ 1.9
  • ArubaCloud Terraform Provider ~> 1.0
  • Un account ArubaCloud con credenziali API OAuth2
  • Una coppia di chiavi SSH

Variabili​

Obbligatorie​

VariabileDescrizione
arubacloud_client_idClient ID OAuth2 ArubaCloud
arubacloud_client_secretClient secret OAuth2 ArubaCloud
ssh_public_keyContenuto della chiave pubblica SSH
admin_passwordPassword per l'utente admin (8+ caratteri, maiuscole + minuscole + cifra + speciale)

Opzionali​

VariabileDefaultDescrizione
app_name"os"Nome breve usato in tutti i nomi delle risorse
environment"prod"Etichetta ambiente
location"ITBG-Bergamo"Regione ArubaCloud
zone"ITBG-1"Zona di disponibilità
billing_period"Hour""Hour" o "Month"
vm_flavor"CSO8A16"Flavor CloudServer
vm_image"LU22-001"Immagine disco di avvio (Ubuntu 22.04 LTS)
vm_disk_size_gb100Dimensione disco di avvio in GB (min 50 GB)
ssh_cidr"0.0.0.0/0"CIDR per SSH
admin_cidr"0.0.0.0/0"CIDR per la porta API REST 9200 — limita sempre
cluster_name"opensearch"Nome cluster OpenSearch
opensearch_version"2"Tag immagine Docker OpenSearch

Output​

OutputDescrizione
opensearch_urlURL API REST OpenSearch (HTTPS)
vm_public_ipIndirizzo IP pubblico della VM
ssh_commandComando SSH per connettersi alla VM
health_checkComando curl per verificare lo stato del cluster

Istruzioni di distribuzione​

1. Clona e naviga​

git clone https://github.com/arubacloud/terraform-arubacloud-examples.git
cd terraform-arubacloud-examples/opensearch

2. Configura le variabili​

cp terraform.tfvars.example terraform.tfvars

Imposta la password e limita l'accesso API ai tuoi server applicativi:

admin_password = "Change-Me-1!" # deve soddisfare i requisiti di complessità
admin_cidr = "10.0.0.0/8" # CIDR del tuo server applicativo
ssh_cidr = "203.0.113.42/32"

3. Distribuisci​

terraform init
terraform plan
terraform apply

Il bootstrap richiede circa 3–5 minuti (pull immagine Docker + inizializzazione OpenSearch).

4. Verifica​

curl -ku admin:<tua-password> \
"$(terraform output -raw opensearch_url)/_cluster/health?pretty"

Output atteso:

{
"cluster_name" : "opensearch",
"status" : "green",
"number_of_nodes" : 1,
...
}

Connessione di OpenSearch Dashboards​

Per visualizzare e interrogare i dati, distribuisci OpenSearch Dashboards separatamente e puntalo a questa istanza:

# opensearch_dashboards.yml
opensearch.hosts: ["https://<os-ip>:9200"]
opensearch.username: "kibanaserver"
opensearch.password: "<kibanaserver-password>"
opensearch.ssl.verificationMode: none

Raccomandazioni di sicurezza​

  1. Limita sempre admin_cidr. OpenSearch non ha limitazione della velocità sull'autenticazione — aprire la porta 9200 a 0.0.0.0/0 espone i tuoi dati ad attacchi di credential stuffing.

  2. Usa ruoli dedicati. Non usare il superutente admin per le connessioni delle applicazioni. Crea un ruolo con privilegi minimi:

    curl -ku admin:<password> -X PUT \
    "https://<ip>:9200/_plugins/_security/api/roles/app_role" \
    -H "Content-Type: application/json" \
    -d '{"index_permissions":[{"index_patterns":["app-*"],"allowed_actions":["read","write","create_index"]}]}'
  3. Considera un reverse proxy. Posiziona un reverse proxy NGINX o Caddy (in questo repository) davanti a OpenSearch per centralizzare il logging degli accessi e la gestione dei certificati TLS.


Risoluzione dei problemi​

Container OpenSearch non si avvia​

docker logs opensearch
# Causa comune: vm.max_map_count insufficiente
cat /proc/sys/vm/max_map_count # dovrebbe essere 262144
# Causa comune: la password non soddisfa i requisiti di complessità (8+ caratteri, maiusc+minusc+cifra+speciale)

Impossibile connettersi all'API REST​

# Verifica che il container sia in esecuzione
docker ps
# Controlla il binding della porta
ss -tlnp | grep 9200
# Testa localmente (dalla VM)
curl -ku admin:<password> https://localhost:9200/_cluster/health

Riferimenti​