minikube:无法连接本地部署的 nginx 服务
Posted
技术标签:
【中文标题】minikube:无法连接本地部署的 nginx 服务【英文标题】:minikube : not able to connect a locally deployed nginx service 【发布时间】:2016-10-29 00:06:24 【问题描述】:我已经在我的 ubuntu 16.04 机器上安装了 minikube 并启动了一个集群,并带有一条消息
"Kubernetes is available at https://192.168.99.100:443"
接下来,我用下面的命令部署了nginx服务
> kubectl.sh run my-nginx --image=nginx --replicas=2 --port=80 --expose
> kubectl.sh get pods -o wide
NAME READY STATUS RESTARTS AGE NODE
my-nginx-2494149703-8jnh4 1/1 Running 0 13m 127.0.0.1
my-nginx-2494149703-q09be 1/1 Running 0 13m 127.0.0.1
> kubectl.sh get services -o wide
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes 10.0.0.1 <none> 443/TCP 14m <none>
my-nginx 10.0.0.83 <none> 80/TCP 13m run=my-nginx
> kubectl.sh get nodes -o wide
NAME STATUS AGE
127.0.0.1 Ready 16m
问题:
1) 节点 127.0.0.1 是我的本地开发机器吗?这让我最困惑。
2) 我的以下理解是否正确:集群(节点、kubernetes API 服务器)的内部 IP 地址为 10.0.0.x,其对应的外部 IP 地址为 192.168.99.x。然后,这 2 个 pod 的 IP 地址将在 10.0.1.x 和 10.0.2.x 之类的范围内?
3) 为什么服务的外部 IP 不存在?甚至没有,对于 Kubernetes 服务。这里的192.168.99.43不是外网IP吗?
4) 最重要的是,如何从笔记本电脑连接到 nginx 服务?
【问题讨论】:
【参考方案1】:1) 节点 127.0.0.1 是我的本地开发机器吗?这让我 最让我困惑的。
当一个节点注册时,您提供要注册的 IP 或名称。默认情况下,节点只是注册127.0.0.1
。这是引用您运行 linux 的 VM,而不是您的主机。
2)我的以下理解是否正确:集群(节点, kubernetes API 服务器)在 10.0.0.x 和它们的内部 IP 地址 对应的外部 IP 地址为 192.168.99.x。 2个豆荚将 那么 IP 地址在 10.0.1.x 和 10.0.2.x 之类的范围内吗?
是的,10.0.0.x 网络是您的覆盖网络。 192.168.99.x 是您在集群外部可见的“公共”地址。
3) 为什么服务的外部 IP 不存在?甚至没有,因为 Kubernetes 服务。这里的192.168.99.43不是外网IP吗?
外部 IP 通常用于通过特定 IP 传入流量。 kubernetes 服务使用 clusterIP 服务类型,这意味着它只对内部集群可见。
4) 最重要的是,我如何从我的 笔记本电脑?
查看 nginx 服务最简单的方法是输入NodePort
,然后部署该服务。之后,描述服务以获取分配的端口(或者在创建后它也会告诉您)。然后点击你的虚拟机的 ip 并提供自动分配的 NodePort。
e.g. http://192.168.99.100:30001
【讨论】:
谢谢史蒂夫!访问服务的另一种方法(如果您不想使用 NodePort)是使用 kubectl port-forward 访问底层 pod。例如,您可以运行:kubectl port-forward mypod 8080:8080
,使 pod 在localhost:8080上可用
谢谢史蒂夫。关于您的第一个答案,您的意思是说 127.0.0.1 是节点(在这种情况下为 VM)的唯一 nw 接口,其中的 pod 可以通信,对吗?其次,当我运行 'kubectl exec my-nginx-yczg9 -- sh -c "ifconfig -a'' 时,它会为 eth0 提供一些 IP,例如 172.17.0.4。现在,据我了解,my-nginx-yczg9 是pod 和一个 pod 可以有 N 个容器。所以可以公平地说 172.17.0.4:80 是一个 Pod IP(虚拟 IP-端点?),它将被代理到在 pod 内运行的适当 nginx 容器,并且该容器将具有IP 在 docker 子网内?
谢谢 diorec,端口转发命令在这里如何工作?如果我错了,请纠正我:根据我的理解,我的机器(主机)本地主机 ip(即 127.0.0.1:8080)将充当 192.168.99.100:30001 的代理?其中命令将是 kubectl port-forward mypod 8080:30001
127.0.0.1 是节点的名称(您唯一的节点)。它正在运行集群的所有组件。网络内的 Pod 有自己的 ip,这些 ip 只能在集群内寻址。那就是您提到的 172.* 地址。这有帮助吗?
如果您想在不使用 nodePort 的情况下将流量从本地环境路由到服务,请参阅此主题:***.com/a/42658974/4716370以上是关于minikube:无法连接本地部署的 nginx 服务的主要内容,如果未能解决你的问题,请参考以下文章
一旦在 Kubernetes/Minikube 中,Kafka 就无法访问