¿Cómo habilito el acceso / solicitud remotos en Elasticsearch 2.0?

97

A partir de v2.0, Elasticsearch solo escucha en localhost de forma predeterminada, pero me gustaría hacer una solicitud fuera de localhost.

Por ejemplo, se permite una solicitud como esta:

http://localhost:9200/

Pero esto no es:

http://server_name:9200/ (desde fuera del servidor, por ejemplo: una computadora local en la misma LAN).

Gracias por tu ayuda.

Abraham Duran
fuente
6
Esta es la respuesta que está buscando: stackoverflow.com/questions/33412549/…
Val
¡Gracias! ¡Era exactamente lo que estaba buscando!
Abraham Duran

Respuestas:

152

En config/elasticsearch.ymlponer

network.host: 0.0.0.0
arsent
fuente
3
network.host: 0.0.0.0 permite que todas las redes locales accedan a este nodo. Esto no se recomienda para el modo de producción, supongo.
Isengo
1
significa que se permiten todas las direcciones IP. ¡No es seguro!
Yavuz
1
El archivo en mi sistema CentOS se encontró /etc/elasticsearch/elasticsearch.ymly su contenido:network.host: ["0.0.0.0"]
AlikElzin-kilaka
no funciona para mí. ES todavía se está ejecutando en 127.0.0.1T_T
E.Big
Para aquellos que no pueden ubicar el archivo de configuración en Windows, verifique la C:\ProgramData\Elastic\Elasticsearch\configubicación. Si desea conectarse mediante programación a Elasticsearch, es posible que deba configurar transport.host: 0.0.0.0en elasticsearch.ymlfile.
kojot
59

Por defecto, el transporte http y el transporte interno de elasticsearch solo escucha localhost. Si desea acceder a Elasticsearch desde el host que no sea localhost, intente agregar las siguientes configuraciones en config / elasticsearch.yml .

transport.host: localhost 
transport.tcp.port: 9300 
http.port: 9200
network.host: 0.0.0.0

Aquí, network.host como 0.0.0.0 permite el acceso desde cualquier host dentro de la red.

Ajit K'sagar
fuente
2
Tuve que establecer explícitamente todos esos valores para poder conectarme desde la máquina host de VirtualBox, ir como invitado con elástico. ¡Muchas gracias!
Tom
Probado en Elasticsearch 7.1.0: las soluciones funcionan bien al conectarse a ES en VirtualBox.
DB Prasad
La configuración anterior también funciona con la versión de búsqueda elástica 7.2.0 :-)
dinu0101
2
Casi todos los meses vengo aquí para copiar esta configuración: D
Neelesh
gracias esto me ayudó un montón. Estaba luchando con un problema de excepción de conexión; y finalmente lo hizo funcionar después de agregar estas líneas en el elasticsearch.ymlarchivo
Spencer Trinh
19

Cambie el nombre del archivo elasticsearch.yml a elasticsearch.json dentro de la carpeta de configuración y agregue:

{
    "network" : {
        "host" : "10.0.0.4"
    }
}

Otra opción es proporcionar la configuración externamente usando ES_JAVA_OPTS o como parámetros para el comando elasticsearch, por ejemplo:

$ elasticsearch -Des.network.host=10.0.0.4

Otra opción es configurar es.default. prefijo en lugar de es. prefijo, lo que significa que la configuración predeterminada se utilizará solo si no se establece explícitamente en el archivo de configuración.

Otra opción es usar la ${...}notación dentro del archivo de configuración que se resolverá en una configuración del entorno, por ejemplo:

{
    "network" : {
        "host" : "${ES_NET_HOST}"
    }
}

La ubicación del archivo de configuración se puede establecer externamente mediante una propiedad del sistema:

$ elasticsearch -Des.config=/path/to/config/file

Para obtener más información, consulte https://www.elastic.co/guide/en/elasticsearch/reference/1.4/setup-configuration.html

Deepika Chalpe
fuente
Obtenido: Excepción en el hilo "principal" BindTransportException [No se pudo enlazar a [9300-9400]]; anidado: ChannelException [No se pudo enlazar a: /10.0.0.4:9400]
mountrix
2
¿Cómo se puede hacer esto? Quiero decir, no podemos simplemente cambiar el nombre elasticsearch.ymla elasticsearch.jsonporque el primero, hmmm, YAML y el segundo es JSON??
Shubham A.
9

Como mencionó @arsent, agregue esa dirección IP al archivo de configuración:

sudo nano /etc/elasticsearch/elasticsearch.yml

