Kubernetes связь между модулями, используя REST - PullRequest
0 голосов
/ 12 января 2019

Прямо сейчас у меня есть такая архитектура:

          internet
             |
   [ IngressController ]
        |          |
   [ Ingress A] [ Ingress B]
   --|-----|--  --|-----|--
   [ Service A] [ Service B]
         |            |
     [ Pod A]     [ Pod B]

Таким образом, если Service A запрашивает данные у Service B, он использует full qualified name, например,

ResponseEntity<Object> response = restTemplate.exchange(host.com/serviceB, HttpMethod.POST, entity, Object.class);

Поскольку все они находятся в одном кластере, я бы попытался изменить архитектуру, чтобы улучшить связь между службами. Я представил что-то вроде этого:

          internet
             |
   [ IngressController ]
        |          |
   [ Ingress A] [ Ingress B]
   --|-----|--  --|-----|--
   [ Service A]-[ Service B]
         |            |
     [ Pod A]     [ Pod B]

Таким образом, службам будет разрешено запрашивать друг друга только по имени или как-то еще. Я просто не уверен, как это реализовать, используя REST-Services.

1 Ответ

0 голосов
/ 13 января 2019

Вам нужно позвонить Service B по DNS-имени Kubernetes , и оно должно подключаться напрямую, не проходя через вход.

Чтобы уточнить, Service A не говорит с Service B, а Pod A говорит с Service B, а Pod B говорит с Service A. Таким образом, если все модули и службы находятся в одном и том же Kubernetes namespace , вы можете связываться со службой с именем службы в качестве имени хоста, которое будет преобразовываться во внутренний IP-адрес службы, а затем пересылать трафик. к стручку.

Если бобы оказались в разных пространствах имен, вы бы связались с именем пространства имен, добавленным в сервис: <service-name>.<namespace-name> или с <service-name>.<namespace-name>.svc.cluster.local

Надеюсь, это поможет.

...