<p>Kubernetes has a pretty complicated networking model that <em>appears</em> to be predicated upon circumventing a critical flaw with Docker's default networking:</p>

<p>By default Docker containers cannot be contacted directly from the outside world, because their IP addresses are local/private to the subnet they're on.</p>

<p>To circumvent this, Kubernetes has a very complex network model that, amongst other things, requires you to carve out your own flat IP space that is then shared by all hosts and containers (pods), thus giving each pod its own public IP.</p>

<p>But I ask: isn't this already addressed by <a href="https://docs.docker.com/articles/networking/#binding-ports" rel="nofollow">Docker port binding</a>? If not, then what about port binding is still lacking, that requires Kubernetes to use the networking solution that they use?</p>

<p>This is well described in the <a href="https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/design/networking.md#model-and-motivation" rel="nofollow">motivation section of Kubernetes's networking design doc</a>.</p>

<p>Essentially, relying on port binding requires dynamic port mapping to avoid conflicts between different containers wanting the same port (e.g. a lot of applications will want port 80). While dynamic port mapping can be made to work, it also causes a lot of problems, as outlined in the doc.</p>
