我有一个简单的 Express.js 服务器 Dockerized,当我运行它时:
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: {}
和像这样的吊舱规格(更新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: {}
并获取暴露的 NodePort viakubectl get services
为 32750 并尝试在 MicroK8s 主机上访问它,如下所示:
那么请求就会挂起,如果我尝试从我的工作站访问 MicroK8s 主机的 LAN IP,地址为 http://192.168.191.248:32750/ ,那么请求会立即被拒绝。
但是,如果我尝试使用
kubectl port-forward my-service-5db955f57f-q869q 3000:3000
然后http://localhost:3000/工作得很好。
因此,pod 部署似乎运行良好,并且 microbot-service 等示例服务在该集群上运行良好。
我确保 Express.js 服务器监听所有 IP
app.listen(port, '0.0.0.0', () => ...
那么可能是什么问题?