flannel源码分析---backend为vxlan

Posted Monster-Z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flannel源码分析---backend为vxlan相关的知识,希望对你有一定的参考价值。

// backend/vxlan/vxlan.go

func (be *VXLANBackend) RegisterNetwork(ctx context.Context, network string, config *subnet.Config) (backend.Network, error)

  • 创建cfg变量,它的结构体中包含VIN int, Port int, GBP bool三个字段,其中VNI设置为默认的defaultVNI = 1,并且调用json.Unmarshal(config.Backend, &cfg)解析
  • 创建变量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,

  }

  • 调用dev, err := newVXLANDevice(&devAttrs) ---> 调用netlink库添加vlan设备,并且可以处理设备已经存在的情况
  • 调用subnetAttrs, err := newSubnetAttrs(be.extIface.ExtAddr, dev.MACAddr())
  • 调用lease, err := be.subnetMgr.AcquireLease(ctx, network, subnetAttrs)
  • 创建vxlanNet := ip.IP4Net{

    IP:      lease.Subnet.IP,

    PrefixLen:   config.Network.PrefixLen,

  }

  • 调用err = dev.Configure(vxlanNet)
  • 最后return newNetwork(network, be.subnetMgr, be.extIface, dev, vxlanNet, lease)

 

以上是关于flannel源码分析---backend为vxlan的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 flannel host-gw backend?- 每天5分钟玩转 Docker 容器技术(62)

如何使用 flannel host-gw backend?- 每天5分钟玩转 Docker 容器技术(62)

flannel源码分析---初始化部分

Flannel配置详解

Flannel配置详解

Kubernetes — Flannel CNI