K8S网络通讯方式

K8S网络通讯方式

  • 网络通讯方式
    • 网络通讯模式-1
    • 网络通讯模式-2
    • 网络解决方案Kubernetes+Flannel -1
    • 网络解决方案Kubernetes+Flannel -2
    • 网络解决方案Kubernetes+Flannel -3
    • 不同情况下网络通信方式
    • 组件通讯示意图

网络通讯方式

网络通讯模式-1

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

网络通讯模式-2

同一个pod内的多个容器之间:lo
各pod之间的通讯:Overlay Network
pod与service之间的通讯:各节点的Iptables规则

网络解决方案Kubernetes+Flannel -1

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

网络解决方案Kubernetes+Flannel -2

K8S网络通讯方式_第1张图片

网络解决方案Kubernetes+Flannel -3

ETCD之Flannel提供说明:

  • 存储管理Flannel可分配的IP地址段资源
  • 监控ETCD中每个pod的实际地址,并在内存中建立维护pod节点路由表

不同情况下网络通信方式

同一个pod内部通讯:同一个pod共享同一个网络命名空间,共享同一个linux协议栈。
Pod1至Pod2

  • pod1与pod2不在同一台主机,pod的地址是与docker0在同一个网段的,但docker0网段与宿主机网卡是两个完全不同的IP网段,并且不同node之间的通信只能通过宿主机的物理网卡进行。将pod的IP和所在node的ip关联起来,通过这个关联让pod可以互相访问
  • pod1和pod2在同一台机器,由于Docker0网桥直接转发请求至pod2,不需要经过Flannel
    pod至Service的网络:目前基于性能考虑,全部为IPtables维护和转发
    pod到外网:pod向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主网卡完成路由选择后,IPtables执行Masquerade,把源ip更改为宿主网卡的ip,然后向外网服务器发送请求。
    外网访问pod:Service

组件通讯示意图

K8S的三层网络:

  • 节点网络
  • Pod网络
  • Service网络

真实的物理网络:节点网络
虚拟网络:pod网络、service网络
K8S网络通讯方式_第2张图片

你可能感兴趣的:(Kubernetes,kubernetes,docker,网络)