本人在“极客时间”上购买了一套“趣谈网络协议”的课程,本文为该课程第29-31讲(容器网络、Flannel、Calico)的课程笔记。
1. 容器网络介绍
- 容器就是 Container,而 Container 的另一个意思是集装箱。其实容器的思想就是要变成软件交付的集装箱。集装箱的特点,一是打包,二是标准。
- 容器是一种比虚拟机更加轻量级的隔离方式,主要通过 namespace 和 cgroup 技术进行资源的隔离,namespace (命名空间)用于负责看起来隔离,cgroup (机制网络)用于负责用起来隔离。
- 容器网络连接到物理网络的方式和虚拟机很像,通过桥接的方式实现一台物理机上的容器进行相互访问,如果要访问外网,最简单的方式还是通过 NAT。
2. Flannel
- 物理机 A 上的容器如何访问到物理机 B 上的容器呢?
Flannel 使用 UDP 实现 Overlay 网络的方案可以解决容器跨主机互通的问题。 - 基于 NAT 的容器网络模型在微服务架构下有两个问题,一个是 IP 重叠,一个是端口冲突,需要通过 Overlay 网络的机制保持跨节点的连通性。
- Flannel 是跨节点容器网络方案之一,它提供的 Overlay 方案主要有两种方式,一种是 UDP 在用户态封装,一种是 VXLAN 在内核态封装,而 VXLAN 的性能更好一些。
3. Calico
- Calico 网络的大概思路,即不走 Overlay 网络,不引入另外的网络性能损耗,而是将转发全部用三层网络的路由转发来实现。
- Calico 推荐使用物理机作为路由器的模式,这种模式没有虚拟化开销,性能比较高。
- Calico 的主要组件包括路由、iptables 的配置组件 Felix、路由广播组件 BGP Speaker,以及大规模场景下的 BGP Route Reflector。
- 为解决跨网段的问题,Calico 还有一种 IPIP 模式,也即通过打隧道的方式,从隧道端点来看,将本来不是邻居的两台机器,变成相邻的机器。
网友评论