flanneld程序启动会有一个参数叫做-etcd-prefix和-iface。前者是指定flanneld程序使用etcd的哪个节点来存储数据,-face是指定flanneld使用网络是使用宿主机哪个物理接口来做隧道然后你需要通过etcdctl命令来设置flannel的网络数据,我这里设置好的配置如下(我这里之索引用证书是因为我的etcd集群配置了证书):

POD01如果要和POD03通信,POD01会把数据包投递给docker01这个(对于POD01来说docker01这个地址是默认网关),docker0根据路由信息查看目的网段172.30.19.0要走flannel.1,于是把数据包直接投递到flannel.1这个VxLAN设备上,但是这个flannel.1知道数据包的目的地址不是自己所以它也会进行转发,不过flannel.1也不知道目的地址172.30.19.2是谁,通常这个时候会在二层网络上会发起ARP请求来获取目的主机的MAC地址,这里其实也会发送ARP请求不过所不同的是它会将这个ARP请求发送给flanneld这个程序(内核引发一个L3 MISS事件),flanneld程序收到L3 MISS内核事件以及arp请求后,并不会向外网发送arp请求,而是从ETCD数据库中查找与目的地址匹配的子网的vtep信息(flanneld程序中指定的)。下图的信息是自动写入的,因为三台主机安装了flanneld程序。接着上面说flanneld会联系etcd查看172.30.19.0网络匹配的节点,

发现172.30.19.0-24符合,那么获取该节点数据,这样就知道这个网段所在主机的物理IP地址和该主机flannel.1这个虚拟设备的MAC地址(这样就找到对端所在主机了)

下图是srv03的地址信息

获得上述信息后flanneld将信息放到本机的arp表中(通过 apr –n可以查看)

然后就可以封装 数据包了但是这个数据包并不能在物理网络上传输因为这是一个vxlan包里面包含源和目的容器的IP以及源和目的的flannel.1的MAC地址以及vxlan标签;然后进行再次封装这次试用的就源主机物理IP和MAC以及目的主机物理IP和MAC。

数据包到达目的地后如何拆包:对端物理IP所在接口收到数据包后拆包发现vxlan标签,于是将拆包后的数据投递给本机的flannel.1,它再次拆包转交给docker0,最后由docker0投递到POD-03上。POD怎么和外界通信呢?这个就和vxlan没关系了,主要是本机的ipvs或者iptables规则来实现转发的。

Flannel工作原理的更多相关文章

  1. Kubernetes网络之Flannel工作原理

    目录 1.Docker网络模式 1.1 bridge网络的构建过程 1.2 外部访问 2.Kubernetes网络模式 2.1 同一个Pod中容器之间的通信 2.2 不同Pod中容器之间的通信 2.3 ...

  2. Flannel的VXLAN模式工作原理

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

  3. 【k8s】基础概念 + 工作原理

    工作原理: 原理图 工作原理描述: 1>用户通过kubectl或者API server的REST API接口,提交需要运行的docker容器(创建pod请求): 2>api server将 ...

  4. K8s的工作原理

    title: Kubernetes之初探 subtitle: K8s的工作原理 date: 2018-09-18 18:26:37 --- K8s概述 我清晰地记得曾经读到过的一篇博文,上面是这样写的 ...

  5. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  6. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  7. HashMap的工作原理

    HashMap的工作原理   HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...

  8. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

    RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  9. ThreadLocal 工作原理、部分源码分析

    1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...

随机推荐

  1. JS跨域:1.解决方案之-SpringMVC拦截器

    一 拦截器代码 package com.wiimedia.controller; import java.util.List; import javax.servlet.http.HttpServle ...

  2. 《T-SQL查询》读书笔记Part 1.逻辑查询处理知多少

    一.关于T-SQL T-SQL是ANSI和ISO SQL标准的MS SQL扩展,其正式名称为Transact-SQL,但一般程序员都称其为T-SQL. 二.逻辑查询处理各个阶段 2.1 逻辑查询处理流 ...

  3. mvc中路由的映射和实现IHttpHandler挂载

    首先我们了解一下一般的方法 我们只需要在web.config配置文件中做映射处理即可. 第一种形式: <system.web> <urlMappings enabled=" ...

  4. es6属性基础教学,30分钟包会

    ES6基础智商划重点在实际开发中,ES6已经非常普及了.掌握ES6的知识变成了一种必须.尽管我们在使用时仍然需要经过babel编译.ES6彻底改变了前端的编码风格,可以说对于前端的影响非常巨大.值得高 ...

  5. css基础--深入理解opacity和rgba的区别

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 前言 首先这两个都与透明度有关,那么他们之间有什么具体的区别呢?在实际工作中我们需要注意什么呢?请您接着往下看 语法 1. rg ...

  6. PAT1049:Counting Ones

    1049. Counting Ones (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The tas ...

  7. 第二章:第一个Netty程序

    第一步:设置开发环境 • 安装JDK,下载地址http://www.oracle.com/technetwork/java/javase/archive-139210.html   • 下载netty ...

  8. mysql SQL Layer各个模块介绍

    https://blog.csdn.net/cymm_liu/article/details/45821929

  9. java序列化反序列化深入探究(转)

    When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化.写一个排序算法也用不到序列化和反序列化.但是当你想要将一个对象进行持久化写入文件,或者你想 ...

  10. java并发之非阻塞算法介绍

    在并发上下文中,非阻塞算法是一种允许线程在阻塞其他线程的情况下访问共享状态的算法.在绝大多数项目中,在算法中如果一个线程的挂起没有导致其它的线程挂起,我们就说这个算法是非阻塞的. 为了更好的理解阻塞算 ...