netstat 将外部端口显示为 kubernetes:port。这是什么意思?

netstat showing foreign ports as kubernetes:port. What does this mean?

我使用的是 Windows 10 Pro 机器。

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

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

如何关闭这些连接?

Minikube 状态:

$ minikube status
host:
kubelet:
apiserver:
kubectl:

好的,看来您的 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 只不过是您的 machines/VMs/instances 之一的 hostname。也许您 运行 您的 minikube 上面的那个您调用了 kubernetes,这就是此主机名当前出现在您的活动网络连接中的原因。基本上跟运行ning kubernetes cluster.

没有关系

为了更清楚,您可以 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 列,您可以在其中查看特定程序连接是通过哪个程序建立的。您会看到很多 ESTABLISHED 个属于 etcdkube-apiserver 的网络连接。

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

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

docker ps

或:

docker container ls

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

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

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

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

# 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

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

似乎 Windows docker 更改了您的 hosts 文件。 所以,如果你想摆脱这些联系,只需在 hosts 文件中注释掉相应的行即可。

hosts Windows 10 上的文件位于 C:\Windows\System32\drivers\etc 和 记录可能类似于 127.0.0.1 kubernetes.docker.internal。 我很确定它会中断你在 Windows 上的 docker 服务(然而,我不是专家),所以不要忘记在你需要获取 docker 时取消注释这些行服务回来。