我们正在Openshift中部署一个容器化的NodeJS应用程序,而我们的一个部署(大约50个部署中)表现得很有趣。我们注意到在0.0.0.0:5000
上打开的NodeJS应用程序绑定到服务IP,而不是openshift分配给Pod的IP。堆栈跟踪如下:
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.
我们的变通方法是启动容器,然后启动服务,该方法可以正常工作。这意味着,当Pod死亡并随后重新启动时,它将无法绑定,并会产生上述堆栈跟踪。我们无法在其他任何实例上重现该问题。我们应该检查什么/配置有误吗?
对于上下文,我们的服务如下所示
---
apiVersion: v1
kind: Service
metadata:
name: "node-app"
spec:
ports:
- name: node-app-5000
port: 5000
selector:
app: "application"
service: node-app
type: ClusterIP
---