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)