#kubernetes
#kubernetes
Вопрос:
Я могу преобразовать имена модулей в ip-адреса внутри соответствующих контейнеров, например, если у меня вызван модуль elasticsearch-0
и я вхожу в контейнер через kubectl exec -it elasticsearch-0 bash
, я могу сделать следующее:
curl elasticsearch-0:9200
и получите ответ:
{
"name" : "OUvCoFL",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "1Vhf2-pGR0m3e4ezDRAZ0Q",
"version" : {
"number" : "6.1.0",
"build_hash" : "c0c1ba0",
"build_date" : "2017-12-12T12:32:54.550Z",
"build_snapshot" : false,
"lucene_version" : "7.1.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
Однако, если я попытаюсь сделать это из другого контейнера, например, kibana-0, произойдет сбой с:
curl: (6) Could not resolve host: elasticsearch-0; Name or service not known
Кто-нибудь знает, чего мне не хватает?
Спасибо
Комментарии:
1. У вас есть служба на месте?
2.
curl elasticsearch-0:9200
работал внутри этого контейнера. Потому чтоHOSTNAME
этим контейнером является elasticsearch. Мы должны использовать во всех контейнерах (across pods)service
. Для соединения между контейнерами (в одном модуле) мы можем использоватьlocalhost
для подключения.
Ответ №1:
Служба — это то, что вы ищете. Читать это
Модули могут быть настроены для взаимодействия со службой и знать, что обмен данными со службой будет автоматически распределен с балансировкой нагрузки на некоторый модуль, являющийся членом Службы.
Создайте службу:
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
labels:
app: elasticsearch
spec:
ports:
- port: 9200
protocol: TCP
selector:
app: elasticsearch
И получить доступ к сервису из любого модуля
curl http://elasticsearch:9200