《Kubernetes网络权威指南》读书笔记 | 天生不易:容器组网的挑战

Posted COCOgsta

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Kubernetes网络权威指南》读书笔记 | 天生不易:容器组网的挑战相关的知识,希望对你有一定的参考价值。

书籍来源:《Kubernetes网络权威指南:基础、原理与实践》

一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:《Kubernetes网络权威指南》读书笔记 | 汇总_COCOgsta的博客-CSDN博客


一句话概括,容器网络的挑战:“以隔离的方式部署容器,在提供隔离自己容器内数据所需功能的同时,保持有效的连接性”。

2.5.1 容器网络挑战综述

容器网络最大的挑战在跨容器通信层面,具体有以下几点:

  • 容器基于网络隔离能力较弱的network namespace,容器网络的设计首要考虑隔离性和安全性;
  • 很多情况下容器会被部署在虚拟机内部,这种嵌套部署对应一个新的组网模型;
  • 大规模的容器部署势必涉及不同主机上的网络通信;
  • 容器重启更加频繁(重启后IP地址将发生变化),需要进行高效的网络地址管理;
  • 容器上面IP地址的分配通常是动态的,只有真正运行后才能知道;
  • 原生的Docker容器不支持热迁移,迁移后的容器面临IP地址漂移,对应的网络策略的刷新要及时跟上;
  • 容器的部署数量远大于虚拟机,IP地址可能会不够容器分配;
  • 大规模跨机部署带来多主机间的ARP洪泛;
  • iptables和NAT的结合使用限制了容器网络方案可扩展性和性能;
  • 使用veth设备会影响网络性能;
  • 过多的MAC地址。

针对以上挑战,有一些针对性的解决方案。例如,可以使用Macvlan和IPvlan替代veth。当使用IPvlan驱动时,IPvlan工作在L3。

对NAT的依赖及NAT自身的局限性,可以直接将容器连接到主机的网络接口来实现这一点。

消除NAT的第二种方法是把主机变成全面的路由器,甚至是使用BGP的路由器。

以上这些都只是针对某个具体问题的,而非整体的端到端的方案。Docker最初并没有提供必要的此类能力,导致容器的可见性只存在于主机内部,严重地限制了容器集群的规模及可用性!

2.5.2 Docker的解决方案

Docker目前拥有两种网络解决方案,一种是原生方式,即Docker官方支持且无须配置的开箱即用。同时,Docker将网络管理从Docker Daemon中独立出来形成Libnetwork,提供多种网络驱动,并支持跨主机的网络部署等功能,也允许第三方网络管理工具以插件方式替代Docker中内置的网络功能,接口标准便是CNM。

尽管Libnetwork提供了基本的跨机通信功能,但内置的网络功能相对于专业的网络插件显得比较简单。

2.5.3 第三方容器网络插件

随着Docker的兴起,一些专业的容器网络插件,例如flannel、Weave、Calico等也开始与各个容器编排平台进行集成。

第三方容器网络插件的目标无非就是解决以下三个问题。

  1. 你会在基于容器的基础设施上运行哪种类型的应用程序?

面向容器的虚拟网络解决方案让用户和网络管理员都可以定义并控制各自的网络要求。解决方案还必须提供跨多个物理主机的微分段(micro-segmentation)和隔离所需要的能力。

  1. 性能和可扩展性方面的要求是什么?

应当考虑这样的解决方案:在一种完全分布式的架构中提供隔离和网络功能,为应用程序的发展和扩展铺平道路。网络解决方案应该跨多个物理主机向外扩展,还应该在云编排框架里紧密地整合起来。

  1. 你需要将容器与虚拟机和裸机工作负载互联起来吗?

要寻求同时支持两者的解决方案。一致的抽象模型(网络、子网、路由器、接口和浮动IP地址)和一套用于配置和自动化的一致的API,是完成这项工作的方法。

以上是关于《Kubernetes网络权威指南》读书笔记 | 天生不易:容器组网的挑战的主要内容,如果未能解决你的问题,请参考以下文章

《Kubernetes网络权威指南》读书笔记 | iptables

《Kubernetes网络权威指南》读书笔记 | 打通CNI与Kubernetes:Kubernetes网络驱动

《Kubernetes网络权威指南》读书笔记 | Kubernetes网络策略:为你的应用保驾护航

《Kubernetes网络权威指南》读书笔记 | 最常用的Docker网络技巧

《Kubernetes网络权威指南》读书笔记 | Linux隧道网络的代表:VXLAN

《Kubernetes网络权威指南》读书笔记 | 主角登场:Linux容器