【发布时间】:2021-02-15 17:05:43
【问题描述】:
我在 Windows 上并使用 Docker Desktop 使用 WSL 2 部署本地 Kubernetes 集群。我尝试部署一个 pod 并通过 NodePort 服务公开它,以便我可以在集群外部访问它,但它无法正常工作。
这里是重现场景的命令:
kubectl create deployment echoserver --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment echoserver --type=NodePort --port=8080
尝试在浏览器中打开 NODE_IP:EXPOSED_PORT 或运行 netcat 命令 nc NODE_IP EXPOSED_PORT 并尝试发送消息(从 WSL 或 Windows)不起作用。
-
NODE_IP是Docker Desktop K8S节点的内部IP(通过kubectl get nodes -o wide命令查看INTERNAL-IP列获得) -
EXPOSED_PORT是服务暴露的节点端口(通过在命令kubectl describe service echoserver上看到字段NodePort获得)
在浏览器上打开网址应该会遇到this页面。但是,您会收到一般错误响应,说明浏览器无法访问该 URL。
使用 netcat 命令发送消息应该会收到 400 Bad Request 响应,因为它不是格式正确的 HTTP 请求。但是,您根本不会得到任何响应,或者 TCP 连接甚至可能不会在第一时间建立。
尝试从集群内部与服务和/或 pod 通信(例如,通过另一个 pod)可以正常工作。
使用命令 kubectl port-forward deployment/echoserver 2311:8080 在本地端口转发部署,然后在浏览器中或通过 netcat 访问 localhost:2311 也可以正常工作(在 WSL 和 Windows 中)。
【问题讨论】:
-
在描述服务时,是否分配了外部IP?
-
服务的
IP字段显示10.96.23.195。我没有看到任何说外部 IP 的东西。那应该是另一个领域吗? -
您应该能够通过 localhost:nodeport 访问(确保您的目标是实际的节点端口,而不是容器端口)。如果它不起作用,我猜它是主机(Windows)上的东西阻止它。
-
您是如何引导集群的?是善良/minikube 吗?
-
@mmking 我试过了。它没有工作
标签: docker kubernetes windows-subsystem-for-linux docker-desktop wsl-2