Jay también agregó un punto importante: si está utilizando un firewall, recuerde agregar una regla que permita el tráfico a ese puerto.

Si desea permitir que un servidor maestro acceda a ES a través de http, agregue una regla que permita el acceso solo desde esa dirección en particular. Por ejemplo, digamos que está usando ufw, luego ejecute este comando para agregar su puerto:

sudo ufw allow from xxx.xxx.xxx.xxx to any port zzzz

Reemplace xxx.xxx.xxx.xxx con la dirección IP de su servidor maestro y zzzz con el puerto que configuró en config/elasticsearch.yml

Se recomienda utilizar un puerto personalizado y no mantener el 9200 predeterminado

Para probarlo, ingrese SSH en su servidor maestro y haga ping a la IP de ES con el puerto correcto para ver si obtiene una respuesta:

curl -X GET 'http://xxx.xxx.xxx.xxx:zzzz'

También puede verificar que ES sea inaccesible desde otras direcciones IP probándolo con su navegador.

Hay un excelente artículo que muestra cómo configurar ES en Ubuntu en DigitalOcean

Ben
fuente
7

En /etc/elasticsearch/elasticsearch.yml establezca el siguiente valor:

network.host: [ localhost, _site_ ]

Esta opción le permite acceder tanto desde el host local como desde todas las computadoras de la red local (192.168.XX), pero no desde el exterior.
Lea más sobre esta y otras opciones lea la documentación

Mentor
fuente
7

En la máquina remota donde está instalado elasticsearch, simplemente agregue las dos configuraciones siguientes en /etc/elasticsearch/elasticsearch.yml

network.host: xx.xx.xx.xx #remote elastic machine's internal IP
discovery.type: single-node

Probado en elasticsearch 6.8.3 y AWS EC2 Linux AMI como máquina remota

Animesh
fuente
5

En /etc/elasticsearch/elasticsearch.yml:

network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0
Ngô Thành Phát
fuente
2

Reemplace localhost con 0.0.0.0 en dos lugares.

  1. Goto /etc/elasticsearch/elasticsearch.yml. Busque valor en network.host y cámbielo a 0.0.0.0

  2. Este es el paso si está utilizando Kibana. Goto /etc/kibana/kibana.yml. Busque el valor en server.host y cámbielo a 0.0.0.0

Ahora accede de forma remota con la dirección IP y el host.

bikram
fuente
Es importante agregar los siguientes comandos: ufw allow 9200 y ufw allow 5601
José T.
1

En config/elasticsearch.yml, poner network.host: 0.0.0.0como dijo @arsent. Y también agregue la regla de entrada en el firewall para su puerto ElasticSearch (9200 por defecto).

Funcionó en ElasticSearch versión 2.3.0

Jay Shah
fuente
1

Para ElasticSearch 7.8 y versiones posteriores

Compruebe si está en un solo nodo. agregar la siguiente línea

cluster.initial_master_nodes: node-1

Para acceder al servidor Elasticsearch desde otra computadora o aplicación, realice los siguientes cambios en el nodo C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml file:

Agregar las siguientes líneas

network.host: ["0.0.0.0", 127.0.0.1", "[::1]"]
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0
http.host: 0.0.0.0

En algún momento, es posible que deba habilitar CORS

http.cors.enabled : true
http.cors.allow-origin : "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type, Content-Length

Aquí está mi archivo yml completo

bootstrap.memory_lock: false
cluster.name: elasticsearch
http.port: 9200
node.data: true
node.ingest: true
node.master: true
node.max_local_storage_nodes: 1
cluster.initial_master_nodes: node-1
node.name: ITDEV
path.data: C:\ProgramData\Elastic\Elasticsearch\data
path.logs: C:\ProgramData\Elastic\Elasticsearch\logs
transport.tcp.port: 9300
xpack.license.self_generated.type: basic
xpack.security.enabled: false
network.host: ["0.0.0.0", 127.0.0.1", "[::1]"]
network.bind_host: 0.0.0.0
network.publish_host: 0.0.0.0
http.host: 0.0.0.0
http.cors.enabled : true
http.cors.allow-origin : "*"
http.cors.allow-methods : OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers : X-Requested-With,X-Auth-Token,Content-Type, Content-Length
Kaleem Ullah
fuente
0

Aparte de establecer network.host : 0.0.0.0

puede ser necesario establecer los siguientes parámetros

node.name: elasticsearch-node-1

cluster.initial_master_nodes: ["elasticsearch-node-1"]

Todo el entorno entra elasticsearch/elasticsearch.yml

RootUser
fuente