For container orchestration, there are two major challenges to be solved: managing container hosts (nodes) and managing the networking between containers. If you limited your container host cluster to only one node, networking would be fairly simple—for Docker on Linux, you would use the default bridge network driver, which creates a private network (internal to the host), allowing the containers to communicate with each other. External access to the containers requires exposing and mapping container ports as host ports. But now, if you consider a multi-node cluster, this solution does not scale well—you have to use NAT and track which host ports are used, and on top of that, the applications running in containers have to be aware of the networking topology.
Fortunately, Kubernetes provides a solution to this challenge by providing a networking...