1、概念

KUbernets的网络模型假定所有的POd都可以直接联通的一个扁平化(所有的pod都可以通过对方的ip直接到达:底层有转换机制)的网络空间,这在GCE(Google Computer Engine)里面是现成的网络模型,Kubernets假定这个网络已经存在。而在私有云里搭建Kubernets集群,就不能假设这个网咯已经存在。我们需要自己实现这个网络的假设,将不同节点上的Docker容器之间相互访问先大同,然后运行Kubernets。

同一个pod内有多个容器:互相访问共享pause,通过localhost之间进行通信
个pod之间的通讯:Overlay Network

Flannel是CoreOS团队针对Kubernets设计的网络规服务,简答来说,他的功能就是让集群中不同节点主机创建Docker容器都具有全集群唯一的虚拟ip地址。而且它还能在这些ip地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封不动的传递到目标容器内。

Kubernets + Flannel的通讯架构图

二、(3)网络通讯模式1_外网

ETCD和Flannel之间的关系
  存储管理Flannel可分配的ip地址段资源(Flannel启动时向ETCD插入可分配的网段,etcd并作记录)
  监控ETCD中每一个pod的实际地址,并在内存中建立维护pod节点路由表

2、不同情况下的网络通讯方式

同一个pod内部之间通讯:同一个pod共享同一个网络命名空间,共享同一个Linux协议栈(localhost)

pod1到pod2之间
  pod1和pod2不在同一台主机,pod的地址时与docker0在同一个网段的,单docker0网段与宿主机网卡是两个完全不同的ip网段,并且不同的Node之间的通讯只能通过宿主机的物理网卡进行。将pod的ip和所在的Node的ip关联起来,通过这个关系让pod可以相互通信。
  pod1和pod2在同一台机器,有Docker0网桥直接转发请求至pod2,不需要经过Fannel

pod至service的网络:目前基于性能考虑,全部为lvs维护和转发

pod到外网:pod向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主机网卡完成路由选择后,iptables执行Masquerade,把源ip更改为书主机网卡的ip,然后向外网服务器发送请求。

外网访问pod:service(nodepod)

3、组件通讯示意图

二、(3)网络通讯模式1_网络_02