CNI之Flannel网络原理

Flannel是CoreOS开源的Kubernetes网络解决方案,它利用Etcd或Kubernetes API存储集群网络配置,确保跨主机容器网络通信。通过SubnetManager和BackendManager管理子网和后端类型如vxlan,维护网络设备如vxlan设备和cni0桥。VxLAN技术用于在二层网络上创建隧道,允许容器像在同一LAN中一样通信。
摘要由CSDN通过智能技术生成

简介

flannel是 coreos 开源的 Kubernetes CNI 实现。它使用 etcd 或者 Kubernetes API 存储整个集群的网络配置。每个 kubernetes节点上运行 flanneld 组件,它从 etcd 或者 Kubernetes API 获取集群的网络地址空间,并在空间内获取一个 subnet ,该节点上的容器 IP都从这个 subnet 中分配,从而保证不同节点上的 IP不会冲突。flannel通过不同的 backend 来实现跨主机的容器网络通信,目前支持 udp , vxlan , host-gw 等一系列 backend实现。

源码地址:https://github.com/flannel-io/flannel 

SubnetManager

子网管理器,以下简称sm
在main方法中会初始化sm: sm, err := newSubnetManager(ctx)
这里kube子网管理为例:

func NewSubnetManager(ctx context.Context, apiUrl, kubeconfig, prefix, netConfPath string, setNodeNetworkUnavailable, useMultiClusterCidr bool) (subnet.Manager, error) {
   var cfg *rest.Config
   var err error
   // Try to build kubernetes config from a master url or a kubeconfig filepath. If neither masterUrl
   // or kubeconfigPath are passed in we fall back to inClusterConfig. If inClusterConfig fails,
   // we fallback to the default config.
   cfg, err = clientcmd.BuildConfigFromFlags(apiUrl, kubeconfig)
   if err != nil {
      return nil, fmt.Errorf("fail to create kubernetes config: %v", err)
   }

   c, err := clientset.NewFor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值