Кубернетес - не могу свернуться в сервис, но я могу в стручок - PullRequest
0 голосов
/ 08 марта 2019

У меня есть Elasticsearch Pod и Сервис. У меня также есть еще один Pod (то же пространство имен - по умолчанию) под названием «website», который хочет получить html-контент Elasticsearch (используя curl).

Когда я захожу в Pod веб-сайта (используя 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-адрес службы эластичного поиска.

Но когда я запускаю $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.

Это ямл Стручка:

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"

Это вид службы:

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

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

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

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

0 голосов
/ 08 марта 2019

Вам необходимо пометить свой модуль с помощью app :asticsearch из-за выбора в определении службы: selector: app: elasticsearch

Редактировать: в официальных документах 1007 *

есть довольно хорошее объяснение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...