【问题标题】:Cannot access NodePort service outside Kubernetes cluster无法访问 Kubernetes 集群外的 NodePort 服务
【发布时间】: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


【解决方案1】:

如果你想不使用本地主机访问它,你应该使用你的<windows_hosts's_IP:NodePort>

因此,部署您的部署和服务:

$kubectl get svc,deploy
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
service/echoserver   NodePort    10.105.169.2   <none>        8080:31570/TCP   4m12s
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP          5m3s

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/echoserver   1/1     1            1           4m19s

您可以使用localhost:31570 访问它。

在我的情况下,192.168.0.29 是我的 Windows 主机的 IP:

curl.exe 192.168.0.29:31570
CLIENT VALUES:
client_address=192.168.65.3
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://192.168.0.29:8080/

【讨论】:

  • 我不知道到底发生了什么,但现在我可以使用 localhost 和 Window 的主机 IP 从集群外部与 pod 通信!但是,我仍然有一个与此相关的问题。为避免这篇文章偏离轨道,I created a new one如果你想看看
猜你喜欢
  • 1970-01-01
  • 2019-06-18
  • 2022-01-13
  • 2022-08-23
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
相关资源
最近更新 更多