Как настроить Eureka (и Kubernetes), чтобы микросервис (модуль) мог регистрироваться на сервере (модуле) eureka? - PullRequest
0 голосов
/ 06 мая 2020

Проблема :
Микросервис страны не может зарегистрироваться на сервере eureka (на панели инструментов eureka не отображается служба страны) при использовании kubernetes.

Сервер eureka настроен на localhost: 1111. Конфигурация страновой службы eureka настроена на порту 2222 и настроена для поиска localhost: 1111 / eureka для доступа к серверу eureka. В соответствующих развертываниях containerPort настроен на 1111 и 2222 соответственно. Соответствующие сервисы Kubernetes имеют NodePorts 30080 и 30081 соответственно.

Вопрос :
Как мне настроить Eureka и Kubernetes, чтобы служба страны регистрировалась на сервере eureka и Сервер eureka отслеживает службу страны?

Подробно

Подробнее :
Конфигурация приложения сервера регистрации eureka:

...
# Configure this Discovery Server
eureka:
  instance:
    hostname: localhost
...
server:
  port: 1111   # HTTP (Tomcat) port
...

Страна (микро) конфигурация сервиса / приложения eureka:

...
# HTTP Server
server.port: 2222   # HTTP (Tomcat) port
...
eureka:
  client:
    serviceUrl:
      defaultZone: http://${registration.server.hostname}:${registration.server.port}/eureka/
...
# Eureka server assumed to be on localhost:
registration.server.hostname: localhost
registration.server.port: 1111

Dockerfile содержит:

EXPOSE 1111
EXPOSE 2222

Приложение работает (микросервис страны может зарегистрироваться на сервере eureka и сервере eureka отслеживает микросервис страны), запустив его на моем локальном компьютере или с помощью docker -toolbox без проблем.

Я применяю развертывание reg go:

...
metadata:
  name: reggo
spec:
  ...
  template:
    ...
    spec:
     containers:
     - name: reggo
       ...
       ports:
       - containerPort: 1111

Когда я проверяю журнал модуля, сервер регистрации запускается правильно.

Reg go kubernetes Service:

...
metadata:
  name: reggo
  ...
spec:
  type: NodePort
  ports:
    - port: 1111
      nodePort: 30080
      name: reggo-port
  ...

Из браузера я могу достичь Эврика дас hboard, выполнив:

  • minikube: 30080
  • [minikubeNodeIP]: 30080

[minikubeNodeIP] можно найти из kubectl describe node.

Я применяю развертывание по стране следующим образом:

...
metadata:
  name: country
spec:
  ...
  template:
    ...
    spec:
     containers:
     - name: country
       ...
       ports:
       - containerPort: 2222

Когда я проверяю журнал модуля, сервер регистрации запускается правильно.

Reg go kubernetes Service:

...
metadata:
  name: country
  ...
spec:
  type: NodePort
  ports:
    - port: 2222
      nodePort: 30081
      name: country-port
  ...

Я получаю ожидаемый результат, когда пытаюсь:

  • minikube: 30081 / countries / getAll
  • [minikubeNodeIP]: 30081 / countries / getAll

localhost: 1111 и localhost: 2222 больше не работают из браузера, поскольку для кубернетов мне нужна служба для доступа к ним, что понятно.

Больше проблем insights :

В журнале для модуля страны указано:

WARN RetryableEurekaHttpClient - Выполнение запроса завершилось ошибкой с сообщением: java. net .ConnectException: соединение отклонено ( В соединении отказано)

ERROR DiscoveryClient - DiscoveryClient_COUNTRY-SERVICE / country-7b9687b56 c -pnx8f: country-service: 2222 - не удалось отправить сердцебиение!

Когда я пытаюсь проверить связь из модулей У меня есть следующее:
Поды могут видеть ожидаемый результат при использовании своих локальных и локальных (целевых) портов:

$ kubectl exec -it reggo-6f6cf5cfc9-gnzh8 -- curl localhost:1111
{...expected output...}
$ kubectl exec -it country-5c49fb76c-9t86v -- curl localhost:2222
{...expected output...}

Поды, похоже, не могут связываться с другим модулем, обращаясь через localhost и соответствующий (целевой) порт (поскольку localhost транслируется по-разному для каждого модуля):

$ kubectl exec -it reggo-6f6cf5cfc9-gnzh8 -- curl localhost:2222
curl: (7) Failed to connect to localhost port 2222: Connection refused
command terminated with exit code 7
$ kubectl exec -it country-5c49fb76c-9t86v -- curl localhost:1111
curl: (7) Failed to connect to localhost port 1111: Connection refused
command terminated with exit code 7

Кажется, они не достигают друг друга, взаимодействуя как внешний объект (с помощью [minikubeNodeIP]: [ServiceNodePort] комбинация):

$ kubectl exec -it reggo-6f6cf5cfc9-gnzh8 -- curl 192.168.99.101:30081
curl: (7) Failed to connect to 192.168.99.101 port 30081: Connection refused
command terminated with exit code 7
$ kubectl exec -it country-5c49fb76c-9t86v -- curl 192.168.99.101:30080
curl: (7) Failed to connect to 192.168.99.101 port 30080: Connection refused
command terminated with exit code 7

Согласно сети кластера kubernetes ,

модули на узле могут связываться со всеми модулями на всех узлах без NAT

, чтобы модули могли находить друг друга.

Что я пробовал

Я попытался настроить службу Kubernetes для каждого модуля в соответствии с Предложение Стефана безуспешно (проверьте ниже).

Настройка Eureka с именем хоста = minikube и портами 30080 и 30081 вместо 1111 и 2222

Стручок Эврика Я даже не получил доступ к собственному приложению (панель управления Eureka) из модуля:

$ kubectl exec -it reggo-5c64bcdc55-dlpxg -- curl minikube:1111
curl: (6) Could not resolve host: minikube
command terminated with exit code 6
$ kubectl exec -it reggo-5c64bcdc55-dlpxg -- curl 192.168.99.101:1111                                                                                                           curl: (7) Failed to connect to 192.168.99.101 port 1111: Connection refused
command terminated with exit code 7
$ kubectl exec -it reggo-5c64bcdc55-dlpxg -- curl 192.168.99.101:30080
curl: (7) Failed to connect to 192.168.99.101 port 30080: Connection refused
command terminated with exit code 7
$ kubectl exec -it reggo-5c64bcdc55-dlpxg -- curl 192.168.99.101:8761
curl: (7) Failed to connect to 192.168.99.101 port 8761: Connection refused
command terminated with exit code 7

Настройка Eureka с hostname = localhost и портами 30080 и 30081 вместо 1111 и 2222

Служба страны по-прежнему не зарегистрирована, хотя я мог получить доступ к панели управления Eureka из модулей:

$ kubectl exec -it reggo-5c64bcdc55-dnj8b -- curl localhost:30080  
$ kubectl exec -it country-5bc9c7b767-wt748 -- curl localhost:30080

Все команды kubectl exec -it country-5bc9c7b767-wt748 -- curl заканчиваются сообщением «В соединении отказано», за исключением countryServiceIP: 30081, который заканчивается «Время ожидания соединения истекло».
Страна kubernetes Service имеет для конечных точек.
Я не могу подключиться к какой-либо комбинации хост: порт из браузера (хост: minikube, [minikubeNodeIP], localhost; порт: 1111, 2222, 30080, 30081).

...