【Calico系列】4 数据中心网络简述

本文是 Calico 系列的第四篇文章,上一篇了解了 calico 的组件、架构与原理,这篇学习数据中心的网络设计。本篇的内容为血衫学习文末参考资料后的笔记。

由于网络的水深与个人能力有限,本文不免存在错误之处。如有疑问,请查阅文末参考资料或与我线上/线下讨论。

一、分层网络设计

思科的分层(三层)互连网络模型(hierarchical internetworking model)是工业界设计可靠、可扩展、高性价比的互连网络时广泛采用的模型。

讨论网络设计时,通常根据设备数量将网络分成几类:

  • 小型网络:支持最多 200 个设备
  • 中型网络:支持 200 ~ 1000 个设备
  • 大型网络:支持 1000+ 设备

网络设计随规模和公司需求的不同而不同。例如,小公司的设备数量比较少,因此网络基础 设施就无需像大公司设计的那么复杂。

思科分层网络模型中的三个层:接入层、汇聚层、核心层。

早期网络

早期的网络都是扁平拓扑(flat topology):

img

当更多的设备需要接入网络时,就添加集线器(hub)和交换机(switch)。扁平网络设计 的缺点是很难控制广播流量,或者对特定流量进行过滤。当网络中的设备越来越多时, 响应时间也会越来越慢,最终使得网络不可用。

因此,我们需要一个更好的方案。现在,大部分公司都使用下图所示的分层网络方案:

img

将扁平网络划分成更小、更易管理的组成部分的好处是可以将本地流量限制在本地( local traffic remains local)。只有目的是其他网络的流量才会被传送到更高的层。

一个典型的企业分层局域网(hierarchical LAN)包括三层:

  • 接入层:提供工作组/用户接入网络的功能
  • 汇聚层:提供基于策略的连接功能,控制接入层和核心层的边界
  • 核心层:提供汇聚层交换机之间的高速传输

另一个三层分层网络设计如下图所示,注意其中的每个 building 都是分层网络模型 ,包括了接入层、汇聚层和核心层。

img

注意:设计网络的物理拓扑并没有绝对的规则。虽然很多网络都是基于三层的物理 设备搭建的,但这并不是强制条件。在小一些的网络中,核心层和汇聚层可能会合并为一层,由同一个物理交换机充当,这样网络就变成了两层。这被称为 collapsed core design(塌缩的核心层设计)。


【Calico系列】3 Calico的组件、架构与原理

本文是 Calico 系列的第三篇文章,继上一篇了解 BGP 的基本概念,这一篇真正进入 Calico 的笔记。本篇以 Calico 3.4 版本 为基准。

由于网络的水深与个人能力有限,本文不免存在错误之处。如有疑问,请查阅文末参考资料或与我线上/线下讨论。

目录:

  1. Calico架构
  2. Calico 数据路径——路由与iptables

一、Calico架构

img

  • Felix 跑在每个节点上,负责配置路由、ACL、向etcd宣告状态等;
  • Orchestrator plugin 适配不同架构的插件;
  • etcd 主要负责网络元数据一致性,确保Calico网络状态的准确性;
  • BGP Client (BIRD) 负责把 Felix 写入Kernel的路由信息 分发到整个 Calico网络,确保 workload 连通;
  • BGP Route Reflector (BIRD) BGP路由反射器,大规模部署时使用,通过一个或者多个BGP Route Reflector来完成集中式的路由分发。

img

通过将整个互联网的可扩展 IP 网络原则压缩到数据中心级别,Calico 在每一个计算节点利用 Linux kernel 实现了一个高效的 vRouter 来负责数据转发,每个vRouter通过BGP协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络传播。

这样保证最终所有的 workload 之间的数据流量都是通过 IP 包的方式完成互联的。

calico的各个组件通过操作linux 路由表、iptables等来控制数据包的流向,本身不接触数据包。即使停掉calico组件,只要路由表记录还在,便不影响容器通信

img

特别地,在 kubernetes 架构中,当 calico 作为策略和网络组件时,实际运行了两类容器:

$ kubectl get po -n kube-system |grep calico

calico-kube-controllers-5f6db94794-cmqs4      1/1       Running   1          74d
calico-node-k92qh                             1/1       Running   1          74d
calico-node-lt7sn                             1/1       Running   1          74d
calico-node-qh596                             1/1       Running   1          74d
calico-node-wt8n9                             1/1       Running   1          74d

在每个节点上运行的calico-node 的pod,pod 内部实际上运行了如下进程:

1579073471763


