【问题标题】:netstat showing foreign ports as kubernetes:port. What does this mean?netstat 将外国端口显示为 kubernetes:port。这是什么意思?
【发布时间】:2020-05-12 02:09:20
【问题描述】:

我使用的是 Windows 10 Pro 机器。

当我运行netstat 时,它在活动连接中将kubernetes:port 显示为外部地址。

这是什么意思?我检查过,我的机器上没有运行 kubernetes 集群。

如何关闭这些连接?

Minikube 状态:

$ minikube status
host:
kubelet:
apiserver:
kubectl:

【问题讨论】:

  • 我可以知道你为什么添加minikube标签并说你的机器上没有kubernetes集群吗?
  • 我安装了 minikube 来运行 kubernetes,然后我用它停止了 minikube 和 k8s 集群。这就是我提到的原因。
  • minikube status 命令的输出是什么?
  • 我用 minikube 状态编辑了问题。

标签: kubernetes tcp minikube netstat


【解决方案1】:

这是因为netstat 呈现输出的方式。它与实际的 Kubernetes 无关。

我有适用于 Windows 的 Docker 桌面,它会将其添加到主机文件中:

# Added by Docker Desktop
192.168.43.196 host.docker.internal
192.168.43.196 gateway.docker.internal
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section

有一条记录将127.0.0.1 映射到kubernetes.docker.internal。当netstat 呈现其输出时,它解析外部地址并查看主机文件并看到此记录。它显示kubernetes,这就是您在控制台中看到的内容。您可以尝试将其更改为

127.0.0.1 tomato.docker.internal

这样,netstat 将打印:

  Proto  Local Address          Foreign Address        State
  TCP    127.0.0.1:6940         tomato:6941            ESTABLISHED
  TCP    127.0.0.1:6941         tomato:6940            ESTABLISHED
  TCP    127.0.0.1:8080         tomato:40347           ESTABLISHED
  TCP    127.0.0.1:8080         tomato:40348           ESTABLISHED
  TCP    127.0.0.1:8080         tomato:40349           ESTABLISHED

所以实际发生的是从 localhost 到 localhost 的连接(netstat -b 将显示创建它们的应用程序)。与 Kubernetes 无关。

【讨论】:

  • 感谢您的详细解释。我检查了主机文件并删除了 kubernetes 引用,现在没有 kube 作为外部主机。
  • netstat -b 为我节省了一天。原来是openvpn.exe 建立了一个名为kubernetes:1099 的连接,它弄乱了默认的JMX 管理器
【解决方案2】:

Windows docker 似乎更改了您的 hosts 文件。 因此,如果您想摆脱这些连接,只需将hosts 文件中的相应行注释掉即可。

Windows 10 上的 hosts 文件位于 C:\Windows\System32\drivers\etc 和 记录可能类似于127.0.0.1 kubernetes.docker.internal。 我很确定它会破坏您在 Windows 上的 docker 服务(但我不是专家),所以当您需要恢复 docker 服务时不要忘记取消注释这些行。

【讨论】:

  • 它不会摆脱实例或/和端口。他们现在称自己为 cbs:XXXXXX。我认为它们与 docker 捆绑在一起。奇怪的是,当打开firefox get时,会出现更多这样的实例。这里发生了一些可疑的事情。
【解决方案3】:

好的,看起来您的 minikube 实例肯定已被删除。请记住,在 Linux 或其他 基于 nix 的系统中,许多进程使用网络套接字相互通信是完全正常的,例如您将看到许多已建立的连接,本地和外部地址都设置为 localhost:

tcp        0      0 localhost:45402         localhost:2379          ESTABLISHED
tcp        0      0 localhost:45324         localhost:2379          ESTABLISHED
tcp        0      0 localhost:2379          localhost:45300         ESTABLISHED
tcp        0      0 localhost:45414         localhost:2379          ESTABLISHED
tcp        0      0 localhost:2379          localhost:45388         ESTABLISHED
tcp        0      0 localhost:40600         localhost:8443          ESTABLISHED

kubernetes 在您的情况下只不过是您的一台机器/VM/实例的hostname。也许您在其上运行minikube 的那个名称称为kubernetes,这就是为什么此主机名当前出现在您的活动网络连接中的原因。基本上它与运行 kubernetes 集群无关。

为了更清楚,您可以cat/etc/hosts 文件的内容并查找条目kubernetes。然后您可以将它们与您的网络接口地址进行比较(运行ip -4 a)。很可能/etc/hosts 中的kubernetes 条目映射到其中之一。

如果它澄清了你的疑问,请告诉我。


编辑:

我在我的 linux 实例上的 Minikube 上复制了它,并注意到完全相同的行为,但看起来 ESTABLISHED 连接仅在成功minikube stop 后才显示。在minikube delete 之后,他们走了。看起来这些连接确实属于 Kubernetes 的各个组件,但由于某种原因并未终止。基本上关闭已建立的网络连接是创建它们的应用程序的责任,并且看起来由于某种原因 minikube 没有终止它们。

如果你运行:

sudo netstat -ntp ### important: it must be run as superuser

它还显示PID/Program name 列,您可以在其中查看建立了哪个程序特定的连接。您会看到很多属于etcdkube-apiserverESTABLISHED 网络连接。

首先我尝试重新启动整个实例。它显然关闭了所有连接,但随后我验证了几次,看起来成功执行minikube delete 也关闭了所有连接。

此外,您可能希望通过运行检查可用的 docker 容器:

docker ps

或:

docker container ls

停止 minikube 实例后,它仍然显示这些容器,这似乎是netstat 命令仍然显示与某些 kubernetes 组件** 的大量连接的原因。

但是在minikube delete 之后,containersESTABLISHEDkubernetes 集群 组件的连接都不再可用。

【讨论】:

  • 好的,我会检查的。我使用的是 windows 10 pro 而不是 linux。
  • 是的,我知道,但如果您使用的是minikubedocker desktop,它基本上会使用某种虚拟化并在 linux 操作系统上运行您的 docker 容器。
  • 好的,所以你在windows command linepowershell 中运行netstat,对吗?
  • 请看我最后的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 2021-07-10
  • 2018-02-03
  • 2013-08-17
相关资源
最近更新 更多