Flannel GitHub 地址

Flannel 是 Kubernetes 中常用的网络配置工具,用于配置第三层(网络层)网络结构。

如何工作
Flannel 需要在集群中的每台主机上运行一个名为 flanneld 的代理程序,负责从预配置地址空间中为每台主机分配一个网段。Flannel 直接使用 Kubernetes API 或 ETCD 存储网络配置、分配的子网以及任何辅助数据(如主机的公网 IP)。数据包使用几种后端机制之一进行转发,包括 VXLAN 和各种云集成。

后端 backend
Flannel 可以与几种不同的后端搭配。一旦后端设置完成,就不应在运行时更改。

VXLAN 是推荐的选择。对于有经验的用户,如果希望提高性能和基础架构支持(通常不能在云环境中使用),建议使用 host-gw。UDP 建议仅用于调试,或者用于不支持 VXLAN 的非常旧的内核。

另外,还有实验性的 AWS、GCE 和 AliVPC,所有支持的后端可以 参考这里。

VXLAN
使用内核的 VXLAN 封装数据包。

Type 和选项:

Type:字符串,vxlan
VNI:数字,要使用的 VXLAN Identifier (VNI) 。默认是 1。
Port:数字,用于发送封装的数据包 UDP 端口。默认值由内核决定,目前是 8472。
GBP:布尔值,启用 基于 VXLAN 组的策略。默认是 false。
DirectRouting:布尔值,当主机位于同一子网时,启用直接路由(类似 host-gw)。VXLAN 将仅用于将数据包封装到不同子网上的主机。默认为 false。
host-gw
使用 host-gw 通过远程计算机 IP 创建到子网的 IP 路由。运行 flannel 的主机之间需要直接连接第 2 层(数据链路层)。(Use host-gw to create IP routes to subnets via remote machine IPs. Requires direct layer2 connectivity between hosts running flannel.)

host-gw 性能好,依赖少,并且易于设置。

Type:

Type:字符串,host-gw
UDP
不可用于生产环境。仅在内核或网络无法使用 VXLAN 或 host-gw 时,用 UDP 进行 debug。

Type 和选项:

Type:字符串,udp
Port:数字,用于发送封装数据包的 UDP 端口号,默认是 8285
Troubleshooting
Logging
从容器运行 flannel 时,将安装 Strongswan 工具。swanctl 可用于与 charon 交互,并提供日志命令..
Charon 的日志也会写入 flannel 进程的标准输出。
Troubleshooting
ip xfrm state 可以用来与内核的安全关联数据库进行交互。这可以用来显示当前安全关联(SA)以及主机是否成功建立到其他主机的 IPsec 连接。
ip xfrm policy 可以用来显示已安装的策略。Flannel 为每个连接的主机安装三个策略。
Flannel 不会恢复手动删除的策略(除非重新启动 Flannel)。它也不会在启动时删除陈旧的策略。可以通过重新启动主机或通过 ip xfrm state flush && ip xfrm policy 策略刷新和重新启动 flannel 来删除所有 ipsec 状态来删除它们。

网络细节
像 Kubernetes 这样的平台假设每个容器(pod)在集群内都有一个唯一的、可路由的 IP。这种模式的优势在于它消除了共享单个主机 IP 带来的端口映射复杂性。

Flannel 负责在集群中的多个节点之间提供第 3 层 IPv4 网络。Flannel 不控制容器如何与主机联网,只负责主机之间如何传输流量。但是,Flannel 确实为 Kubernetes 提供了 CNI 插件,并提供了与 Docker 集成的指导。

Flannel 专注于网络。对于网络策略,可以使用 Calico 等其他项目。

Kubernetes 中的 Flannel
在 Kubernetes 集群中部署 Flannel 的最简单方法,是使用部署工具或默认安装了 Flannel 的网络集群。例如,CoreOS 的 Tectonic 在使用开源的 Tectonic Installer 程序安装 Kubernetes 集群的过程中创建了 Flannel。

虽然不是必需的,但建议 flanne 使用 Kubernetes API 作为其后备存储,这样可以避免为 Flannel 部署分立的 etcd 集群。这种 Flannel 模式被称为 kube 子网管理器。

手动部署 Flannel
Flannel 可以被添加到任何已经存在的 Kubernetes 集群中。但是在 Pod 使用网络之前添加 Flannel 是最简单的。

对于 Kubernetes v1.7+:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
1
详情可以 参考这里。

