A Name Space consists of a Network Stack sharing: NIC’s, routing tables, forwarding rules, Firewall Rules, L4 Ports (sockets)… Each OS has by default a global (also called root or host) Namespace.
In Kubernetes you can build one or more extra Namespaces (as required). Each New Namespace here shares a Network Stack for one or more POD’s. (Each Namespaces is independent from other namespaces or it’s host’s OS/Namespace).
Each POD has a unique IP-address. This address is part of a subnet (podCIDR) unique to the Node. All these unique Node Subnets are parts from a bigger subnet call Cluster CIDR. For example: Pod1 has IP 172.17.1.10/24 which comes from PodCIDR 172.17.1.0/24 for Node1 and all the Nodes will have a unique Subnet from the Cluster CIDR 172.17.0.0/16.
The interconnection between Namespaces happens by Veth devices. You can see these as a virtual patch cable.

In order to allow communication between POD’s in the SAME Network Namespace but on DIFFERENT Nodes. An Overlay Network is required: By Default this is Flannel(for Kubernetes, Canal for Rancher) which uses (L2 VXLAN Technology running over UDP with a Default MTU of 1450) a common different technology is Calico (default IP-in-IP L3 Tunnel technology). In Kubernetes this types of networks overlay are done by choosing a CNI Plugin (Which exists between Kubelet and POD NameSpace). Their are many CNI Plugin’s