【Calico系列】2 BGP入门笔记

本文是 Calico 系列的第二篇文章,在第一篇中对 Calico 官网 Blog 做了个回顾,了解团队和项目的开发情况。这一篇文章了解 BGP 协议的基础,以便更好理解地 Calico。这篇文章记录 BGP 的基本概念、原理和它的基本配置。

由于网络的水深与个人能力有限,本文不免存在错误之处。如有疑问,请查阅文末参考资料或与我线上/线下讨论。

目录:

  1. BGP 基本概念
  2. BGP工作原理
  3. BGP 路由属性
  4. BGP路由选择策略
  5. BGP安全性
  6. 路由反射器(RR)
  7. BGP联盟

一、BGP 基本概念

动态路由协议可以按照工作范围分为IGP以及EGP。

IGP工作在同一个AS内,主要用来发现和计算路由,为AS内提供路由信息的交换;而EGP工作在AS与AS之间,在AS间提供无环路的路由信息交换。

BGP则是EGP的一种。边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议。

一个概念伴随着N个概念而来。下面来看这几个概念又是什么意思:

  1. AS(Autonomous system):自治系统,在一个实体管辖下的拥有相同选路策略的IP网络。BGP网络中的每个AS都被分配一个唯一的AS号,用于区分不同的AS。AS号分为2字节AS号和4字节AS号,其中2字节AS号的范围为1至65535,4字节AS号的范围为1至4294967295。支持4字节AS号的设备能够与支持2字节AS号的设备兼容。

    • 中国电信163 AS号:4134

    • 中国电信CN2 AS号:4809

  2. IGP(Interior Gateway Protocol):内部网关协议,在一个AS内部所使用的一种路由协议。一个AS内部也可以有多个路由器管理多个网络。各个路由器之间需要路由信息以知道子网络的可达信息。IGP就是用来管理这些路由。代表的实现有RIP和OSPF。

  3. EGP(Exterior Gateway Protocol):外部网关协议,在多个AS之间使用的一种路由协议,但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求。现在已经淘汰,被BGP取而代之。

使用BGP的理由:

  1. BGP能够承载大批量的路由前缀
  2. 支撑MPLS/VPN应用,传递客户VPN路由
  3. 支持多协议的扩展
  4. BGP采用认证和GTSM的方式,保证了网络的安全性。
  5. BGP提供了丰富的路由策略,能够灵活的进行路由选路,并且能指导邻居按策略发布路由。
  6. BGP提供了路由聚合和路由衰减功能由于防止路由震荡,有效提高了网络的稳定性。
  7. BGP使用TCP作为其传输层协议(目的端口号179),并支持与BGP与BFD联动、BGP Tracking和BGP GR和NSR,提高了网络的可靠性。
  8. 在邻居数目多、路由量大且大部分邻居具有相同出口的策略的场景下,BGP使用按组打包技术极大的提高了BGP打包发包性能。

BGP 协议特征

  1. BGP使用TCP传输层协议,179端口,BGP的对等体无需直连(MPLS点了个赞👍)。
  2. 存在两种类新的 BGP 对等体关系——EBGP和IBGP。
  3. 对等体关系建立完成后,BGP路由器只发送增量更新或触发更新(不会周期性更新,对链路带宽影响小!)。
  4. BGP具有丰富的路径属性和强大的策略工具
  5. BGP能够承载大批量的路由前缀,用于大规模的网络中。
  6. 目前主要的BGP版本为V4以及MP-BGP。

TCP 连接的窗口是65K字节,也就是说TCP连接允许在没有确认包的情况下,连续发送65K的数据。而其他的路由协议,例如EIGRP和OSPF的窗口只有一个数据包,也就是说前一个数据包收到确认包之后,才会发送下一个数据包。当网络规模巨大时,需要传输的数据也相应变大,这样效率是非常低的。这也是它们不适合大规模网络的原因。而正是由于TCP可以可靠的传输大量数据,且互联网的路由信息是巨大的,TCP被选为BGP的传输层协议,并且BGP适合大规模网络环境。

BGP 分类

BGP按照运行方式分为EBGP(External/Exterior BGP)和IBGP(Internal/Interior BGP)。

EBGP:运行于不同AS之间的BGP称为EBGP。为了防止AS间产生环路,当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃。

IBGP:运行于同一AS内部的BGP称为IBGP。为了防止AS内产生环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接。为了解决IBGP对等体的连接数量太多的问题,BGP设计了路由反射器(RR)和BGP联盟。

BGP 协议报文类型

1578916372518