Kubernetes Notes
  • README
  • 序:Kubernetes之道
  • 搭建开发环境
    • 搭建本地开发测试环境
  • 基本概念
    • Workloads
      • StatefulSet
    • 认证鉴权
      • 理解证书
      • Kubelet配置
    • 垃圾回收
    • Service
  • 基础组件
    • Scheduler
    • 自动扩缩容(HPA)
  • 容器运行时(Container Runtime)
    • CRI
    • Docker
      • 安装配置Docker
      • Docker FAQ
    • Containerd
  • 资源隔离与限制
    • 基础知识
      • Cgroup
      • Namespaces
    • CPU
    • Memory
    • 网络出/入带宽
    • GPU
    • Container
    • FAQ
  • 网络
    • 基础知识
      • Linux network interfaces
      • Iptables
      • Overlay network
    • CNI
    • Flannel
      • Flannel原理
      • host-gw
      • vxlan
      • ipip
    • Calico
    • Cilium
  • Service Mesh
    • Istio
  • 扩展Kubernetes
    • Admission controller
    • Custom resource definition(CRD)
    • Scheduler extender
    • 扩展资源维度
    • Kubectl plugin
    • Aggregator
    • Device plugin
  • 现网问题
    • Kubernetes
    • ETCD
    • Docker
  • 最佳实践
    • 各组件参数配置调优
    • 各大公司生产环境实践
    • 如何打造一个Kubernetes平台
  • 生产力小工具
    • 生成特定权限和配额的kubeconfig
  • 社区贡献
  • 学习资料
  • 附录:RTFSC
    • Informer
    • Pod deletion
Powered by GitBook
On this page
  • 1. 原理
  • 2. 运行
  • 3. 参考资料

Was this helpful?

  1. 网络
  2. Flannel

Flannel原理

PreviousFlannelNexthost-gw

Last updated 6 years ago

Was this helpful?

1. 原理

Flannel的源码简洁明了,依次做了以下几件“大事”:

  • 启动时使用里的机制从etcd/kubernetes租用一段ipv4网络地址空间,然后把它写入由参数subnet-file指定的配置文件(默认为/run/flannel/subnet.env),包含了以下几个环境变量:FLANNEL_NETWORK(所有flannel可供分配的网段)、FLANNEL_SUBNET(该flannel分配到的网段)、FLANNEL_MTU(MTU值)、FLANNEL_IPMASQ,这几个值除了flannel自己用,还可用于设置docker的启动参数(例:设置--bip=FLANNEL_SUBNET)。

  • 如果指定了ip-masq(默认为false),则增加一些IP masquerade rule,当容器要访问overlay外部的网络时,对包进行SNAT操作。

  • 如果指定了iptables-forward-rules(默认为true),则增加FORWARD规则,让发送到FLANNEL_NETWORK网段里的ip的包能forward到容器里。对于docker 1.13+,这个非常重要,主要原因是从1.13版本开始,docker把FORWARD的默认规则改为DROP了。

  • 根据用户指定的backend type(支持的有Vxlan、host-gw、UDP等),创建一个backend。每个backend都需要实现RegisterNetwork(...)方法,用于创建一个实现了Network接口的实例。每个backend所做的事情就是监听各flannel分配/释放网络段的事件,然后进行相应的处理,比如:host-gw就是发现有新的flannel节点申请到网络段后,就会增加一些route规则,发现有网络段被释放后,就删除相应的route规则。相对来说host-gw相关的代码最简单,可以对照代码和文章理解。

Flannel有个非常好的用来理解和测试各个backend的原理,理解PreStartupCommand、PostStartupCommand、SubnetAddCommand这几个命令,基本上就理解了相应backend的实现了。

2. 运行

描述得很详细,文章里有具体的例子。

3. 参考资料

  • Leases and Reservations:

  • Backends:

  • Extension backend:

  • Running flannel:

Leases and Reservations
backends
host-gw
extension backend
Running flannel
host-gw
https://github.com/coreos/flannel/blob/master/Documentation/reservations.md
https://github.com/coreos/flannel/blob/master/Documentation/backends.md
https://github.com/coreos/flannel/blob/master/Documentation/extension.md
https://github.com/coreos/flannel/blob/master/Documentation/running.md