关于这个主题有很多问题,但不是我所追求的具体信息。
主机操作系统是 Mac,最近由于许可变更不得不卸载 Docker Desktop。因此,我们改为使用 minikube,它与 VirtualBox 驱动程序一起工作得很好。
但理想情况下,我们希望使用 hyperkit 驱动程序,因为它比 virtualbox 需要更少的资源,并且(据说)更快。这一切都很好,直到我们连接到我们的 VPN(使用 cisco anyconnect),然后 minikube VM 内的所有出站网络都停止工作。例如
k8> minikube ssh "traceroute 8.8.8.8"
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 46 byte packets
1 host.minikube.internal (192.168.64.1) 0.154 ms 0.181 ms 0.151 ms
2 * * *
其他一切都很好,通过入口的入站网络都很好。maven-docker-plugin 正在愉快地使用 minikube docker 守护进程创建图像。只是没有出境。
所以我想我会尝试使用 VPNKit,因为我已经读过它旨在解决这个问题。但是找不到很多详细的文档,所以很挣扎。
我们尝试用最少的配置启动 VPNKit:
vpnkit --ethernet /tmp/vpkit-ethernet.socket --debug
然后尝试启动 minikube,但失败:
k8> minikube delete
Deleting "minikube" in hyperkit ...
Removed all traces of the "minikube" cluster.
k8> minikube start --driver=hyperkit --hyperkit-vpnkit-sock=/tmp/vpnkit-ethernet.socket
minikube v1.25.1 on Darwin 10.15.7
✨ Using the hyperkit driver based on user configuration
Starting control plane node minikube in cluster minikube
Creating hyperkit VM (CPUs=2, Memory=6000MB, Disk=20000MB) ...
Deleting "minikube" in hyperkit ...
StartHost failed, but will try again: creating host: create: Error creating machine: Error in driver during machine creation: hyperkit crashed! command line:
hyperkit loglevel=3 console=ttyS0 console=tty0 noembed nomodeset norestore waitusb=10 systemd.legacy_systemd_cgroup_controller=yes random.trust_cpu=on hw_rng_model=virtio base host=minikube
Creating hyperkit VM (CPUs=2, Memory=6000MB, Disk=20000MB) ...
Failed to start hyperkit VM. Running "minikube delete" may fix it: creating host: create: Error creating machine: Error in driver during machine creation: hyperkit crashed! command line:
hyperkit loglevel=3 console=ttyS0 console=tty0 noembed nomodeset norestore waitusb=10 systemd.legacy_systemd_cgroup_controller=yes random.trust_cpu=on hw_rng_model=virtio base host=minikube
❌ Exiting due to PR_HYPERKIT_CRASHED: Failed to start host: creating host: create: Error creating machine: Error in driver during machine creation: hyperkit crashed! command line:
hyperkit loglevel=3 console=ttyS0 console=tty0 noembed nomodeset norestore waitusb=10 systemd.legacy_systemd_cgroup_controller=yes random.trust_cpu=on hw_rng_model=virtio base host=minikube
Suggestion: Hyperkit is broken. Upgrade to the latest hyperkit version and/or Docker for Desktop. Alternatively, you may choose an alternate --driver
Related issues:
▪ https://github.com/kubernetes/minikube/issues/6079
▪ https://github.com/kubernetes/minikube/issues/5780
在 vpnkit 日志中,我们看到:
time="2022-02-14T06:07:57Z" level=debug msg="usernet: accepted vmnet connection"
time="2022-02-14T06:07:57Z" level=warning msg="Uwt: Pipe.listen: rejected ethernet connection: EOF"
time="2022-02-14T06:08:07Z" level=debug msg="usernet: accepted vmnet connection"
time="2022-02-14T06:08:07Z" level=warning msg="Uwt: Pipe.listen: rejected ethernet connection: EOF"
所以有点暗示我开始 vpnkit 的方式不正确。玩过 IP args 以确保所有匹配,但无济于事。
我的猜测是--ethernet=path
arg 不是正确的套接字类型。我也看到了,--vsock-path=path
但指定这似乎不会像创建套接字文件那样--ethernet=path
。我必须以其他方式创建它吗?
或者我需要处理其他配置选项。例如,我认为--gateway-forwards=path
可以提供帮助,但找不到有关文件格式或内容的文档。
所以,我猜有两个主要问题:
- 我们正在尝试的东西是否可能?这是正确的方法吗?还是比简单地运行
vpnkit
命令复杂得多? - 如果我们走在正确的轨道上,有没有人有这方面的经验,并且知道如何为 minikube+vpnkit+hyperkit 设置套接字?需要什么参数、配置或其他设置?
请注意:--hyperkit-vpnkit-sock=auto
对我们来说不是一个选项,因为我们没有安装 docker,所以 docker 套接字文件不存在。
以防万一它是一个版本问题:
k8> minikube version
minikube version: v1.25.1
commit: 3e64b11ed75e56e4898ea85f96b2e4af0301f43d
k8> vpnkit --version
854498c13b1884d4a48d84f3569eb34681af2126
k8> hyperkit -v
hyperkit: 0.20200908
Homepage: https://github.com/docker/hyperkit
License: BSD