首页 > 其他分享 >第六章 Calico架构图的详解图

第六章 Calico架构图的详解图

时间:2023-03-21 13:35:01浏览次数:39  
标签:name calico IP IPIP 架构图 BGP 详解 Calico 路由

1,Calico网络模型主要工作组件:

1.Felix:运行在每一台 Host 的 agent 进程,主要负责网络接口管理和监听、路由、ARP 管理、ACL 管理和同步、状态上报等。保证跨主机容器网络互通。
2.etcd:分布式键值存储,相当于k8s集群中的数据库,存储着Calico网络模型中IP地址等相关信息。主要负责网络元数据一致性,确保 Calico 网络状态的准确性;
3.BGP Client(BIRD):Calico 为每一台 Host 部署一个 BGP Client,即每台host上部署一个BIRD。 主要负责把 Felix 写入 Kernel 的路由信息分发到当前 Calico 网络,确保 Workload 间的通信的有效性;
4.BGP Route Reflector:在大型网络规模中,如果仅仅使用 BGP client 形成 mesh 全网互联的方案就会导致规模限制,因为所有节点之间俩俩互联,需要 N^2 个连接,为了解决这个规模问题,可以采用 BGP 的 Router Reflector 的方法,通过一个或者多个 BGP Route Reflector 来完成集中式的路由分发。

2 calico网络插件配置文件说明

1、Daemonset配置
……
containers:
        # Runs calico-node container on each Kubernetes node. This
        # container programs network policy and routes on each
        # host.
        - name: calico-node
          image: docker.io/calico/node:v3.18.0
……
          env:
            # Use Kubernetes API as the backing datastore.
            - name: DATASTORE_TYPE
              value: "kubernetes"
            # Cluster type to identify the deployment type
            - name: CLUSTER_TYPE
              value: "k8s,bgp"
            # Auto-detect the BGP IP address.
            - name: IP
              value: "autodetect"
         #pod网段
         - name: CALICO_IPV4POOL_CIDR 
value: "10.244.0.0/16"
            # Enable IPIP
            - name: CALICO_IPV4POOL_IPIP
              value: "Always"

calico-node服务的主要参数如下:
CALICO_IPV4POOL_IPIP:是否启用IPIP模式。启用IPIP模式时,Calico将在Node上创建一个名为tunl0的虚拟隧道。IP Pool可以使用两种模式:BGP或IPIP。使用IPIP模式时,设置CALICO_IPV4POOL_IPIP="Always",不使用IPIP模式时,设置CALICO_IPV4POOL_IPIP="Off",此时将使用BGP模式。

IP_AUTODETECTION_METHOD:获取Node IP地址的方式,默认使用第1个网络接口的IP地址,对于安装了多块网卡的Node,可以使用正则表达式选择正确的网卡,例如"interface=eth.*"表示选择名称以eth开头的网卡的IP地址。
-  name: IP_AUTODETECTION_METHOD
  value: "interface=ens33"

3 calico的IPIP模式和BGP模式对比分析

扩展:
1)IPIP
把一个IP数据包又套在一个IP包里,即把IP层封装到IP层的一个 tunnel,它的作用其实基本上就相当于一个基于IP层的网桥,一般来说,普通的网桥是基于mac层的,根本不需要IP,而这个ipip则是通过两端的路由做一个tunnel,把两个本来不通的网络通过点对点连接起来;

calico以ipip模式部署完毕后,node上会有一个tunl0的网卡设备,这是ipip做隧道封装用的,也是一种overlay模式的网络。当我们把节点下线,calico容器都停止后,这个设备依然还在,执行 rmmodipip命令可以将它删除。

2)BGP
BGP模式直接使用物理机作为虚拟路由路(vRouter),不再创建额外的tunnel

边界网关协议(BorderGateway Protocol, BGP)是互联网上一个核心的去中心化的自治路由协议。它通过维护IP路由表或‘前缀’表来实现自治系统(AS)之间的可达性,属于矢量路由协议。BGP不使用传统的内部网关协议(IGP)的指标,而是基于路径、网络策略或规则集来决定路由。因此,它更适合被称为矢量性协议,而不是路由协议,通俗的说就是将接入到机房的多条线路(如电信、联通、移动等)融合为一体,实现多线单IP;

