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

Kubernetes locally via Docker: why do we need port forwarding?

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

在 Mac 秒 docker runs inside the boot2docker virtual machine。使用 --net=host 选项,api 服务器在 VM 的主机网络上是 运行,而不是 Mac 的主机网络。您也可以在没有端口转发的情况下通过 ssh 进入 boot2docker 虚拟机并从那里卷曲 API,然后您只需要下载 kubectl 客户端,同时 ssh-ed 进入虚拟机。

您不能 curl <ip-of-my-docker-machine>:8080 因为 Docker 虚拟机默认拒绝外部流量,并且 Docker 不会自动设置防火墙规则以允许流量 --net=host用来。 This article 更深入。

api 服务器只监听本地主机,而不是 docker-机器 ip 地址。

您可以让主机 VM 将来自 docker 机器 ip 的请求转发到具有

的本地主机
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