Kubernetes — не могу свернуть в Service, но могу в Pod

У меня есть 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, что я сделал не так?

Я не очень хорошо разбираюсь в curl, но если вы не установите порт для команды curl, я думаю, она попытается использовать порт 8080. А у вашего сервиса выставляете elasticsearch на порт 9200 нет? Вы пробовали curl -v elasticsearch-service:9200?

Pierre Mallet 08.03.2019 13:04

Да, я пробовал, прежде чем задавать вопрос, тот же результат. Извините не правильно написал.

Yagel 08.03.2019 13:36
0
2
3 372
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно пометить свой модуль приложение: эластичный поиск из-за селектора в вашем определении службы: selector: app: elasticsearch

Обновлено: в официальном документы есть довольно хорошее объяснение.

Не уверен, почему это не было отмечено как принятый ответ. Кто-то даже минусовал? Они пытаются отменить тебя, братан! Я дал вам голос, так что теперь вы вернулись к 0.

Jacob Roberts 26.09.2020 20:52
Ответ принят как подходящий

Как видно из вашего файла службы 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

Для получения дополнительной информации проверьте этот документация

Другие вопросы по теме