У меня есть Elasticsearch Pod и служба. У меня также есть еще один Pod (то же самое пространство имен — по умолчанию), который называется «веб-сайт», который хочет получить html-контент Elasticsearch (используя curl).
Когда я получаю доступ к поду «веб-сайт» (используя exec) и запускаю $curl -v elasticsearch-service, я получаю:
curl -v elasticsearch-service
* Rebuilt URL to: elasticsearch-service/
* Trying 10.111.159.30...
* TCP_NODELAY set
примечание: 10.111.159.30 — это IP-адрес службы elasticsearch.
Но когда я запускаю $curl 172.15.0.5:9200 (IP-адрес POD), я получаю правильный вывод:
$curl 172.15.0.5:9200
{
"name" : "1X7ZARS",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "V8GX-5STSoW_PJ8Qguu7Jw",
"version" : {
"number" : "6.6.1",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "1fd8f69",
"build_date" : "2019-02-13T17:10:04.160291Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
По какой-то причине служба Elasticsearch не перенаправляется в приложение els.
Это yaml Pod:
apiVersion: v1
kind: Pod
metadata:
name: elasticsearch
spec:
containers:
- name: elasticsearch
image: yageldhn/els-java8:6.6.1
ports:
- containerPort: 9200
- containerPort: 9300
env:
- name: discovery.type
value: "single-node"
Это yaml сервиса:
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-service
spec:
ports:
- port: 9200
name: serving
protocol: TCP
- port: 9300
name: node2node
protocol: TCP
selector:
app: elasticsearch
Я новичок в K8s, что я сделал не так?
Да, я пробовал, прежде чем задавать вопрос, тот же результат. Извините не правильно написал.
Вам нужно пометить свой модуль приложение: эластичный поиск из-за селектора в вашем определении службы:
selector:
app: elasticsearch
Обновлено: в официальном документы есть довольно хорошее объяснение.
Не уверен, почему это не было отмечено как принятый ответ. Кто-то даже минусовал? Они пытаются отменить тебя, братан! Я дал вам голос, так что теперь вы вернулись к 0.
Как видно из вашего файла службы yaml, вы добавили
selector:
app: elasticsearch
который будет искать app: elasticsearch совпадающие метки для создания конечных точек. Вам нужно пометить свой модуль, как показано ниже:
apiVersion: v1
kind: Pod
metadata:
name: elasticsearch
labels:
app: elasticsearch # Should match with service selector
spec:
containers:
- name: elasticsearch
image: yageldhn/els-java8:6.6.1
ports:
- containerPort: 9200
- containerPort: 9300
env:
- name: discovery.type
value: "single-node"
Тогда, если вы запустите
kubectl get endpoints elasticsearch-service
Вы увидите, что конечные точки, созданные для ваших приложений
NAME ENDPOINTS AGE
elasticsearch-service 172.17.0.3:9200,172.17.0.3:9300 1m
Для получения дополнительной информации проверьте этот документация
Я не очень хорошо разбираюсь в curl, но если вы не установите порт для команды curl, я думаю, она попытается использовать порт 8080. А у вашего сервиса выставляете elasticsearch на порт 9200 нет? Вы пробовали curl -v elasticsearch-service:9200?