Как настроить nginx в качестве прокси-сервера для модуля nodejs с помощью Openshift?

Я знаком с запуском nginx в качестве прокси-сервера, но мне трудно собрать вещи вместе с помощью openshift. У меня есть приложение nodejs, и я хочу использовать nginx в качестве прокси-сервера. Это мой файл конфигурации nginx. Должен ли я заменить server_name на сервис? есть ли другой способ добиться этого в openshift?

upstream myapp {
    server 127.0.0.1:8080;
    keepalive 8;
}

# the nginx server instance
server {
    listen 0.0.0.0:80;
    server_name x.x.x.x;
    access_log /var/log/nginx/my-app.com.log;

    location / {
      autoindex on;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://myapp/;
      proxy_redirect off;
    }
 }

person user557657    schedule 01.10.2019    source источник


Ответы (1)


Ваша догадка верна, вам нужно обратиться к сервису по его имени. Если служба не находится в пространстве имен по умолчанию, вам необходимо использовать полное доменное имя:

<svc-name>.<namespace>.svc.cluster.local

Вместо того, чтобы жестко запрограммировать эту конфигурацию в контейнер, правильный способ — применить ее как карту конфигурации к кластеру и смонтировать ее как том по указанному пути для модуля nginx.

person Rinor    schedule 01.10.2019
comment
в моем случае я не вижу cluster.local. Все, что я вижу, это имя службы как <svc-name>.<namespace>.svc - person user557657; 01.10.2019
comment
Я не уверен, где вы ищете cluster.local? См. следующую документацию: docs.openshift.com/enterprise/3.0/ архитектура/ Когда вы создаете модуль, вы должны указать пространство имен (то же самое для службы), если вы не укажете пространство имен, оно выбирает текущее активное пространство имен (обычно по умолчанию). Допустим, вы назвали службу nodejs nodejs и не указали какое-либо пространство имен (превращаясь в ns по умолчанию), это означает, что полное доменное имя для вашей службы — nodejs.default.svc.cluster.local. Попробуйте ;) - person Rinor; 01.10.2019
comment
просто подтверждаю - nodejs.default.svc.cluster.local будет идти в восходящем блоке? upstream myapp { server nodejs.default.svc.cluster.local:8080; keepalive 8; } - person user557657; 01.10.2019
comment
Эти контейнеры оба запущены в одном контейнере? или они в отдельных стручках? - person Rinor; 01.10.2019
comment
есть ли у вас сервис для вашего приложения и как он называется? - person Rinor; 01.10.2019
comment
Давайте продолжим обсуждение в чате. - person Rinor; 01.10.2019