微服务架构师封神之路10-解决Macbook无法通过ip访问minikube
原因
minikube网络设置的实现是在虚拟机层面上的。先要查看你的minikube是运行在什么虚拟机上的。一般我们安装minikube的时候只是简单的使用命令,
minikube start
这个命令后面隐藏了很多参数的设置,其中一项是关于虚拟机的,
minikube start --help
......
--driver='': Driver is one of: virtualbox, parallels, vmwarefusion, hyperkit, vmware, docker, ssh (defaults to
auto-detect)
如果你不指定,minikube会自动识别。我的macbook之前只安装了docker desktop,所以很显然我的minikube的虚拟机用的是docker。再去看一下docker文档,关于网络设置的部分,https://docs.docker.com/docker-for-mac/networking/。也说得很清楚了,目前mac上的docker网络设置有一些限制,不能通过ip去直连docker container。
理解了以上部分,解决方案也不难了。minikube的网络设置直接依赖于虚拟机;docker在mac上的实现还不能做到从本地用ip直接连接container,所以你需要做的就是换一个能满足你网络设置需求的虚拟机软件,virtualbox是个不错的选择,当然你可以使用你自己熟悉的其它虚拟机软件。
使用virtualbox做minikube的虚拟机实现
安装minikube前,先安装virtualbox。安装顺序,
- virtualbox
- 下载minikube
但是因为我是做开发使用,需要在本地build docker image,所以还要额外安装docker desktop。
安装minikube的时候,可以显示的指定使用virtualbox,以防万一,毕竟你在环境中也安装了docker,
minikube start --driver=virtualbox
安装在virtualbox上,默认会设置两个网络,NAT和Host-only
本地与minikube中服务的相互访问就可以利用Host-only网络。
minikube与本地相互访问
本地ip
# local ip address in host-only network
ifconfig
在minikube中可以使用192.168.99.1访问部署在本地的服务,数据库,Redis,Kafka之类,应用周边的存储服务。他们不需要反复部署或安装,安装在本地更合理一些。
minikube和服务的ip地址
# minikube ip
minkube ip
# or
minkube ssh
ifconfig
# 微服务的访问地址(如果已经为微服务设置好了前端服务)
minikube service list
总结
虽然是为解决在mac上安装minikube,本地和minikube间无法建立通信的问题,但在其它操作系统安上装minikube也可以参考借鉴本文的一些想法。谢谢!