[英]Can't access an Express.js service via a Kubernetes NodePort service in a MicroK8s cluster
我有一個簡單的 Express.js 服務器 Dockerized,當我運行它時:
docker run -p 3000:3000 mytag:my-build-id
http://localhost:3000/響應很好,如果我使用我的工作站的 LAN IP,例如http60.44/1003。
現在,如果我使用如下服務部署聲明將其部署到 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: {}
並通過kubectl get services
獲取暴露的 NodePort 為 32750 並嘗試在 MicroK8s 主機上訪問它,如下所示:
那么請求就會掛起,如果我嘗試從位於http://192.168.191.248:32750/的工作站訪問 MicroK8s 主機的 LAN IP,那么請求會立即被拒絕。
但是,如果我嘗試使用
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', () => ...
那么可能是什么問題?
您需要為您的服務添加一個選擇器。 這將告訴 Kubernetes 如何找到您的部署。 此外,您可以使用 nodePort 指定服務的端口號。 之后,您將能夠 curl 您的 MicroK8s IP。
您的服務 YAML 應如下所示:
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
name: my-service
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30001
selector:
name: my-service
status:
loadBalancer: {}
我工作站上 MicroK8s 主機的 LAN IP
那是你誤解的主要根源; localhost, 127.0.0.1
和您機器的 LAN IP 與顯然是運行 microk8s 的虛擬機無關(在您的問題中實際包含該信息將具有無限價值,而不是我們必須從中推斷出來)埋沒的句子)
我確保 Express.js 服務器監聽所有 IP
根據你后來的報道:
在http://192.168.191.248:32750/然后請求立即被拒絕。
那么看起來你的快遞服務器實際上並沒有在所有接口上監聽。 這就解釋了為什么您可以成功地將端口轉發到 Pod(這會導致流量出現在 Pod 的本地主機上)但不能從 Pod“外部”到達它
您還可以通過使用集群內的另一個 Pod 來測試該理論,以curl
其 Pod IP 在端口 3000 上(為了避開服務和 NodePort 部分)
您錯誤配置Pod
和Service
關系的可能性很小,但由於您沒有發布您的PodSpec
,並且您描述的行為聽起來更像是一個明確的錯誤配置,我們將 go 直到我們有證據從相反的方面來說
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.