Kubernetes本地通过Docker:为什么我们需要端口转发?

时间:2015-12-30 14:10:04

标签: docker kubernetes docker-machine

在我的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设置端口转发解决了问题,但我仍然不明白为什么我不能直接卷曲主机。任何解释都会很棒。

2 个答案:

答案 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更深入。