Comment activer l’access / demande à distance dans Elasticsearch 2.0?

À partir de la version 2.0, Elasticsearch n’écoute que localhost par défaut, mais j’aimerais faire une demande en dehors de localhost.

Par exemple, une requête comme celle-ci est autorisée:

http://localhost:9200/

Mais ce n’est pas:

http://server_name:9200/ (depuis l’extérieur du serveur, par exemple: un ordinateur local sur le même réseau local).

Merci de votre aide.

Dans config/elasticsearch.yml mis

 network.host: 0.0.0.0 

Renommez le fichier elasticsearch.yml en fichier elasticsearch.json dans le dossier de configuration et ajoutez:

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

Une autre option consiste à fournir les parameters de manière externe, en utilisant ES_JAVA_OPTS ou en tant que parameters de la commande elasticsearch, par exemple:

$ elasticsearch -Des.network.host=10.0.0.4

Une autre option consiste à définir es.default. préfixe au lieu de es. préfixe, ce qui signifie que le paramètre par défaut sera utilisé uniquement s’il n’est pas défini explicitement dans le fichier de configuration.

Une autre option consiste à utiliser la notation ${...} dans le fichier de configuration pour la convertir en un paramètre d’environnement, par exemple:

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

L’emplacement du fichier de configuration peut être défini en externe à l’aide d’une propriété système:

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

Pour plus d’informations, consultez https://www.elastic.co/guide/en/elasticsearch/reference/1.4/setup-configuration.html

Par défaut, le transport http et le transport interne elasticsearch n’écoutent que localhost. Si vous souhaitez accéder à Elasticsearch à partir de l’hôte autre que localhost, essayez d’append les configurations suivantes dans config / elasticsearch.yml .

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

Ici, network.host en tant que 0.0.0.0 permet l’access depuis n’importe quel hôte du réseau.

Comme @arsent mentionné, ajoutez cette adresse IP au fichier de configuration:

 sudo nano /etc/elasticsearch/elasticsearch.yml 

Jay a également ajouté un point important: si vous utilisez un pare-feu, n’oubliez pas d’append une règle autorisant le trafic vers ce port.

Si vous souhaitez autoriser un serveur maître à accéder à ES via http, ajoutez une règle autorisant uniquement l’access à cette adresse particulière. Par exemple, disons que vous utilisez ufw, puis exécutez cette commande pour append votre port:

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

Remplacez xxx.xxx.xxx.xxx par votre adresse IP du serveur maître et zzzz par le port que vous avez configuré dans config/elasticsearch.yml

Il est recommandé d’utiliser un port personnalisé et de ne pas conserver la valeur par défaut 9200

Pour le tester, connectez-vous à SSH dans votre serveur maître et exécutez une commande ping sur l’ES avec le port approprié pour voir si vous obtenez une réponse:

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

Vous pouvez également vérifier que ES est inaccessible depuis d’autres adresses IP en l’essayant avec votre navigateur.

Il y a un excellent article qui montre comment configurer ES sur Ubuntu sur DigitalOcean

Dans /etc/elasticsearch/elasticsearch.yml :

 network.host: 0.0.0.0 network.bind_host: 0.0.0.0 network.publish_host: 0.0.0.0 

Dans config / elasticsearch.yml, mettez network.host: 0.0.0.0 en tant que @arsent. Et ajoutez également la règle entrante dans le pare-feu pour votre port ElasticSearch (9200 ByDefault). Cela a fonctionné dans la version 2.3.0 d’ElasticSearch