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. A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets(中英双语)

    文章标题 A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets 且谈Apache Spark的API三剑客:RDD.Dat ...

  2. 老司机在zabbix上的一次翻车

    [前言] 自以为是zabbix的老司机了,没有想到今天翻车了! 一般人出错了都可以找到一个借口.我就不一样啦,我感觉我可以找两个1): 针对官方文档 给出的操作步骤没有经过深入的思考 2): 今天没有 ...

  3. docker镜像、容器以及命令操作

    docker image docker image是一个极度精简版的Linux程序运行环境,官网的java镜像包括的东西更少,除非是镜像叠加方式的如centos+java7 docker image是 ...

  4. 详解shell编程中2>&1用法

    在使用 linux 命令或者 shell 编程时,这个用法常会遇到 2>&1 下面看一个命令示例,然后分析下他是如何工作的: ls foo > /dev/null 2>&am ...

  5. layui表单验证

    layui表单元素的校验只需在元素上加入lay-verify,layui提供了以下值. required(必填项) phone(手机号) email(邮箱) url(网址) number(数字) da ...

  6. Asp.Net 简繁转换

    帮助类 /// <summary> /// 中文字符工具类 /// </summary> public static class ChineseStringUtility { ...

  7. Ubuntu 卸载重装 IntelliJ Idea Community

    参考: https://stackoverflow.com/questions/22983101/how-to-uninstall-intellij-idea-on-ubuntu-13-10 @SLH ...

  8. 【转】在Win7的IIS上搭建FTP服务及用户授权

    [转]在Win7的IIS上搭建FTP服务及用户授权 [转]在Win7的IIS上搭建FTP服务及用户授权 FTP服务 FTP是文件传输协议(File Transfer Protocol)的简称,该协议属 ...

  9. 转载——githup的提交

    Github是管理软件开发的首选托管网站,12306的火车票插件一时让国内当时很多小白开发者(当然也包括我)认识到了这个网站.GitHub可以托管各种git库,并提供一个web界面,与 SourceF ...

  10. 服务器部署多个tomcat(Address already in use: JVM_Bind)

    一.修改startup.bat **多个Tomcat同时运行时.不要设置 catalina_home catalina_base classes 环境变量, 修改setclasspath.bat (| ...