在 Docker 中使用 Flannel
flannel 可以在 kubernetes 之外的场景中使用。此时,基本上使用 ETCD 作为数据存储。在 Docker 中使用 Flannel 可以 参考这里。
---------------------
作者:kikajack
来源:CSDN
原文:https://blog.csdn.net/kikajack/article/details/80427685
版权声明:本文为博主原创文章,转载请附上博文链接!

Flannel - 原理的更多相关文章

  1. Flannel 原理简析及安装

    flannel是CoreOS提供用于解决Dokcer集群跨主机通讯的覆盖网络工具.它的主要思路是:预先留出一个网段,每个主机使用其中一部分,然后每个容器被分配不同的ip:让所有的容器认为大家在同一个直 ...

  2. [转帖]calico网络原理及与flannel对比

    calico网络原理及与flannel对比 https://blog.csdn.net/ganpuzhong42/article/details/77853131 2017年09月05日 16:34: ...

  3. minikube配置CRI-O作为runtime并指定flannel插件

    使用crio作为runtime后,容器的启动将不依赖docker相关的组件,容器进程更加简洁.如下使用crio作为runtime启动一个nginx的进程信息如下:根进程(1)->conmon-& ...

  4. Kubernetes学习之原理

    Kubernetes基本概念 一.Label selector在kubernetes中的应用场景 1.kube-controller-manager的replicaSet通过定义的label 来筛选要 ...

  5. 十四,K8s集群网络flannel及canal策略

    目录 k8s网络CNI之flannel k8s网络通信模型 常见CNI插件(Container,Network,Interface) 插件通信一般的解决方案 网络插件的应用 Flannel插件 fla ...

  6. kubernetes 入门学习

    kubernetes 学习 kubernetes 简介 Kubernetes这个名字源自希腊语,意思是"舵手",也是"管理者","治理者"等 ...

  7. 浅析flannel与docker结合的机制和原理

    flannel flannel可以为容器提供网络服务. 其模型为全部的容器使用一个network,然后在每个host上从network中划分一个子网subnet. 为host上的容器创建网络时,从su ...

  8. flannel vxlan 实现原理【转】

    flannel是coreos为kubernets提供的网络解决方案,主要为打通跨节点的容器通信,其中vxlan模式为flannel实现的一种后端模式,其他模式还包括udp, host-gw等,可以通过 ...

  9. Flannel的VXLAN模式工作原理

    跨主机通信的一个解决方案是Flannel,由CoreOS推出,最早支持的是UDP模式,但是因为性能太差被淘汰了, 过时的UDP模式 相比两台宿主机直接通信,多出了flanneld的处理过程,发出IP包 ...

随机推荐

  1. [k8s]jenkins配合kubernetes插件实现k8s集群构建的持续集成

    另一个结合harbor自动构建镜像的思路: 即code+baseimage一体的方案 - 程序员将代码提交到代码仓库gitlab - 钩子触发jenkins master启动一次构建 - jenkin ...

  2. class path and classloader

    https://www.artima.com/insidejvm/ed2/linkmod5.html https://www.artima.com/insidejvm/ed2/securityP.ht ...

  3. javascript form提交 不执行onsubmit事件解决方案

    转载自:https://www.cnblogs.com/lorgine/archive/2011/03/30/2000284.html 今天做项目过程中,需要用到javascript提交form到后台 ...

  4. Spring自动扫描无法扫描jar包中bean的解决方法(转)

    转载自:http://www.jb51.net/article/116357.htm 在日常开发中往往会对公共的模块打包发布,然后调用公共包的内容.然而,最近对公司的公共模块进行整理发布后.sprin ...

  5. Oracle---常用SQL语法和数据对象

    1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字 ...

  6. 业界常用的和不常用cad快捷键

    AutoCAD 是目前世界各国工程设计人员的首选设计软件,简便易学.精确无误是AutoCAD成功的两个重要原因.AutoCAD提供的命令有很多,绘图时最常用的命令只有其中的百分之二十. 在CAD软件操 ...

  7. vue.js在visual studio 2017下的安装

    1.打开"工具"菜单->"NuGet 包管理器"->"管理解决方案 Nuget 的程序包": 在红色标识的地方输入vue: 2. ...

  8. Java知多少(46)try和catch的使用

    尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常.这样做有两个好处.第一,它允许你修正错误.第二,它防止程序自动终止.大多数用户对于在程序终止运行和在无论何时 ...

  9. spring mvc中获取请求URL

    String baseUrl=request.getScheme()+"://"+request.getServerName()+":"+request.get ...

  10. WPF Input Validation Using MVVM

    Data validation is a key part in WPF.Validation is used to alert the user that the data he entered i ...