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. SNF快速开发平台MVC-甘特图

    上个月做了CS框架的甘特图样例,本月框架组人员又实现了BS的甘特图效果,而且效果也很不错哦 图形框可以直接拖拽调整时长时间: 新增节点:

  2. Spark 论文篇-Spark:工作组上的集群计算的框架(中英双语)

    论文内容: 待整理 参考文献: Spark: Cluster Computing with Working Sets. Matei Zaharia, Mosharaf Chowdhury, Micha ...

  3. Linux下apache activemq的安装与配置

    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范 的 JMS Provider实现,尽管JMS规范出台已经是很 ...

  4. spring boot 2整合swagger-ui

    1.添加mvn依赖 修改pom.xml加入 <dependency> <groupId>io.springfox</groupId> <artifactId& ...

  5. js中的try/catch

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 【!Important】如何保证线程执行的先后顺序

    1.假设有三个线程,分别为T1.T2.T3,如果让线程T2在线程T1之后执行,在线程T3之前执行. 使用线程的join方法,该方法的作用是“等待线程执行结束”,即join()方法后面的代码块都要等待现 ...

  7. [原]openstack-kilo--issue(十九) ImportError: Could not import settings 'openstack_dashboard.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named main

    查看此问题的时候请先查看 这个问题包含在(十)中,此篇只是从(十)中分离出来 openstack-kilo--issue(十)ERROR: openstack Unable to establish ...

  8. spring框架的ioc

       spring框架,主要思想可以用spring容器来理解 aop是一种对oop进行补充的软件设计思想,将和核心功能不相关代码抽象出来,由其他类完成.比如Singer类,我们可以定义一个Singer ...

  9. python3之end关键字

    end 关键字 关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下: #!/usr/bin/python3 # Fibonacci series: 斐波纳契数列 # 两个 ...

  10. B - Broken Keyboard (a.k.a. Beiju Text) 数组模拟链表

    You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...