首页 > 解决方案 > 为什么 HostPort 没有显示在来自主机的 Netstat 的输出中

问题描述

我使用带有 yaml 文件的 kubectl 创建目标 pod,发现 pod 中的进程正在按预期监听目标端口。

令我惊讶的是,在主机的输出或netstat -tunlp来自主机的输出中看不到端口。但是如果我尝试 telnet localhost targetPort 就可以了!!!netstat -alpnetstat -an

为什么会这样??有人可以解释一下吗?

标签: dockerubuntukuberneteskubectl

解决方案


这是因为docker. 默认情况下,docker 不会将容器网络命名空间添加到 linux 运行时数据(/var/run 作为 /run 中的 tmpfs 挂载),这是您在运行 ipnetns命令时看到的。

要查看您需要使用的网络命名空间nsenter

  1. 获取容器 ID。
docker ps
  1. 获取容器进程 ID。
docker inspect --format '{{ .State.Pid }}' <<container-id>>
  1. 现在使用 nsenter 显示 pods 网络空间。使用nsenteroverdocker exec的优点是 nsenter 将使您能够执行 pod 内节点上可用的所有工具或命令,而 asdocker exec将只允许有限或受限的命令。
nsenter -t <<container pid>> -n netstat -tunlp 


推荐阅读