Как получить доступ к нескольким развернутым службам (приложение Spring Boot) в Google Kubernetes?

Я создал 2 простых весенних загрузочных приложения и развернул их в Google Kubernetes с помощью контейнера докеров, перейдя по этой ссылке: Развертывание весенней загрузки в Kubernetes

Теперь, когда я запускаю kubectl get services, я вижу в списке 2 службы (приложения для загрузки Spring)!

Я понимаю, что с помощью expose я могу зарезервировать статический IP для сервисов! Но мне нужно ** мне нужно получить доступ к двум службам с использованием единого IP ** (аналогично маршрутизации), чтобы конечному пользователю было известно только об одном IP-адресе для мультисервисов! Как я мог этого добиться? Я новичок в этом! Пожалуйста помоги..

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
2
0
457
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Самый простой способ получить доступ к вашим услугам публично, используя один и тот же IP-адрес, - это использовать ресурсы ingress-controller и Ingress. Это позволит вам использовать имена хостов на основе DNS и / или сопоставление путей для доступа к каждой службе индивидуально.

У меня есть простой в использовании стартовый репозиторий, который я рекомендую вам использовать для начала. Просто выполните следующие команды:

Установите Ingress-контроллер:

$ git clone https://github.com/mateothegreat/k8-byexamples-ingress-controller
$ cd k8-byexamples-ingress-controller
$ git submodule update --init

$ make install LOADBALANCER_IP=<your static ip here>

Создайте свой ресурс Ingress:

$ make issue HOST=<your dns hostname> SERVICE_NAME=<your service> SERVICE_PORT=<the service port>

Вы можете повторять этот последний шаг столько раз, сколько вам нужно. Для получения дополнительной информации вы можете перейти на https://github.com/mateothegreat/k8-byexamples-ingress-controller.

LOADBALANCER_IP = <ваш статический IP-адрес> здесь я должен указать статический IP-адрес? но у меня есть 2 приложения для весенней загрузки в качестве сервисов, и у каждого из них есть статические IP-адреса, которые я должен предоставить? поведение приложения похоже на REST API. И у меня есть только IP без DNS-имени, так что я должен указать в HOST = "?"

Dillz 29.10.2018 09:17

Хорошо, в этом случае просто установите тип ваших услуг на type: LoadBalancer

yomateo 29.10.2018 09:19
kubectl expose deployment hello-java-1 --type=LoadBalancerkubectl expose deployment hello-java-2 --type=LoadBalancer Я представил развертывание как балансировщик нагрузки. Но как я могу затем направлять запросы к обеим службам, используя один IP-адрес?
Dillz 29.10.2018 09:22

Вы можете использовать одну службу с несколькими портами. Затем вы можете убедиться, что ваши два модуля развертывания имеют те же метки, что и служба, и вы сможете подключаться к своим службам индивидуально через соответствующий порт.

yomateo 29.10.2018 09:24

Таким образом, мы не могли получить доступ к двум сервисам, таким как <IP ADDRESS>/service1/ и <IP ADDRESS>/service2/.

Dillz 29.10.2018 09:29

Нет .. потому что Service не имеет представления о пути вашего URL. Это то, что делает Ingress.

yomateo 29.10.2018 09:32

Итак, как я могу добиться этого с помощью Ingress?

Dillz 29.10.2018 09:34

См. Мой исходный ответ. Это объясняет это просто для вас. Вместо использования имени хоста игнорируйте эту часть и просто используйте свой IP-адрес / путь123 при доступе к вашей службе.

yomateo 29.10.2018 09:40

Как я уже упоминал выше, я представил 2 развертывания как Loadbalancer, будет ли ваше решение работать и в этом случае?

Dillz 29.10.2018 09:59

Измените обе службы на 'type: NodePort' вместо LoadBalancer (kubectl edit svc [имя службы]), затем вы можете настроить использование входящего ресурса, используя один IP-адрес, как упоминалось в yomateo. Вы не можете использовать 2 отдельных ресурса и назначить им один статический IP-адрес, GCP этого не позволит.

Patrick W 31.10.2018 19:29
Ответ принят как подходящий

Вы можете использовать ресурс GCE Ingress, чтобы обе службы использовались как серверные.

Как упоминалось в комментарии Патрика выше, преобразуйте обе службы в тип: NodePort вместо LB. Убедитесь, что порт узла был выделен.

kubectl get service web

а затем создать вход с 2 путями хоста.

Следующий документация поможет вам начать работу:

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