Как открыть внутренний порт в Openshift 3 Online?

Скажем, если я хочу открыть два порта, один для публики на 8080, а другой для обработки какого-то общедоступного запроса, но был перенаправлен портом 8080, например:

const http = require('http');
const publicServer = http.createServer(...).listen(8080);
const privateServer = http.createServer(...).listen(9999);
publicServer.on('connect', (req, cltSocket, head) => {
  ...
  if (...) {
    // let srvSocket = net.connect('9999', 'localhost', () => {
    let srvSocket = net.connect('9999', '127.0.0.1', () => {
      cltSocket.write('\r\n\r\n');
      srvSocket.write(head);
      srvSocket.pipe(cltSocket);
      cltSocket.pipe(srvSocket);
    });
  }
});

Есть ли какие-то настройки, которые я могу использовать, чтобы разрешить это? В настоящее время кажется, что Openshift не позволяет эту настройку. Возможно, он не учитывает 127.0.0.1 или localhost и, следовательно, не перенаправляет запрос в правильный модуль...


person Aero Wang    schedule 17.04.2018    source источник


Ответы (1)


Не должно быть причин, по которым вы не можете подключиться к порту 9999 через localhost или 127.0.0.1 из любого процесса в любом контейнере того же модуля.

Вы пытались использовать oc rsh для доступа к работающему контейнеру и ушли:

curl localhost:9999

чтобы убедиться, что ваш код действительно правильно прослушивает порт 9999?

person Graham Dumpleton    schedule 17.04.2018
comment
Позвольте мне попробовать... возможно ли, что проблема заключается в server.on('connect', cb)? - person Aero Wang; 17.04.2018
comment
Похоже, openshift онлайн не пересылает CONNECT в модуль. - person Aero Wang; 17.04.2018
comment
Это вполне возможно. Как насчет объяснить в своем вопросе, что вы пытаетесь сделать, а не спрашивать, почему решение не работает, если мы не знаем проблему, которую вы пытаетесь решить. Возможно, были бы лучшие способы сделать то, что вы хотите, если бы мы знали первоначальные требования. - person Graham Dumpleton; 18.04.2018
comment
Немного отступив. OpenShift не должен блокировать CONNECT, если вы пытаетесь сделать это только как петлю в том же контейнере. Может быть проблема с CONNECT, работающим через открытый маршрут, но даже это только предположение. Порт 9999 в любом случае не будет выставлен за пределы кластера OpenShift, если вы на это надеялись. Вот почему вам действительно нужно объяснить исходную проблему, которую вы пытаетесь решить. - person Graham Dumpleton; 18.04.2018
comment
О, я хочу использовать другой маршрут, который я написал отдельно, как только обнаружил, что запрос HTTP/2.0 или HTTP/1.1. - person Aero Wang; 18.04.2018
comment
Какую версию OpenShift вы используете? Для поддержки HTTP/2 вам нужен haproxy 1.8. Поддержка использования этой версии была добавлена ​​только в OpenShfit 3.9. Вопрос в том, почему вам нужно использовать отдельный маршрут. Способ, которым разработан HTTP/2, заключается в том, что вы можете использовать тот же маршрут, что и HTTP/1.1, с переключением/обновлением версии протокола после реализации использования HTTP/2. Никогда раньше не видели, чтобы кто-то использовал другой хост/маршрут для HTTP/2. Какова причина этого? - person Graham Dumpleton; 18.04.2018
comment
Вы также можете использовать HTTP/2, если используете исключительно безопасный маршрут. Это означает, что ваше приложение должно само разорвать безопасное соединение. Что касается поддержки HTTP/2 для маршрута OpenShift при использовании пограничного завершения HTTP или HTTPS, возможно, что конфигурация haproxy по-прежнему может не поддерживать его в OpenShift 3.9, поскольку конкретно не слышал о поддержке HTTP/2. Проверяю. - person Graham Dumpleton; 18.04.2018
comment
Нет уважительной и уважительной причины. Да просто так. Продукт был разработан, чтобы быть другим. Почему? Я не знаю. Ничего страшного, есть другие способы решить эту проблему. Это всего лишь один ленивый подход. В любом случае, мы даже не развертываем живую версию в OpenShift Online... - person Aero Wang; 18.04.2018