在我的mac上尝试Kubernetes,在this guide之后使用docker-toolbox,我不明白为什么我需要这一步:
Note: On OS/X you will need to set up port forwarding via ssh:
boot2docker ssh -L8080:localhost:8080
api服务器正在运行--net=host
所以我应该能够curl <ip-of-my-docker-machine>:8080
但我得到了“拒绝连接”。使用ssh设置端口转发解决了问题,但我仍然不明白为什么我不能直接卷曲主机。任何解释都会很棒。
答案 0 :(得分:1)
api服务器只侦听localhost,而不是docker-machine ip地址。
您可以让主机VM将来自docker-machine ip的请求转发到localhost with
docker-machine ssh default sudo /usr/local/sbin/iptables -t nat -I PREROUTING -p tcp -d $(docker-machine ip) --dport 8080 -j DNAT --to-destination 127.0.0.1:8080
答案 1 :(得分:0)
在Mac上docker runs inside the boot2docker virtual machine。使用--net=host
选项,api服务器在VM的主机网络上运行,而不是Mac的主机网络。您也可以在没有端口转发的情况下进入boot2docker VM并从那里卷曲API,然后您只需要在ssh-ed下载kubectl
客户端到虚拟机中。
您不能curl <ip-of-my-docker-machine>:8080
因为Docker VM默认拒绝外部流量,而Docker不会自动设置防火墙规则以在使用--net=host
时允许流量。 This article更深入。