Проблема :
Микросервис страны не может зарегистрироваться на сервере 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).