Openshift 3.X - связь между бэкэндом и фронтэндом
У меня есть два образа докера, один - веб-сервер, а другой - приложение для бэкэнда Rest. Я развернул эти образы в кластере Openshift. Я хочу настроить свои модули, на которых работает веб-сервер, для доступа к модулям, на которых запущено приложение Rest серверной части, но я не могу понять, как я могу указать своим интерфейсным модулям, что они должны взаимодействовать с моей серверной службой, Я могу достичь только IP-адреса pod, но это не то, чего я хочу, потому что я хочу сохранить преимущество масштабируемости.
Я попытался получить к нему доступ так:
- через определенный маршрут: svc-backend.router.default.svc.cluster.local
- через имя его службы: svc-backend.environment.svc.cluster.local
- через его IP-адрес (внутренний): 172.30.214.192
- через главный хост + имя службы: master.svc-backend.environment.svc.cluster.local
Ничто не сработало, к сожалению. Может кто-нибудь объяснить мне, как общаться в openshift между модулями и службами?
1 ответ
Лучшее, что вы можете сделать, это развернуть эти 2 модуля в одном проекте, чтобы вы могли поддерживать связь внутри:
$ oc new-project test
$ oc new-app registry:5000/frontend-image
$ oc new-app registry:5000/backend-image
Это автоматически создаст файл deployconfig и создаст ваш pod + контейнер + контроллер репликации (для высокой доступности он проверит, работает ли pod) + сервис.
Сервис является важным аспектом. На самом деле это балансировщик нагрузки, который будет распределять трафик между несколькими модулями. oc new-app
проверит, какие порты выставлены, и создаст службу выше портов. Так, например, вы можете увеличить ваш pod-интерфейс до 3, тогда служба будет распределять посетителя 1 для pod1 и другого посетителя для pod2 и т. Д. Служба стабильна, поэтому ее IP-адрес не изменится. Сервисный IP начинается с 172.30.xx.xx. Таким образом, трафик, отправленный на этот IP, будет перенаправлен на ваш модуль. Поэтому для сохранения внутренней сети лучше всего подключать сервисы. Вы можете подключиться к названию услуги, которое будет преобразовано в IP-адрес службы. (Если есть какой-то странный случай, когда вам нужно воссоздать ваш сервис, вы можете создать его с тем же именем, чтобы вам не приходилось менять настройки приложения).
Например, у меня есть приложение, которое связано с базой данных MySQL. В конфе моего приложения я указываю на соединение с хостом: mysql. Это название службы моего MySQL.
connection: {
host: 'mysql',
user: 'xx-user',
password: 'xx',
database: 'db',
charset: 'utf8'
Вы можете проверить свои услуги:
$ oc get svc
или в веб-консоли
Таким образом, для вашего приложения вы должны указать имя службы вашего бэкэнда. (Сначала я должен запустить базу данных, потому что в противном случае развертывание моего приложения не удастся, потому что оно не найдет базу данных). Поэтому сначала вы должны развернуть свой бэкэнд + создать сервис и указать его имя в конфигурации вашего веб-интерфейса.
Иногда вы не можете держать все внутри себя. Чем вам нужно создавать маршруты на ваших сервисах. Это откроет ваш сервис снаружи, и вы сможете общаться по маршрутам. Затем вы должны указать эти маршруты в своих конфигах. Маршруты будут транслироваться маршрутизатором OpenShift, и маршрутизатор перенаправит его нужному сервису. Оставьте отзыв, если что-то не понятно.
РЕДАКТИРОВАТЬ 1:
nslookup mysql
Server: 172.30.0.1
Address: 172.30.0.1#53
Name: mysql.test.svc.cluster.local
Address: 172.30.195.xx
РЕДАКТИРОВАТЬ 2: Запустите mysql в OpenShift (используйте эфемерный шаблон: user=test, password=test, database=test. Зайдите внутрь своего контейнера и попробуйте выполнить аутентификацию следующим образом: вы определите свой пользователя, пароль и хост (host = servicename). Это также будет работать с вашим сервисом IP: 172.30.xxx)
sh-4.2$ mysql -utest -ptest -hmysql
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 48880
Server version: 5.6.26 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>