各种Minikube + Kubernetes IP地址有什么区别?

ste*_*esu 2 docker kubernetes kubectl minikube

我试图理解 Kubernetes,以便我可以开始使用它进行本地开发,但我在这里遇到了一些基础知识......

我在 Mac OS X 上运行,并使用 Homebrew 通过brew install kubernetes. 之后,我启动了一个简单的应用程序(部署?服务?——我不清楚术语),如下所示:

$> minikube start
$> kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
$> kubectl expose deployment hello-minikube --type=NodePort --port=8080
Run Code Online (Sandbox Code Playgroud)

我直接从Kubernetes 文档获取这些命令

现在,每一步我都在尝试阅读 Kubernetes 文档并尝试使用各种命令行工具,这样我就不会盲目跟随,而是真正理解正在发生的事情。这就是我遇到的第一个巨大障碍:IP 地址太多!

$> ifconfig
...
        inet 192.168.2.126 netmask 0xffffff00 broadcast 192.168.2.255
...
$> minikube ip
192.168.64.3
$> kubectl describe pods
...
IP:          172.17.0.2
...
$> kubectl describe services
...
IP:                    10.96.8.59
...
Run Code Online (Sandbox Code Playgroud)

我了解其中几个:

  • 192.168.2.126 是我的本地计算机在网络上的 IP 地址,这是网络上的另一台计算机访问我的计算机的方式(例如,如果我正在运行 nginx 或其他东西)
  • 192.168.64.3 是分配给 Minikube 运行的虚拟机的 IP 地址。我知道我的计算机应该能够直接访问该IP,但我不知道如何将该IP地址公开给网络上的其他计算机

但我不知道172.17.0.2 和 10.96.8.59 是怎么回事——这些 IP 地址是什么,我什么时候需要使用它们,以及如何访问它们?

还有一件事

当我尝试在浏览器中访问四个 IP 地址xxx.xxx.xxx.xxx:8080中的任何一个时,我正在运行的 echoserver 应用程序不会出现。主机只是超时。但是使用minikube service hello-minikube --url(根据文档)我得到:http ://192.168.64.3:30866

我可以理解为什么我要获取 Minikube 的 IP 地址(除了直接连接到 VM 并转发 VM 端口之外,我的计算机如何访问在 VM 内运行的容器?)——但我不明白:

  • 30866端口来自哪里
  • Minikube 如何知道 hello-minikube 服务,因为它是使用 kubectl 而不是 minikube 创建的

还有一点相关:我不知道 kubectl 如何知道连接到 Minikube VM 并向集群上的 Kubernetes API 服务器发送命令。我从未告诉 kubectl 我有一个正在运行的虚拟机,也没有告诉它如何连接到该虚拟机。但不知怎的,它就是知道

我知道这就像三个不同的问题(每个 IP 地址的含义、Minikube 如何进行端口转发以及 kubectl 如何与 Minikube 进行通信) - 但这些都是在遵循 Minikube 教程的第一步时出现的问题,我我自己似乎无法找到答案。

小智 6

ifconfig 对于理解我们正在查看的每个 IP 地址的来源确实很有帮助。每个 IP 来自不同的子网。

192.168.64.3是来自我们虚拟机网络接口的内部IP地址。

172.17.0.2是来自 docker 网络接口的内部 IP 地址。这允许与主机和我们运行的容器进行网络隔离。

10.96.8.59是来自虚拟机自己的网络接口的内部 IP 地址。您可以通过 ssh 进入虚拟机 ( minikube ssh) 并在那里运行命令 ifconfig 来确认这一点。--service-cluster-ip-range这个分配可以通过我们运行 minikube start 时的选项来控制

172.17.0.2 和 10.96.8.59 是怎么回事——这些 IP 地址是什么,我什么时候需要使用它们,以及如何访问它们?

IP地址10.96.8.59只能通过另一个VM访问。例如,如果您将更多虚拟机附加到现有的 minikube 集群,那么您可以10.96.8.59通过其他虚拟机访问。此外,10.96.xx.xx 范围内的 IP 将用于 Pod 内通信。而172.17.0.2将用于 Pod 间通信。

30866端口来自哪里?

这是 minikube 从一系列端口中随机选择的,以便将您的服务暴露给您的网络。默认情况下,minikube 公开我们服务的端口范围是30000-32767 但如果你想操纵它,请参考这个文档

kubectl 如何知道连接到 Minikube VM

如果您启动 minikube,我们会看到 minikube 尝试设置虚拟机,然后配置 kubectl 以连接到虚拟机。让这个 kubectl 知道要连接到哪个主机;所有这些信息都存储在配置文件中,~/.kube/您可以在此处找到服务器 IP:端口组合。