Docker 端口绑定不是避免了对 Kubernetes 复杂网络模型的需求吗?

Doesn't Docker port binding obviate the need for Kubernetes' complex networking model?

Kubernetes 有一个相当复杂的网络模型,似乎 以规避 Docker 默认网络的严重缺陷为前提:

默认情况下 Docker 容器无法直接从外部世界联系,因为它们的 IP 地址是 local/private 它们所在的子网。

为了避免这种情况,Kubernetes 有一个非常复杂的网络模型,除其他外,它要求您创建自己的平面 IP space,然后由所有主机和容器共享(pods), 从而为每个 pod 提供自己的 public IP。

但是请问:Docker port binding不是已经解决了吗?如果没有,那么还缺少端口绑定呢,需要Kubernetes使用他们使用的网络解决方案?

这在 motivation section of Kubernetes's networking design doc 中有详细描述。

从本质上讲,依赖端口绑定需要动态端口映射,以避免需要相同端口的不同容器之间发生冲突(例如,很多应用程序需要端口 80)。虽然动态端口映射可以工作,但它也会导致很多问题,如文档中所述。