如何在Mac OSX上让minikube VM使用主机机器的VPN配置

83次阅读
没有评论

问题描述

在编写一个脚本,用于在本地minikube集群上部署一些应用程序进行开发。这个脚本在Linux上运行良好,但在Mac OSX上尝试时出现了问题。
在Mac OSX上启动minikube时,它会启动一个运行minikube集群的虚拟机,而不是使用主机系统的内核。
这个设置的一个重要部分是,我们部署到minikube集群的所有docker镜像都托管在一个私有的docker仓库中,该仓库托管在一个私有网络上。我们使用VPN在需要时访问镜像仓库,这在Linux上运行时解决了问题,因为容器共享主机机器的网络配置,并通过VPN隧道强制访问。
然而,在Mac OSX上运行脚本时,minikube集群无法访问私有的docker仓库,因为它是在一个不通过VPN隧道的虚拟机中运行的。这导致集群无法拉取镜像。
是否有任何好的方法可以让Mac OSX上的minikube也使用主机机器的VPN配置呢?我一直在寻找一个适合我的解决方案,但是一直找不到合适的解决方案。
最好的解决方案是不依赖于任何特定的VPN软件,而是在操作系统级别上解决问题(希望你明白我在这里的意思),这样开发人员可以使用任何他们想要的VPN客户端软件。
感谢任何帮助。我只是希望这个脚本在所有机器上都能运行相同的方式。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

一个简单但有些hacky的解决方案是在VPN上禁用分割隧道,这将强制主机的所有流量通过VPN本身。
如何禁用分割隧道取决于您使用的具体客户端。在某些情况下,您可能需要向VPN的管理员(例如您公司的IT部门)请求在VPN设备本身上启用此选项。

方案2

以下解决方案仅适用于OSX操作系统。
在我的情况下,我遇到了在OSX上使用minikube时的这个问题,所以这个答案可能不适用于其他操作系统。
minikube start命令中添加--hyperkit-vpnkit-sock=auto标志可以解决我的问题。这将限制您只能使用hyperkit驱动程序。是否值得这样做取决于您自己。
以下是我的完整minikube start命令:

minikube start --hyperkit-vpnkit-sock=auto --vm=true --driver=hyperkit

在上面的示例中,我们在minikube start命令中添加了--hyperkit-vpnkit-sock=auto标志。这将解决minikube无法通过VPN隧道访问私有docker仓库的问题。
请注意,这个解决方案只适用于OSX操作系统,并且限制您只能使用hyperkit驱动程序。

正文完