BGP 机房的优点:服务器只需要设置一个IP地址,最佳访问路由是由网络上的骨干路由器根据路由跳数与其它技术指标来确定的,不会占用服务器的任何系统;

官方提供的calico.yaml模板里,默认打开了ip-ip功能,该功能会在node上创建一个设备tunl0,容器的网络数据会经过该设备被封装一个ip头再转发。这里,calico.yaml中通过修改calico-node的环境变量:CALICO_IPV4POOL_IPIP来实现ipip功能的开关:默认是Always,表示开启;Off表示关闭ipip。
- name:  CLUSTER_TYPE
              value: "k8s,bgp"
            # Auto-detect the BGP IP address.
            - name: IP
              value: "autodetect"
            # Enable IPIP
            - name: CALICO_IPV4POOL_IPIP
              value: "Always"

总结:
calico BGP通信是基于TCP协议的,所以只要节点间三层互通即可完成,即三层互通的环境bird就能生成与邻居有关的路由。但是这些路由和flannel host-gateway模式一样,需要二层互通才能访问的通,因此如果在实际环境中配置了BGP模式生成了路由但是不同节点间pod访问不通,可能需要再确认下节点间是否二层互通。
为了解决节点间二层不通场景下的跨节点通信问题,calico也有自己的解决方案——IPIP模式

标签:name,calico,IP,IPIP,架构图,BGP,详解,Calico,路由
From: https://www.cnblogs.com/GAO321/p/17239666.html

相关文章

  • 详解目标检测模型的评价指标及代码实现
    摘要:为了评价模型的泛化能力,即判断模型的好坏,我们需要用某个指标来衡量,有了评价指标,就可以对比不同模型的优劣,并通过这个指标来进一步调参优化模型。本文分享自华为云社区......
  • Linux操作系统之tcpdump抓包工具详解
    前言①tcpdump工具简介:tcpdump是Linux操作系统中的字符界面的数据抓包分析软件。tcpdump可以将网络中传送的数据包完全截获下来提供分析②tcpdump是一个用于截取网络分......
  • expect详解
    做自动化部署不得不用这个命令,并且遇到了各种意想不到的麻烦,需要系统的学习一下。expecteof去掉能解决expectidexpe4notopen的问题一、概述​我们通过Shell......
  • 深入浅出:MVCC详解
    什么是MVCC:MVCC(MultiVersionConcurrencyControl的简称),代表多版本并发控制。与MVCC相对的,是基于锁的并发控制,Lock-BasedConcurrencyControl)。MVCC最大的优势:读不加......
  • 引用(详解)
    1.引用的几个错误用法: 1#include<iostream>2usingnamespacestd;3intmain(){4intsum=0,val=1;5int&ref;//错误引用必须初始化6......
  • linux根目录详解
    /   根目录:根目录,文件的最顶端,整个文件系统的根目录/bin   用户二进制文件:存放系统所需的重要命令/sbin  系统二进制文件:存放一些系统管理的命令,一般只能由超级权......
  • python if __name == "__main__"的详解
    前言对于python来说,我们经常会见到一行代码:if__name__=="__main__":balabala那这句话是啥意思呢? 正文首先要明白__name__是python当中的一个属性,代表现在......
  • Linux cpio三种操作模式详解!
    cpio是一种数据备份与恢复工具,用于创建cpio档案文件,那么Linuxcpio三种操作模式是什么?分别是:copy-out模式、copy-in模式、copy-pass模式,接下来来看看详细的内容介绍。......
  • linux 网络管理之netstat命令详解
    一、Netstat的作用netstat用于显示网络状态,可以查看服务器当前端口列表及指定端口的连接状态二、语法格式[root@host127home]#netstat-husage:netstat[-vWeenNcCF......
  • 服务器存储之Raid技术详解
    (服务器存储之Raid技术详解)一、RAID介绍1.RAID理解RAID:独立磁盘冗余阵列(RedundantArrayofIndependentDrives),磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁......