Я создал 2 простых весенних загрузочных приложения и развернул их в Google Kubernetes с помощью контейнера докеров, перейдя по этой ссылке: Развертывание весенней загрузки в Kubernetes
Теперь, когда я запускаю kubectl get services
, я вижу в списке 2 службы (приложения для загрузки Spring)!
Я понимаю, что с помощью expose я могу зарезервировать статический IP для сервисов! Но мне нужно ** мне нужно получить доступ к двум службам с использованием единого IP ** (аналогично маршрутизации), чтобы конечному пользователю было известно только об одном IP-адресе для мультисервисов! Как я мог этого добиться? Я новичок в этом! Пожалуйста помоги..
Самый простой способ получить доступ к вашим услугам публично, используя один и тот же 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.
Хорошо, в этом случае просто установите тип ваших услуг на type: LoadBalancer
kubectl expose deployment hello-java-1 --type=LoadBalancer
kubectl expose deployment hello-java-2 --type=LoadBalancer
Я представил развертывание как балансировщик нагрузки. Но как я могу затем направлять запросы к обеим службам, используя один IP-адрес?
Вы можете использовать одну службу с несколькими портами. Затем вы можете убедиться, что ваши два модуля развертывания имеют те же метки, что и служба, и вы сможете подключаться к своим службам индивидуально через соответствующий порт.
Таким образом, мы не могли получить доступ к двум сервисам, таким как <IP ADDRESS>/service1/
и <IP ADDRESS>/service2/
.
Нет .. потому что Service
не имеет представления о пути вашего URL. Это то, что делает Ingress
.
Итак, как я могу добиться этого с помощью Ingress?
См. Мой исходный ответ. Это объясняет это просто для вас. Вместо использования имени хоста игнорируйте эту часть и просто используйте свой IP-адрес / путь123 при доступе к вашей службе.
Как я уже упоминал выше, я представил 2 развертывания как Loadbalancer, будет ли ваше решение работать и в этом случае?
Измените обе службы на 'type: NodePort' вместо LoadBalancer (kubectl edit svc [имя службы]), затем вы можете настроить использование входящего ресурса, используя один IP-адрес, как упоминалось в yomateo. Вы не можете использовать 2 отдельных ресурса и назначить им один статический IP-адрес, GCP этого не позволит.
Вы можете использовать ресурс GCE Ingress, чтобы обе службы использовались как серверные.
Как упоминалось в комментарии Патрика выше, преобразуйте обе службы в тип: NodePort вместо LB. Убедитесь, что порт узла был выделен.
kubectl get service web
а затем создать вход с 2 путями хоста.
Следующий документация поможет вам начать работу:
LOADBALANCER_IP = <ваш статический IP-адрес> здесь я должен указать статический IP-адрес? но у меня есть 2 приложения для весенней загрузки в качестве сервисов, и у каждого из них есть статические IP-адреса, которые я должен предоставить? поведение приложения похоже на REST API. И у меня есть только IP без DNS-имени, так что я должен указать в HOST = "?"