Docker 为什么主机的Netstat输出中不显示HostPort
我使用kubectl和yaml文件来创建目标pod,发现pod中的进程正在按预期侦听目标端口 令我惊讶的是,在主机的netstat-tunlp或netstat-alp或netstat-an的输出中看不到该端口。但如果我尝试telnet localhost targetPort,它会工作Docker 为什么主机的Netstat输出中不显示HostPort,docker,ubuntu,kubernetes,kubectl,Docker,Ubuntu,Kubernetes,Kubectl,我使用kubectl和yaml文件来创建目标pod,发现pod中的进程正在按预期侦听目标端口 令我惊讶的是,在主机的netstat-tunlp或netstat-alp或netstat-an的输出中看不到该端口。但如果我尝试telnet localhost targetPort,它会工作 为什么会发生这种情况??有人能解释一下吗?为了访问工作节点上的服务,您必须使用类型为的服务公开工作节点上的pod。POD中运行的进程位于不同的网络命名空间中。您可以从pod内部访问应用程序,但不能从没有服务对象的
为什么会发生这种情况??有人能解释一下吗?为了访问工作节点上的服务,您必须使用类型为的服务公开工作节点上的pod。POD中运行的进程位于不同的网络命名空间中。您可以从pod内部访问应用程序,但不能从没有服务对象的节点访问。参见以下参考: $kubectl创建部署nginx-image=nginx $kubectl公开部署nginx-目标端口80-端口80-类型节点端口 $NODE_PORT=$kubectl get svc nginx-ojsonpath='{.spec.PORT[0].nodePort}' $netstat-一个| grep$NODE_端口 tcp46 0 0*.31563*.LISTEN $curl localhost:$NODE\u端口 欢迎来到nginx! ...
HTH为了访问工作节点上的服务,必须使用类型为的服务公开工作节点上的pod。POD中运行的进程位于不同的网络命名空间中。您可以从pod内部访问应用程序,但不能从没有服务对象的节点访问。参见以下参考: $kubectl创建部署nginx-image=nginx $kubectl公开部署nginx-目标端口80-端口80-类型节点端口 $NODE_PORT=$kubectl get svc nginx-ojsonpath='{.spec.PORT[0].nodePort}' $netstat-一个| grep$NODE_端口 tcp46 0 0*.31563*.LISTEN $curl localhost:$NODE\u端口 欢迎来到nginx! ...
HTH由于POD中的容器在其自己的网络名称空间中运行,因此netstat无法检测到它们 要列出侦听容器内部的端口,请使用nsenter。这个工具将帮助您在不同的进程名称空间上执行命令,在我们所需容器的例子中 在K8s工作节点上获取container-SSH的PID,如果docker是您的容器运行时,则运行docker inspect 并且,从上面的命令获取PID后,运行 $nsenter-t-n netstat-nltp
由于pod中的容器在它们自己的网络名称空间中运行,因此netstat无法检测它们 要列出侦听容器内部的端口,请使用nsenter。这个工具将帮助您在不同的进程名称空间上执行命令,在我们所需容器的例子中 在K8s工作节点上获取container-SSH的PID,如果docker是您的容器运行时,则运行docker inspect 并且,从上面的命令获取PID后,运行 $nsenter-t-n netstat-nltp 这是因为docker。默认情况下,docker不会将容器网络名称空间添加到linux运行时数据/var/run中,该数据作为tmpfs from/run装入,这是您在运行ip netns命令时看到的 要查看网络名称空间,需要使用nsenter 获取容器id。 获取容器进程id。 这是因为docker。默认情况下,docker不会将容器网络名称空间添加到linux运行时数据/var/run中,该数据作为tmpfs from/run装入,这是您在运行ip netns命令时看到的 要查看网络名称空间,需要使用nsenter 获取容器id。 获取容器进程id。 此命令显示容器端口,而不是主机端口,现在仍然回答问题
此命令显示容器端口,而不是主机端口,现在仍然回答以下问题传入连接可能使用iptable规则直接路由到k8s网络,例如使用Calico CNI时 你可以试试
iptable -L -t nat
看看你的主机端口是否在那里
请参见此处的说明:
传入连接可以使用iptable规则直接路由到k8s网络,例如使用Calico CNI时 你可以试试
iptable -L -t nat
看看你的主机端口是否在那里
请参见此处的说明:
nsenter -t <<container pid>> -n netstat -tunlp
nsenter -t <container-PID> -n netstat -nltp
iptable -L -t nat