Openshift 3.X - связь между бэкэндом и фронтэндом

У меня есть два образа докера, один - веб-сервер, а другой - приложение для бэкэнда Rest. Я развернул эти образы в кластере Openshift. Я хочу настроить свои модули, на которых работает веб-сервер, для доступа к модулям, на которых запущено приложение Rest серверной части, но я не могу понять, как я могу указать своим интерфейсным модулям, что они должны взаимодействовать с моей серверной службой, Я могу достичь только IP-адреса pod, но это не то, чего я хочу, потому что я хочу сохранить преимущество масштабируемости.

Я попытался получить к нему доступ так:

  1. через определенный маршрут: svc-backend.router.default.svc.cluster.local
  2. через имя его службы: svc-backend.environment.svc.cluster.local
  3. через его IP-адрес (внутренний): 172.30.214.192
  4. через главный хост + имя службы: 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> 
Другие вопросы по тегам