1、前言

BGP工作模式:

bgp工作模式和flannel的host-gw模式几乎一样;

bird是bgd的客户端,与集群中其它节点的bird进行通信,以便于交换各自的路由信息;

随着节点数量N的增加,这些路由规则将会以指数级的规模快速增长,给集群本身网络带来巨大压力,官方建议小于100个节点;

限制:和flannel的host-gw限制一样,要求物理机在二层是连能的,不能跨网段;

Route Reflector模式:

在更大规模的集群中,需要通过Route Reflector模式专门创建一个或者几个专门的节点,负责跟所有的BGP客户端建立连接,从而学全全局的路由规则;

而其它节点,只需要跟这几个专门的节点交换路由信息,就可以获得整整个集群的路由信息

IPIP模式:

场景:用在跨网段通信的情况下,bgp模式在跨网段的场景将不能工作;

tunl0:创建的虚拟网卡设备,此时的作用就和flannel的VxLAN工作模式类似(此处的tunl0不是flannel的UDP模式中的tun0)

2、服务器信息

1、ip及mac信息

server ip mac gw_mac
172.22.108.11 172.22.108.11 b8:ca:3a:f2:74:fb 38:ad:8e:59:02:e7
172.22.108.12 172.22.108.12 08:94:ef:7b:47:a7 38:ad:8e:59:02:e7
10.100.106.15 10.100.106.15 b8:2a:72:ce:b0:75 00:5e:ed:ff:00:01
172.22.108.11 172.32.31.151 ae:a3:86:58:6c:59
172.22.108.12 172.32.135.30 f2:bc:d7:00:3c:be
10.100.106.15 172.32.245.151 f6:a\b:e3:0f:ad:12

2、路由条目

主机10.100.106.15

主机172.22.108.12

主机172.22.108.11

3、IPIP剖析

1、虚拟tunl0网卡报文详情

在10.100.106.15上ping 172.22.108.12的pod,同时下172.22.108.11上执行抓包命令( tcpdump -i tunl0 host 172.32.245.151 -w 108.12.pcap )(如果抓其物理网卡,是抓不到数据包的,因为,进行了二次封装,到达物理网卡的报文的ip是10.100.106.15)

2、物理网卡报文详情

本机10.100.106.15上抓包,添加过滤信息:ip.addr == 172.32.245.151

tcpdump -i em1 host 172.22.108.12 -w 106.15.pcap

对端172.22.108.12上抓包

添加过滤信息:ip.addr == 172.32.245.151,通过以下抓包可以发现,由于使用了ipip模式,最外一层封装了物理网卡的信息。

4、calico cross-subnet

ipip虽然实现了 calico 跨网段通信,但对于相同网段间的主机通信来说,IP-in-IP 就有点多余了,因为二者宿主机处于同一广播域,2层互通,直接走主机路由即可。此时需要借助calico cross-subnet

$ calicoctl apply -f - << EOF
apiVersion: v1
kind: ipPool
metadata:
cidr: 192.168.0.0/16
spec:
ipip:
enabled: true
mode: cross-subnet
nat-outgoing: true
EOF

为经作者同意,禁止转载,写作不易

calico的ipip与bgp的模式分析的更多相关文章

  1. calico集成详解

    一.摘要 ======================================================================================= 包括三项: c ...

  2. Calico网络模型

    由于两台物理机的容器网段不同,我们完全可以将两台物理机配置成为路由器,并按照容器的网段配置路由表. 在物理机A中,我们可以这样配置:要想访问网段172.17.9.0/24,下一跳是192.168.10 ...

  3. 042.集群网络-flannel及calico

    一 Flannel组件 1.1 flannel介绍 Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平网络空间中.若需要实现这个网络假设,需要实现不同节点上的Docker容器之间 ...

  4. Flannel和Calico网络插件工作流程对比

    Flannel和Calico网络插件对比   Calico简介 Calico是一个纯三层的网络插件,calico的bgp模式类似于flannel的host-gw Calico方便集成 OpenStac ...

  5. Flannel和Calico网络插件对比

    1.Kubernetes通信问题 1.容器间通信:即同一个Pod内多个容器间通信,通常使用loopback来实现. 2.Pod间通信:K8s要求,Pod和Pod之间通信必须使用Pod-IP 直接访问另 ...

  6. 修复tunl0-二进制安装calico

    这篇博文很重要,出现这个问题导致pod之间无法通讯,pod无法连接外网. 出现的问题是二进制方式安装了节点之后, tunl0没有显示,通过ifconfig tunl0 up 启动tunl0 没有意义, ...

  7. calico和flannel的优缺点

    1.Kubernetes通信问题 1.容器间通信:即同一个Pod内多个容器间通信,通常使用loopback来实现. 2.Pod间通信:K8s要求,Pod和Pod之间通信必须使用Pod-IP 直接访问另 ...

  8. 容器中跨主机的网络方案-Calico

    容器中的网络是建立docker集群的重要内容. 本文将介绍如何用Calico实现容器的多节点互通. Calico的组件结构如下: Calico通过etcd同步Bridge的信息,各个Docker no ...

  9. calico官网网络拓扑实现:基于eNSP与VMVare

    Calico官网提供了两种网络设计模式: AS per rack: 每个rack(机架)组成一个AS,每个rack的TOR交换机与核心交换机组成一个AS AS per server: 每个node做为 ...

随机推荐

  1. Python+Selenium - Web自动化测试(二):元素定位

    前言 前面已经把环境搭建好了,现在开始使用 Selenium 中的 Webdriver 框架编写自动化代码脚本,我们常见的在浏览器中的操作都会有相对应的类方法,这些方法需要定位才能操作元素,不同网页的 ...

  2. python 生成式,生成器,迭代器,可迭代

    1.生成器就是迭代器2.生成式用[](中括号)包起来,生成器用()(圆括号)包起来3.生成式在使用前已经在内存中存在,生成器只有在使用时才生成4.迭代器是可以用.__next__()不断取出下一值,直 ...

  3. Zookeeper之Leader选举过程

    Leader在集群中是一个非常重要的角色,负责了整个事务的处理和调度,保证分布式数据一致性的关键所在.既然Leader在ZooKeeper集群中这么重要所以一定要保证集群在任何时候都有且仅有一个Lea ...

  4. python控制窗口移动(画圆)

    import win32con import win32gui import time import math notepad = win32gui.FindWindow("Notepad& ...

  5. codeforce375div2-D. Lakes in Berland 搜索

    Lakes in Berland 题意与解释:这道题就是求图中被围起来的点群,问最少去掉几个点,可以使得孤立的点群数目为K; 因为自己写的代码又长又had bugs. 我自己写的bfs,想着是先染色, ...

  6. c++ uconcontext.h实现协程

    目录 c++ uconcontext.h实现协程 什么是协程? ucontext.h库 库的使用示例 代码地址 c++ uconcontext.h实现协程 什么是协程? 协程是一种程序组件,是由子例程 ...

  7. poj 2828--Buy Tickets(线段树)

    Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...

  8. WebGL2系列之采样器对象

    前言 在WebGL1中,纹理的图片和采样信息都是写在纹理对象之中. 采样信息告诉GPU如何去读取贴图上图片的信息. 如果我们希望从同一个图片多次读取像素信息,但是每次读取的时候使用的过滤方式不一样, ...

  9. SpringBoot 参数校验的方法

    Introduction 有参数传递的地方都少不了参数校验.在web开发中,前端的参数校验是为了用户体验,后端的参数校验是为了安全.试想一下,如果在controller层中没有经过任何校验的参数通过s ...

  10. 【LeetCode】55-跳跃游戏

    题目描述 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: ...