Kubernetes中的网络通讯模式

网络模型:假定所有的Pod都在一个可以直接连通的扁平的网络空间中。这在GCE(Google Computer Engine)里面是现成的网络模型,kubernetes假设这个网络已经存在。而在私有云里搭建Kubernetes集群时我们需要自己实现这个网络假设,将不同节点上的Docker容器之间的互相访问先打通。
实现方式有

  • 同一个Pod内容器之间通信:通过共享Pause的网络栈,实现容器间通过localhost访问
  • Pod与Pod之间通信:通过Flannel实现扁平化网络。Flannel的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址,然后在这些虚拟IP地址间建立一个覆盖网络(Overlay Network),通过这个网络,数据包将原封不动地传递到目标容器内
  • Pod与Service之间通信:通过各节点的Iptables规则(最新版中通过LVS转发)
  • Pod到外网:Pod向外网发送请求,查找路由表,转发数据包到宿主机的网卡

ETCDFlannel

  • ETCD存储管理Flannel可分配的IP地址段资源。Flannel启动后会向ETCD中插入可被分配的网段。且记录当前网段被分配情况
  • Flannel监控ETCD中每个Pod的实际地址,并在内存中建立维护Pod节点路由表
  • Kubernetes中的网络通讯模式