Jak włączyć zdalny dostęp / żądanie w Elasticsearch 2.0?

97

Począwszy od wersji 2.0 Elasticsearch nasłuchuje domyślnie tylko na hoście lokalnym, ale chciałbym wysłać żądanie poza localhost.

Na przykład takie żądanie jest dozwolone:

http://localhost:9200/

Ale to nie jest:

http://server_name:9200/ (spoza serwera, np .: komputer lokalny w tej samej sieci LAN).

Dzięki za pomoc.

Abraham Duran
źródło
6
Oto odpowiedź, której szukasz: stackoverflow.com/questions/33412549/…
Val
Dzięki! To było dokładnie to, czego szukałem!
Abraham Duran

Odpowiedzi:

153

W config/elasticsearch.ymlskrócie

network.host: 0.0.0.0
arsent
źródło
3
network.host: 0.0.0.0 umożliwia wszystkim sieciom lokalnym dostęp do tego węzła. Chyba nie jest to zalecane w trybie produkcyjnym.
Isengo
1
oznacza to, że wszystkie adresy IP są dozwolone. Nie zabezpieczone!
Yavuz,
2
Plik w moim systemie CentOS został znaleziony w /etc/elasticsearch/elasticsearch.ymli zawartość:network.host: ["0.0.0.0"]
AlikElzin-kilaka
nie działa dla mnie. ES nadal działa na 127.0.0.1T_T
E.Big
Dla tych, którzy nie mogą zlokalizować pliku konfiguracyjnego w systemie Windows, sprawdź C:\ProgramData\Elastic\Elasticsearch\configlokalizację. Jeśli chcesz połączyć się programowo z Elasticsearch, może być konieczne ustawienie transport.host: 0.0.0.0w elasticsearch.ymlpliku.
kojot
60

Domyślnie transport HTTP i wewnętrzny transport elastycznego wyszukiwania nasłuchuje tylko na localhost. Jeśli chcesz uzyskać dostęp do Elasticsearch z hosta innego niż localhost, spróbuj dodać następujące konfiguracje w config / flexiblesearch.yml .

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

Tutaj network.host jako 0.0.0.0 zezwala na dostęp z dowolnego hosta w sieci.

Ajit K'sagar
źródło
2
Musiałem jawnie ustawić wszystkie te wartości, aby móc łączyć się z maszyną hosta VirtualBox, aby przejść jako gość z elastycznym. Dziękuję Ci bardzo!
Tom
Testowane na Elasticsearch 7.1.0 - rozwiązania działają dobrze łącząc się z ES na VirtualBox.
DB Prasad
Powyższa konfiguracja działa również z wersją wyszukiwania elastycznego
7.2.0
2
Prawie co miesiąc przychodzę tutaj, aby skopiować tę konfigurację: D
Neelesh,
dzięki to pomogło mi tonę. Walczyłem z problemem wyjątku połączenia; i wreszcie działało po dodaniu tych wierszy do elasticsearch.ymlpliku
Spencer Trinh
19

Zmień nazwę pliku flexiblesearch.yml na elastsearch.json w folderze config i dodaj:

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

Inną opcją jest udostępnienie ustawień zewnętrznie albo za pomocą ES_JAVA_OPTS, albo jako parametrów do polecenia elastsearch, na przykład:

$ elasticsearch -Des.network.host=10.0.0.4

Inną opcją jest ustawienie es.default. prefiks zamiast es. prefiks, co oznacza, że ​​domyślne ustawienie będzie używane tylko wtedy, gdy nie zostanie jawnie określone w pliku konfiguracyjnym.

Inną opcją jest użycie ${...}notacji w pliku konfiguracyjnym, która będzie oznaczać ustawienie środowiska, na przykład:

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

Lokalizację pliku konfiguracyjnego można ustawić zewnętrznie za pomocą właściwości systemowej:

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

Aby uzyskać więcej informacji, odwiedź https://www.elastic.co/guide/en/elasticsearch/reference/1.4/setup-configuration.html

