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

时间:2020-01-26 13:07:04

标签: kubernetes tcp minikube netstat

我正在使用Windows 10 Pro计算机。

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

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

如何关闭这些连接?

enter image description here

Minikube状态:

$ minikube status
host:
kubelet:
apiserver:
kubectl:

3 个答案:

答案 0 :(得分:6)

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

我有适用于Windows的Docker Desktop,它将其添加到hosts文件中:

# 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.internalnetstat呈现输出时,它将解析外部地址,并查看hosts文件并查看该记录。它显示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无关。

答案 1 :(得分:1)

好的,看来您的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的{​​{1}}就是那个主机,这就是为什么此主机名当前出现在活动网络连接中的原因。基本上,它与运行 kubernetes集群无关。

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

让我知道是否可以澄清您的疑问。


编辑:

我已经在我的Linux实例的 Minikube 上重现了该文件,并注意到了完全相同的行为,但是看起来好像建立/etc/hosts之后才显示已建立的连接。 minikube stop之后,他们消失了。看起来那些连接确实属于kubernetes的各个组成部分,但由于某种原因并未终止。基本上,关闭已建立的网络连接是创建它们的应用程序的责任,并且由于某种原因,minikube似乎没有终止它们。

如果您运行:

minikube delete

它另外显示了sudo netstat -ntp ### important: it must be run as superuser 列,您可以在其中查看通过哪个程序特定的连接。您将看到许多PID/Program name网络连接,它们属于ESTABLISHEDetcd

首先,我尝试重新引导整个实例。显然它关闭了所有连接,但随后我进行了几次验证,看来成功执行的kube-apiserver也关闭了所有连接。

另外,您可能希望通过运行以下命令检查可用的Docker容器:

minikube delete

或:

docker ps

在停止minikube实例之后,它仍然显示那些容器,并且看起来像docker container ls 命令仍显示与某些 kubernetes 组件**的许多连接的原因。

然而,netstatminikube delete与{strong> kubernetes集群组件的连接不再可用。

答案 2 :(得分:1)

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

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