Kubernetes之网络通信方式详解

Kubernetes的网络通信方式是整个K8s的重点,所以更好的理解它的网络通信方式有助于我们更好的掌握Kubernetes。

Kubernetes网络设计模型:

  • 基本原则:每个Pod都有一个独立的IP地址,而且假定所有的Pod都在一个可以直接联通、扁平的网络空间中;
  • 设计原因:用户不需要额外考虑如何建立Pod之间的连接,也不需要将容器端口映射到主机端口的问题;
  • 网络要求:所有的容器都可以在不用NAT的情况下于其他容器进行通信;所有Node都可以在不用NAT的情况下于其他容器进行通信;容器的地址和别人看到的地址是同一个;

主要包含四大类通信问题

  1. 同一个Pod中容器间的通信;
  2. 同一Node不同Pod间的通信;
  3. 不同Node间的Pod通信;
  4. Pod与service之间的通信;

一、同一个pod中容器间的通信

同一个Pod的容器共享同一个网络命名空间,它们之间使用Puse的一个网络协议栈,可以理解为它们之间的访问可以通过localhost地址和容器端口实现;

在这里插入图片描述

二、同一Node不同Pod间的通信

同一Node不同Pod间是通过Docker网桥来进行数据包分配传输的,它们关联在同一个Docker0网桥上,地址网段相同,IP1、IP2、IP3属于同一个网段,所以它们之间能通信;
在这里插入图片描述

三、不同Node间的Pod通信

不同Node将的Pod通信是整个Kubernetes网络通信的难点,它基于Flanneld网络通信方式实现的;

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

我们来通过下图来具体分析一下不同Node将的Pod通信,我们首先解释一下下图的Flannel:
在这里插入图片描述

Flannel相当于一个守护进程,它会监听一个端口,这个端口就是后续进行数据转发和数据接受的一个服务端口,如果Flannel成功启动,它就会开启一个Flannel0 的一个网桥,这个网桥专门去收集Docker0转发出来的数据包,可以理解为一个钩子函数;

Flanneld这里会有一堆的路由表信息,它是存储在etcd中由Flannel去自动拉取的,不同Pod间的通信就需要这些路由表来确定具体的转发路径;

etcd对Flannel提供如下说明:
1、存储管理Flannel可分配的IP地址段资源;
2、监控ETCD中每个Pod的实际地址,并在内存中维护Pod节点路由表;

如果此时需要Node1节点的app1发送数据包到达Node2节点的Backend,那就需要通过一下步骤来使得两者构建通信:

  1. app1将自身IP地址、目标IP及其所发数据发送至Docker0的网桥;
  2. Docker0获取到发送的数据包,由于目标IP的网段与当前Docker0的网段不是同一个,所以它会通过钩子函数抓取数据信息继续发送至Flannel0的网桥;
  3. Flannel0网桥这时候会通过Flanneld中的路由表信息来确定具体的转发路径,此时会进行一个数据的二次封装,然后通过对应的外部节点IP(192.168.66.11/24)发送到目标外部IP(192.168.66.12/24);
  4. 发送到Node2节点之后会对数据包进行解析获取具体目标Pod的IP(10.1.20.3/24),然后发送到Backend从而完成整个Pod通信;

上述的数据包格式如下所示:
在这里插入图片描述

四、Pod与service之间的通信

目前基于性能考虑,使用各节点的IPtables规则来进行网络通信;

——————————————————————————————————————————————————

在这里补充一下关于外网的网络通信:

  1. Pod到外网:Pod向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主网卡完成路由选择后,IPtables执行Masquerade,把源IP修改为宿主网卡的IP,然后向外网服务器发送请求;
  2. 外网访问Pod:通过service来访问,一般使用NodePort;

参考书籍:《基于Kubernetes的容器云平台实战》
个人github账号:https://github.com/SpecialAll

发布了49 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41999455/article/details/104246356
今日推荐