我有一个简单的Dockerized Express.js服务器,运行时就像这样:
docker run -p 3000:3000 mytag:my-build-id
http://localhost:3000/响应很好,而且如果我使用工作站的LAN IP(如http://10.44.103.60:3000/
现在,如果我使用服务部署声明将其部署到microK8s上,
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
name: my-service
spec:
type: NodePort
ports:
- name: "3000"
port: 3000
targetPort: 3000
status:
loadBalancer: {}
像这样的pod规范(更新2019-11-05):
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
name: my-service
spec:
replicas: 1
selector:
matchLabels:
name: my-service
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
name: my-service
spec:
containers:
- image: mytag:my-build-id
name: my-service
ports:
- containerPort: 3000
resources: {}
restartPolicy: Always
status: {}
并通过kubectl get services
获得暴露的NodePort,将其设置为32750,然后尝试在microK8s主机上访问它,如下所示:
然后,请求挂起,如果我尝试从我的工作站访问microK8s主机的LAN IP, http://192.168.191.248:32750/ 那么该请求将立即被拒绝。
但是,如果我尝试使用
kubectl port-forward my-service-5db955f57f-q869q 3000:3000
然后http://localhost:3000/正常工作。
因此,pod部署似乎运行良好,例如微型机器人服务之类的示例服务在该群集上也运行良好。
我确保Express.js服务器使用
侦听所有IP。app.listen(port,'0.0.0.0',() => ...
那可能是什么问题?