一、概述
1、我们在学习docker时知道docker有四种常用的网络模型
a、bridge:桥接式网络
b、joined:联盟式网络,共享使用另外一个容器的网络名称空间
b、opened:容器直接共享使用宿主机的网络名称空间
c、none:不使用任何网络名称空间
2、无论是哪一种网络方式都会导致如果我们跨节点之间的容器之间进行通信时必须要使用NAT机制来实现,任何pod在访问出去之前因为自己是私有网络中的地址,在离开本机时候必须要做源地址转换以确保能够拿着物理机的地址出去,而后每一个pod要想被别人所访问或者每一个容器在上下文当中它也访问不到我们还来做什么?从下图中可以看到,第一个节点上我们有container1,container1自己使用虚拟网卡(纯软件)的方式生成一个网络接口,它通常是一个v1th格式的网络接口,一半在容器上一半在宿主机上并关联到docker0桥上,所以他是一个私网地址,我们使用172.17.0.2这样的地址,很显然在这个地址出去访问其它物理机地址的时候物理机能收到请求没有问题因为它的网关有可能都已经通过打开核心转换要通过eth0即宿主机的网络发出来,但是对端主机收到以后响应给谁?是不是没法响应了,因为这是私网地址,而且是nat背后的私网地址,或者是位于某个服务器背后的私有地址,因此为了确保能够响应到我们任然能送回我们的主机,因此