1. 提出问题的目的

为什么k8s的pod需要基于一个overlay网络,比如flannel呢?

提出这个问题的目的,是为了搞懂overlay网络在k8s的必要性,并且可以理解overlay网络在k8s网络架构中的位置和作用

2. 假设没有overlay网络会怎样

我们先从一个假设开始,如果k8s的pod网络不是建立在一个大二层的overlay网络之上,那么pod网络应该如何设计(如何分配消息和如何通讯);

通过分析这个假设,来理解flannel的用处和必要性

官方的说法是,flannel提供pod跨节点(node)的通讯

我们先看看报文是如何跨节点通讯的

node1上:pod1->cni1->flannel1->node1的网卡

node2上: node2的网卡接收到数据-> flannel2->cni2->pod2

设想一下,如果没有flannel构造的overlay网络,cni使用的是underlay网络的ip(就是node物理网卡所属网络的ip)

我们从分配ip阶段和传输数据阶段来分析无overlay网络的情况下,如何设计

在分配pod id阶段:

因为pod id是基于underlay网络的,所以会预留underlay网络的一部分ip网段用于分配给pod;

那么这样就会遇到几个问题

  1. ip资源少,比如underlay网络若是192.168.0.0/24网段,那么其中能留给pod使用的ip个数就非常少了
  2. 如果underlay网络是由两个不同网段的网络通过交换机或其它的隧道技术连接起来的,那么也会出现跨网段的pod ip(即有些pod ip是属于网段1,有些pod ip属于网段2),当然这不会影响pod间的通讯
  3. underlay网络修改网段时,会导致pod ip同时变更
  4. 当pod进行跨网段迁移(迁移到不同的数据中心),pod ip必须要变化,包括相关的路由配置,service路由配置都要同步更新

在传输数据阶段:

1. 两个数据中心,也可能有相同ip的机器,这样通讯就要通过代理、nat或端口映射技术才能通讯,而引用overlay网络的目的就是希望pod之间能直接通讯

3. 总结

如果pod ip不是基于overlay网络,而是基于underlay网络,那么会遇到以下的问题

      1. 可分配ip数目依赖于underlay网络的网络规划,有可能可用ip数目很少

      2. 跨网段通讯需要nat或其它映射技术的支持

      3. underlay网络ip的变化有可能会导致pod ip的变化

因此, pod基于overlay网络之上,是使用构造虚拟网络来解耦真实网络,

它带来的好处就是官方所说的,如下:

1. pod之间通讯可直接通讯,而不需要nat等地址映射技术

2. overlay网络与underlay网络解耦

3. ip资源丰富,不依赖于underlay网络的ip资源

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