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 拿出来,转发给相应的容器。

相关文章
|
1天前
|
canal Kubernetes 网络架构
K8s CNI 网络最强对比:Flannel、Calico、Canal 和 Weave
Kubernetes 采用的 CNI 标准,让 Kubernetes 生态系统中的网络解决方案百花齐放。更多样的选择,意味着大多数用户将能够找到适合其当前需求和部署环境的 CNI 插件,同时还可以在环境发生变化时也能找到新的解决方案。
70 1
|
2月前
|
Kubernetes 安全 网络协议
【K8S系列】深入解析k8s网络插件—Calico
【K8S系列】深入解析k8s网络插件—Calico
114 0
|
2月前
|
Kubernetes 应用服务中间件 测试技术
kubernetes calico的两种网络模式BGP和IP-IP性能分析
kubernetes calico的两种网络模式BGP和IP-IP性能分析
|
12月前
|
Kubernetes 容器
Kubernetes CKS 2021--网络策略networkpolicy
Kubernetes CKS 2021--网络策略networkpolicy
Kubernetes CKS 2021--网络策略networkpolicy
|
12月前
|
Kubernetes 网络协议 Cloud Native
kubernetes networkpolicy网络策略详解
kubernetes networkpolicy网络策略详解
kubernetes networkpolicy网络策略详解
|
canal Kubernetes 负载均衡
Kubernetes 网络概念及策略控制|学习笔记
快速学习 Kubernetes 网络概念及策略控制
98 0
Kubernetes 网络概念及策略控制|学习笔记
|
Kubernetes Cloud Native 网络安全
【云原生-K8s】kubeadm搭建k8s集群1.25版本完整教程【docker、网络插件calico、中间层cri-docker】
【云原生-K8s】kubeadm搭建k8s集群1.25版本完整教程【docker、网络插件calico、中间层cri-docker】
1856 0
【云原生-K8s】kubeadm搭建k8s集群1.25版本完整教程【docker、网络插件calico、中间层cri-docker】
|
Kubernetes Cloud Native Ubuntu
云原生|kubernetes|kubernetes的网络插件calico和flannel安装以及切换(二)
云原生|kubernetes|kubernetes的网络插件calico和flannel安装以及切换
768 0
|
Kubernetes Cloud Native 开发工具
云原生|kubernetes|kubernetes的网络插件calico和flannel安装以及切换(一)
云原生|kubernetes|kubernetes的网络插件calico和flannel安装以及切换
378 0
云原生|kubernetes|kubernetes的网络插件calico和flannel安装以及切换(一)
|
运维 Kubernetes 网络协议
kubernetes(k8s)安装BGP模式calico网络支持IPV4和IPV6
BGP是互联网上一个核心的去中心化自治路由协议,它通过维护IP路由表或“前缀”表来实现自治系统AS之间的可达性,属于矢量路由协议。不过,考虑到并非所有的网络都能支持BGP,以及Calico控制平面的设计要求物理网络必须是二层网络,以确保 vRouter间均直接可达,路由不能够将物理设备当作下一跳等原因,为了支持三层网络,Calico还推出了IP-in-IP叠加的模型,它也使用Overlay的方式来传输数据。IPIP的包头非常小,而且也是内置在内核中,因此理论上它的速度要比VxLAN快一点 ,但安全性更差。Calico 3.x的默认配置使用的是IPIP类型的传输方案而非BGP。
862 2
推荐文章
更多