数据中心如何实现传统网络与容器网络的架构共存

戏子无情 提交于 2020-03-24 19:45:21

一、概述
随着数据中心网络技术的革新,并伴随容器的落地,如何在数据中心内部构建一个合理可用的网络架构,以满足不同形态的业务部署模式,成为一个网络人员越来越需要注重和考虑的方向。

二、业务背景
在互联网公司的数据中心,通常你会越来越多的看到容器(k8s)作为业务/服务的载体,各业务/服务之间(pod间)彼此调用,以下从pod间调用、容器网络选型、容器网络架构、网络隔离几个方面进行阐述。

三、pod间调用

  1. 同一node内pod间调用
    数据中心如何实现传统网络与容器网络的架构共存
    pod间通过容器网络纯内部交互,这时外部网络无感知。

  2. 不通node的pod间调用
    数据中心如何实现传统网络与容器网络的架构共存
    pod间需要经过容器网络→外部网络进行交互,交互过程可提前将pod ip或cluster ip暴露到外网,具体依据业务需求和网络模型而定。

四、容器网络选型
容器网络选型通常参照以下几点:

  1. 业务实现方式;
  2. 网络资源调配;
  3. 网络扩展及灵活性;
  4. 对底层物理网络的依赖度;
  5. 网络资源的收放要求;

开源容器网络组件按照网络覆盖类型大致可分为:overlay和underlay,underlay相比overlay在传输效率、部署实现及维护等方面更有优势(详细的各种容器网络组件横向比较,可自行查询学习,此处不详细展开)。
以calico为例,作为underlay的容器网络解决方案,依靠动态路由协议bgp实现网络互通,并通过原生的network policy解决容器间网络隔离。
calico介绍:

  1. felix: calico agent,运行在每个node节点上,负责配置各节点路由及 ACL信息来确保每个pod的连通状态;
  2. etcd: 分布式键值存储,负责保存所有node节点的网络状态信息;
  3. bird: 负责把路由信息分发到当前calico网络,确保node间通信的有效性;
  4. 简单理解,calico可视作运行在node节点上的一个只有bgp功能的路由器(详细的calico介绍,可参见calico官网:https://www.projectcalico.org
  5. calico支持e/ibgp邻接关系,支持next-hop-self/next-hop-unchanged,建议优化bgp timer,开启graceful restart;

五、容器网络架构
calico建议组网架构如下图:

  • BGP-RR落在master节点,集群内的其他node与RR建立iBGP,考虑到容器网络稳定性,建议RR数量≥2:
    数据中心如何实现传统网络与容器网络的架构共存

  • 集群全部节点与外部物理网络建立iBGP/eBGP:
    数据中心如何实现传统网络与容器网络的架构共存

上述两种组网架构,结合实际业务场景进行选择,但无论哪种结构,均需要做好网络资源的科学合理规划,包括但不限于:

  1. IP地址
  2. BGP邻接关系选择
  3. ASN规划
  4. 路由收放策略
  5. 容器网络与底层网络的隔离需求

六、网络隔离
环境隔离,例如:生产环境和测试环境隔离,这里还需要考虑:

  1. 以node为环境最小粒度——隔离策略部署在外部物理网络,可通过ACLs、VRF等;
  2. 以pod为环境最小粒度——通过calico原生的network policy进行环境隔离;

七、总结
当前数据中心随着虚拟化/容器等技术的引进,对网络结构提出更高、更精细的规划需求,底层网络的技术选取、架构模型将更多的影响虚拟/容器网络的落地成本、实施难易度,因此需要网络规划者要在前期介入时,了解业务发展方向、技术发展方向及成本、灵活性等因素。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!