Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 无法访问Kubernetes群集外部的节点端口服务_Docker_Kubernetes_Windows Subsystem For Linux_Docker Desktop_Wsl 2 - Fatal编程技术网

Docker 无法访问Kubernetes群集外部的节点端口服务

Docker 无法访问Kubernetes群集外部的节点端口服务,docker,kubernetes,windows-subsystem-for-linux,docker-desktop,wsl-2,Docker,Kubernetes,Windows Subsystem For Linux,Docker Desktop,Wsl 2,我在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

我在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\u IP:EXPOSED\u PORT
,或运行netcat命令
nc NODE\u IP EXPOSED\u PORT
并尝试发送消息(来自WSL或Windows)无效

  • NODE\u IP
    是Docker Desktop K8S节点的内部IP(通过查看命令
    kubectl get nodes-o wide
    上的
    internal-IP
    列获得)
  • EXPOSED\u PORT
    是服务公开的节点端口(通过查看命令
    kubectl description service echoserver
    上的
    NodePort
    字段获得)
在浏览器上打开URL时应遇到页面。但是,您将得到一个通用的错误响应,表示浏览器无法访问URL

使用netcat命令发送消息时,应该会遇到400错误的请求响应,因为它不是格式正确的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进行访问(确保您的目标是实际的nodeport,而不是容器端口)。如果它不工作,我想可能是主机(windows)上有什么东西阻止了它。你是如何引导集群的?它是善良的吗?@嗯,我试过了。它没有工作我不知道到底发生了什么,但现在我可以使用本地主机和窗口主机的IP从集群外部与pod通信了!然而,我仍然有一个与此相关的问题。为了避免在这篇文章上偏离正轨,如果你想看一看的话
$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
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/