Мы разворачиваем контейнерное приложение NodeJS в Openshift, и одно из наших развертываний (из 50 или около того) ведет себя забавно. Мы замечаем, что приложение NodeJS, открывающееся на 0.0.0.0:5000
, привязывается к IP-адресу службы, а не к IP-адресу, назначенному openshift для модуля. Трассировка стека приведена ниже:
Error: listen EACCES: permission denied tcp://[service ip]:5000
at Server.setupListenHandle [as _listen2] (net.js:1262:19)
at listenInCluster (net.js:1327:12)
at Server.listen (net.js:1425:5)
at Function.listen (/usr/local/app-server/node_modules/express/lib/application.js:618:24)
at Object.<anonymous> (/usr/local/app-server/server.js:1:1511)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
Emitted 'error' event at:
at emitErrorNT (net.js:1306:8)
at process._tickCallback (internal/process/next_tick.js:63:19)
at Function.Module.runMain (internal/modules/cjs/loader.js:832:11)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! app-server@1.0.0 start: `node server.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the app-server@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
Наш обходной путь - запустить модуль и запустить службу, которая работает. Это означает, что, когда модуль умирает и впоследствии перезапускается, он не будет связываться и будет производить вышеуказанную трассировку стека. Мы не можем воспроизвести проблему ни в одном из наших других случаев. Есть что-то, что мы должны проверять / что-то неправильно настроено?
Для контекста наш сервис выглядит следующим образом
---
apiVersion: v1
kind: Service
metadata:
name: "node-app"
spec:
ports:
- name: node-app-5000
port: 5000
selector:
app: "application"
service: node-app
type: ClusterIP
---