开发者社区> lixianfa1110> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

calico网络策略

简介: 基本原理 完全通过三层网络的路由转发来实现 calico ippool 以calico 3.2版本为准,在calico 3.3中增加了blockSize可变更以及针对namespace单独设置子网的功能参考:https://www.projectcalico.org/calico-ipam-explained-and-enhanced/ calico 不同于flannel不需要为每个node分配子网段,所以只需要考虑pod的数量;例如配置 172.0.0.0/16即总共可运行 2^16=65536个pod。
+关注继续查看

基本原理

完全通过三层网络的路由转发来实现

calico ippool

以calico 3.2版本为准,在calico 3.3中增加了blockSize可变更以及针对namespace单独设置子网的功能
参考:https://www.projectcalico.org/calico-ipam-explained-and-enhanced/

calico 不同于flannel不需要为每个node分配子网段,所以只需要考虑pod的数量;
例如配置 172.0.0.0/16即总共可运行 2^16=65536个pod。

ippool 分配细节:

默认情况下,当网络中出现第一个容器,calico会为容器分配一段子网(子网掩码/26,例如:172.0.118.0/26),后续出现该节点上的pod都从这个子网中分配ip地址,这样做的好处是能够缩减节点上的路由表的规模,按照这种方式节点上2^6=64个ip地址只需要一个路由表项就行了,而不是为每个ip单独创建一个路由表项。如下为etcd中看到的子网段的值:

注意:当64个主机位都用完之后,会从其他可用的的子网段中取值,所以并不是强制该节点只能运行64个pod ,只是增加了路由表项

Calico 网络的转发细节

容器 A1 的 IP 地址为 172.17.8.2/32,这里注意,不是 /24,而是 /32,将容器 A1 作为一个单点的局域网了。

容器 A1 里面的默认路由,Calico 配置得比较有技巧。

default via 169.254.1.1 dev eth0 
169.254.1.1 dev eth0 scope link 

这个 IP 地址 169.254.1.1 是默认的网关,但是整个拓扑图中没有一张网卡是这个地址。那如何到达这个地址呢?

ARP 本地有缓存,通过 ip neigh 命令可以查看。

169.254.1.1 dev eth0 lladdr ee:ee:ee:ee:ee:ee STALE

找个mac地址为外面 caliefb22cb5e12的mac地址,即到达物理机A路由器:

172.17.8.2 dev veth1 scope link 
172.17.8.3 dev veth2 scope link 
172.17.9.0/24 via 192.168.100.101 dev eth0 proto bird onlink

为了保证物理机A和物理机B能够相互知道,路由信息,calico使用了bgp协议进行路由发现。

IPIP

如果是跨网段的访问,网络之间存在路由器,比上面的架构更加复杂,如何进行路由发现? 需启用IPIP模式。

使用了 IPIP 模式之后,在物理机 A 上,我们能看到这样的路由表:

172.17.8.2 dev veth1 scope link 
172.17.8.3 dev veth2 scope link 
172.17.9.0/24 via 192.168.200.101 dev tun0 proto bird onlink

这和原来模式的区别在于,下一跳不再是同一个网段的物理机 B 了,IP 为 192.168.200.101,并且不是从 eth0 跳,而是建立一个隧道的端点 tun0,从这里才是下一跳。

  • 内层源 IP 为 172.17.8.2;
  • 内层目标 IP 为 172.17.9.2;
  • 外层源 IP 为 192.168.100.100;
  • 外层目标 IP 为 192.168.200.101。

将这个包从 eth0 发出去,在物理网络上会使用外层的 IP 进行路由,最终到达物理机 B。在物理机 B 上,tun0 会解封装,将内层的源 IP 和目标 IP 拿出来,转发给相应的容器。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java 面试虐我千百遍,我带面试如初恋【绝对值得收藏】
Hello 大家好,传说中的金三银四就在当下,阿粉知道很多小伙伴都在蠢蠢欲动,明修栈道暗度陈仓,表面上还在公司踏踏实实的干着,心里早就有了自己的小算盘。作为一个 Java 工程师,涉及到的领域会很多,每次面试都会被问到头破血流,阿粉今天就给大家带来一份面试题目,具体是哪家公司的阿粉就不说了,因为不管哪家其实都差不多,重点是自己要完全掌握,才能更好的应对。
50 0
并发策略-CAS算法
对于并发控制而言,我们平时用的锁(synchronized,Lock)是一种悲观的策略。
23 0
PostgreSQL数据备份策略
概述 任何数据库搭建完成,准备投入使用之后,首先要确定的就是数据库的备份策略,合理有规划的备份是数据安全的关键。以下就是针对于PostgreSQL数据库,设计的一整套备份策略 WAL归档策略 wal日志 所谓wal,即 write ahead log。
2696 0
ZAB协议
zab协议是zookeeper的核心内容,学好zab对于理解zookeeper是最基本的一环,本文主要介绍ZAB协议。 主要内容 所有事物请求必须由一个全局唯一的服务器来协调处理。这样的服务器成为Leader服务器,而余下的其他服务器则成为Follwer服务器。
3821 0
[译] 将 Kotlin 应用于现有 Java 代码的策略
本文讲的是[译] 将 Kotlin 应用于现有 Java 代码的策略,自 Google 在 I/O 大会上发布最新消息(译者注:Google 宣布 Android Studio 将默认支持 Kotlin)起,事情变得疯狂起来。
1267 0
ZAB协议
zookeeper依赖zab协议来实现分布式数据一致性.基于该协议,zookeeper实现了一种主备模式的系统架构来保持ZooKeeper为高可用的一致性协调框架,自然的ZooKeeper也有...
1324 0
java中两种添加监听器的策略
/*第一种:将事件的处理委托给其他对象,下面的例子是委托给了MyListener(implements ActionListener)*/ 1 import java.applet.Applet; 2 import java.
761 0
+关注
8
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载