Deepika Chalpe
źródło
Otrzymano: Wyjątek w wątku „głównym” BindTransportException [Nie udało się powiązać z [9300-9400]]; zagnieżdżone: wyjątek ChannelException [Nie udało się powiązać z: /10.0.0.4:9400]
mountrix
2
Jak to zrobić, to znaczy, nie możemy po prostu zmienić nazwy elasticsearch.ymlna, elasticsearch.jsonponieważ pierwsza, hmmm, YAML, a druga to JSON??
Shubham A.
9

Jak wspomniał @arsent, dodaj ten adres IP do pliku konfiguracyjnego:

sudo nano /etc/elasticsearch/elasticsearch.yml

Jay dodał również ważną kwestię - jeśli używasz zapory, pamiętaj, aby dodać regułę zezwalającą na ruch do tego portu.

Jeśli chcesz zezwolić serwerowi głównemu na dostęp do ES przez http, dodaj regułę zezwalającą na dostęp tylko z tego konkretnego adresu. Na przykład, powiedzmy, że używasz ufw, a następnie uruchom to polecenie, aby dodać swój port:

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

Zastąp xxx.xxx.xxx.xxx adresem IP swojego serwera głównego, a zzzz nazwą portu skonfigurowanego w config/elasticsearch.yml

Zaleca się użycie niestandardowego portu i nie zachowanie domyślnego 9200

Aby to przetestować, połącz się z serwerem głównym za pomocą protokołu SSH i wyślij polecenie ping na adres IP serwera ES z odpowiednim portem, aby sprawdzić, czy otrzymasz odpowiedź:

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

Możesz również sprawdzić, czy ES jest niedostępny z innych adresów IP, wypróbowując go w swojej przeglądarce.

Jest doskonały artykuł, który pokazuje, jak skonfigurować ES na Ubuntu na DigitalOcean

Ben
źródło
7

Na zdalnej maszynie, na której jest zainstalowana aplikacja Flexiblesearch, wystarczy dodać poniższe dwie konfiguracje w /etc/elasticsearch/elasticsearch.yml

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

Przetestowano na elastyfikatorze 6.8.3 i AWS EC2 Linux AMI jako zdalnej maszynie

Animesh
źródło
5

W /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
źródło
2

Zamień localhost na 0.0.0.0 w dwóch miejscach.

  1. Idź /etc/elasticsearch/elasticsearch.yml. Poszukaj wartości w network.host i zmień ją na 0.0.0.0

  2. To jest krok, jeśli używasz Kibany. Idź /etc/kibana/kibana.yml. Poszukaj wartości w server.host i zmień ją na 0.0.0.0

Teraz masz dostęp zdalny za pomocą adresu IP i hosta.

bikram
źródło
Ważne jest, aby dodać następujące polecenia: ufw allow 9200 i ufw allow 5601
José T.
1

W config/elasticsearch.ymlumieścić network.host: 0.0.0.0jako @arsent powiedział. Dodaj także regułę ruchu przychodzącego do zapory sieciowej dla portu ElasticSearch (9200 ByDefault).

Działało w ElasticSearch w wersji 2.3.0

Jay Shah
źródło
1

Dla ElasticSearch 7.8 i nowszych

Sprawdź, czy jesteś w jednym węźle. dodaj następujący wiersz

cluster.initial_master_nodes: node-1

Aby uzyskać dostęp do serwera Elasticsearch z innego komputera lub aplikacji, wprowadź następujące zmiany w węźle C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml file:

Dodaj następujące wiersze

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

Czasami może być konieczne włączenie mechanizmu 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

Oto mój pełny plik yml

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
źródło
0

Oprócz oprawy network.host : 0.0.0.0

może zajść potrzeba ustawienia następujących parametrów

node.name: elasticsearch-node-1

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

Wszystkie ustawienia wchodzą elasticsearch/elasticsearch.yml

RootUser
źródło
0

Korzystając z systemu Windows 10 i samodzielnej usługi Elasticsearch 7, umieszczając to w pliku flexiblesearch.yml rozwiązujemy problem:

network.host: 0.0.0.0 discovery.type: pojedynczy węzeł

Franco Fontana
źródło