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

标签 docker kubernetes kubectl minikube

我正在尝试理解 Kubernetes,以便我可以开始将它用于本地开发,但我在这里遇到了一些基础知识......

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

$> minikube start
$> kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
$> kubectl expose deployment hello-minikube --type=NodePort --port=8080

我直接从 the Kubernetes documentation 得到这些命令

现在,我一直在尝试通读 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
...

我理解其中的几个:
  • 192.168.2.126 是我本地机器在网络上的 IP 地址,它是网络上的另一台计算机访问我的计算机的方式(例如,如果我正在运行 nginx 或其他东西)
  • 192.168.64.3 是分配给 Minikube 正在运行的虚拟机的 IP 地址。我知道我的电脑应该可以直接访问这个IP,但是不知道怎么把这个IP地址暴露给网络上的其他电脑

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

    还有一件事

    当我尝试访问 xxx.xxx.xxx.xxx:8080对于 任意 在我的浏览器中的四个 IP 地址中,我正在运行的 echoserver 应用程序没有出现。主机只是超时。但是使用 minikube service hello-minikube --url (根据 the docs )我得到: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 教程的第一步产生的问题,我似乎无法自己找到答案。

    最佳答案

    ifconfig 确实有助于了解我们正在查看的每个 IP 地址的来源。
    每个 IP 都来自不同的子网。
    192.168.64.3是来自我们虚拟机网络接口(interface)的内部IP地址。
    172.17.0.2是来自 docker 网络接口(interface)的内部 IP 地址。这允许与我们运行的主机和容器进行网络隔离。
    10.96.8.59是来自虚拟机自己的网络接口(interface)的内部 IP 地址。您可以通过 ssh-ing 进入 VM (minikube ssh) 并在那里运行 ifconfig 命令来确认这一点。此分配可以通过选项--service-cluster-ip-range 控制。当我们运行 minikube start

    what's up with 172.17.0.2 and 10.96.8.59 -- what are these IP addresses, when would I need to use them, and how do I access them?



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

    Where port 30866 came from?



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

    how kubectl knew to connect to the Minikube VM



    如果您执行 minikube start,我们会看到 minikube 尝试设置 VM,然后配置 kubectl 以连接到 VM。让这个 kubectl 知道要连接到哪个主机;所有这些信息都存储在位于 ~/.kube/ 的配置文件中。在这里,您将找到服务器 IP:端口组合。

    关于docker - 各种 Minikube + Kubernetes IP 地址有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60117519/

    相关文章:

    Dockerfile 无法验证 Postgres apt 签名

    macos - 如何从 Docker 容器访问 Mac 的文件

    kubernetes - 对端口使用 configmap

    bash - 如何从 kubectl 转发 psql shell

    kubernetes - kubectl status.phase=运行返回错误结果

    .net - Docker VS Code WSL 2 异常

    docker - Rancher 发射失败

    kubernetes - Pod 处于待处理阶段(错误 : FailedScheduling : nodes didn't match node selector )

    kubernetes - 如何展平从 configMapGenerator 生成的 configMap?

    docker - 在 docker-for-desktop OSX 上删除 kubernetes 集群?