我使用kubectl和yaml文件创建目标pod,发现pod中的进程正在监听目标端口。
令我惊讶的是,在主机的 netstat -tunlp
或 netstat -alp
或 netstat -an
的输出中看不到该端口机器。但如果我尝试 telnet localhost targetPort 就可以了!!!
为什么会出现这种情况?谁能解释一下吗?
最佳答案
这是因为docker
。默认情况下,docker 不会将容器网络命名空间添加到 Linux 运行时数据(/var/run 作为/run 中的 tmpfs 安装),这是您运行 ip netns
命令时看到的内容。
要查看网络命名空间,您需要使用nsenter
。
- 获取容器 ID。
docker ps
- 获取容器进程 ID。
docker inspect --format '{{ .State.Pid }}' <<container-id>>
- 现在使用 nsenter 显示 pod 网络空间。与
docker exec
相比,使用nsenter
的优点是,nsenter 将使您能够执行 pod 内节点上可用的所有工具或命令,其中docker exec
> 将仅允许有限或受限制的命令。
nsenter -t <<container pid>> -n netstat -tunlp
关于docker - 为什么 HostPort 没有显示在主机 Netstat 的输出中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63454535/