启动运行流程
启动流程
寻找要使用的主机网卡,该网卡会在创建flannel.1设备时作为dev参数使用,表示flannel.1设备绑定的网卡为该网卡,vxlan的出站和入站数据都会经过这个网卡。
接下来是创建网络管理器,网络管理器用来获取网络配置,本机的pod网络等。
创建后端插件,图中实例的是vxlan后端,类型是Backend,有一个RegisterNetwork方法,在vxlan后端中在这个方法中创建vxlan设备以及设置其ip地址,并返回一个backend.Network结构。
设置iptables的伪装和转发规则,其中的-A POSTROUTING ! -s 10.244.0.0/16 -d 10.244.0.0/16 -j MASQUERADE这条iptables规则导致host到容器网络的访问源地址使用flannel.1的ip。
运行backend.Networ.Run()方法持续不断的监听所有网络变更的事件,根据事件刷新相关的route,arp和fdb表到主机上。
定时对本机的租约进行续租(etcd时才用)。
功能组件
SubnetManager
网络管理器用来管理当前主机和集群主机的网络配置。
接口说明
GetNetworkConfig(ctx context.Context) (*Config, error)
获取当前节点的网络配置信息:
type Config struct {
Network ip.IP4Net
SubnetMin ip.IP4
SubnetMax ip.IP4
SubnetLen uint
BackendType string `json:"-"`
Backend json.RawMessage `json:",omitempty"`
}
// 该配置由下列函数生成
func ParseConfig(s string) (*Config, error) {
cfg := new(Config)
err := json.Unmarshal([]byte(s), cfg)
if err != nil {
return nil, err
}
if cfg.SubnetLen…
flannel源码简要分析
发布于