main函数中RegisterNetwork会根据不同的后端类型调用不同的RegisterNetwork,这里以vxlan为例:

  • 定义cfg变量匿名结构体,并使用Unmarshal解析配置文件初始化cfg,结构体如下:

    struct {VNI           intPort          intGBP           boolLearning      boolDirectRouting bool
    }
    
  • 初始化vxlanDeviceAttrs结构体变量devAttrs

    vxlanDeviceAttrs{vni:       uint32(cfg.VNI),name:      fmt.Sprintf("flannel.%v", cfg.VNI),vtepIndex: be.extIface.Iface.Index,vtepAddr:  be.extIface.IfaceAddr,vtepPort:  cfg.Port,gbp:       cfg.GBP,learning:  cfg.Learning,
    }
    
  • 使用newVXLANDevice新建vxlan设备,devAttrs作为参数,完成设备的初始化,vxlan设备结构体如下:

    type vxlanDevice struct {link          *netlink.VxlandirectRouting bool
    }type Vxlan struct {LinkAttrsVxlanId      intVtepDevIndex intSrcAddr      net.IPGroup        net.IPTTL          intTOS          intLearning     boolProxy        boolRSC          boolL2miss       boolL3miss       boolUDPCSum      boolNoAge        boolGBP          boolAge          intLimit        intPort         intPortLow      intPortHigh     int
    }type LinkAttrs struct {Index        intMTU          intTxQLen       int // Transmit Queue LengthName         stringHardwareAddr net.HardwareAddrFlags        net.FlagsRawFlags     uint32ParentIndex  int         // index of the parent link deviceMasterIndex  int         // must be the index of a bridgeNamespace    interface{} // nil | NsPid | NsFdAlias        stringStatistics   *LinkStatisticsPromisc      intXdp          *LinkXdpEncapType    stringProtinfo     *ProtinfoOperState    LinkOperState
    }
    
  • newSubnetAttrs新建并初始化subnet.LeaseAttrs属性

  • AcquireLease分配子网租约

  • newNetwork创建网络

flannel源码分析--RegisterNetwork相关推荐

  1. flannel源码分析--main

    1.init init函数:进行flannelFlags的初始化,有etcd.iface(网卡).iface-regex(接口匹配正则).subnetFile(子网配置).public-ip(外部访问 ...

  2. flannel源码分析--InClusterConfig

    newSubnetManager创建子网管理时,通过BuildConfigFromFlags从master url或kubeconfig文件路径创建,若失败则会回调到InClusterConfig 获 ...

  3. flannel源码分析--newSubnetManager

    main函数中调用newSubnetManager创建子网管理,具体流程如下: 如果命令行opts中指定了子网管理,则通过命令行中的参数调用NewSubnetManager BuildConfigFr ...

  4. flannel源码分析--LookupExtIface

    main函数中LookupExtIface查找网卡,主要流程如下 通过ParseIP解析IP,并用net.IP存储 GetInterfaceByIP,将ip传入,net.Interfaces获取所有网 ...

  5. flannel源码分析--WatchLeases

    在main函数run后端之后,会创建协程调用WatchLeases,如下: for循环中轮询,调用kube.go中对manager接口的实现,接口如下: type kubeSubnetManager ...

  6. flannel源码分析--handleSubnetEvents

    当main进程启动后端后,会触发handleSubnetEvents处理事件 新建vxlanRoute路由,用作流量封包,结构如下: netlink.Route{LinkIndex: nw.dev.l ...

  7. Docker源码分析(六):Docker Daemon网络

    http://www.infoq.com/cn/articles/docker-source-code-analysis-part6 1. 前言 Docker作为一个开源的轻量级虚拟化容器引擎技术,已 ...

  8. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  9. SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...

最新文章

  1. java生成扑克牌----java基础学习总结
  2. 成功解决AttributeError: 'DataFrame' object has no attribute 'tolist'
  3. maskView与CAGradientLayer详解
  4. html不支持元素video,Html5中的Video元素使用方法
  5. 网络协议及IP地址分类
  6. 跨域会报40几_总结一下跨域的几种情况
  7. oracle将千万行查询优化到一秒内,oracle下一条SQL语句的优化过程(比较详细)
  8. python 归一化_数据的标准化和归一化
  9. 选择器高级、样式及布局
  10. html5 css练习 定位布局
  11. 成品app直播源码,设置ViewPager不可滑动
  12. linux运行natapp,Centos使用natapp教程
  13. 数据库表文档生成工具screw (螺丝钉)
  14. 游戏策划入门教程(前言)
  15. 宫崎骏电影-Music
  16. 微信开发学习二 -- 微信开发入门(简单demo)
  17. java ebcdic_java EBCDIC | 学步园
  18. 会员卡充值系统小程序开发制作功能介绍
  19. xxx牌JUC学习加油奥利给001初始篇章
  20. c# asp.net mvc使用斑马GK888t打印机打印标签

热门文章

  1. 如何用python画数据图-用Python如何画出数据可视化图呢?本文详解
  2. 初学python还是swift-Swift 势必取代 Python?
  3. 用python画烟花-用python做一个烟花show
  4. python装饰器实例-Python装饰器用法实例总结
  5. 流程的python-什么时候学流畅的python合适?
  6. 学python买什么电脑-程序员,买了台破Apple电脑,用来学Python
  7. python网上编程课程-少儿编程 为你解读Python编程课程
  8. python使用del保留字定义一个函数-函数和代码复用 --Python
  9. python中的os.mkdir和os.makedirs的使用区别,以及如何查看某个模块中的某些字母开头的属性方法
  10. java 覆盖和隐藏_Java覆盖和隐藏2