趣谈网络协议
刘超
网易研究院云计算技术部首席架构师
立即订阅
39591 人已学习
课程目录
已完结 51 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 想成为技术牛人?先搞定网络协议!
免费
第一模块 通信协议综述 (4讲)
第1讲 | 为什么要学习网络协议?
第2讲 | 网络分层的真实含义是什么?
第3讲 | ifconfig:最熟悉又陌生的命令行
第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的?
第二模块 底层网络知识详解:从二层到三层 (5讲)
第5讲 | 从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?
第6讲 | 交换机与VLAN:办公室太复杂,我要回学校
第7讲 | ICMP与ping:投石问路的侦察兵
第8讲 | 世界这么大,我想出网关:欧洲十国游与玄奘西行
第9讲 | 路由协议:西出网关无故人,敢问路在何方
第二模块 底层网络知识详解:最重要的传输层 (4讲)
第10讲 | UDP协议:因性善而简单,难免碰到“城会玩”
第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松
第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难
第13讲 | 套接字Socket:Talk is cheap, show me the code
第二模块 底层网络知识详解:最常用的应用层 (4讲)
第14讲 | HTTP协议:看个新闻原来这么麻烦
第15讲 | HTTPS协议:点外卖的过程原来这么复杂
第16讲 | 流媒体协议:如何在直播里看到美女帅哥?
第17讲 | P2P协议:我下小电影,99%急死你
第二模块 底层网络知识详解:陌生的数据中心 (6讲)
第18讲 | DNS协议:网络世界的地址簿
第19讲 | HTTPDNS:网络世界的地址簿也会指错路
第20讲 | CDN:你去小卖部取过快递么?
第21讲 | 数据中心:我是开发商,自己拿地盖别墅
第22讲 | VPN:朝中有人好做官
第23讲 | 移动网络:去巴塞罗那,手机也上不了脸书
第三模块 热门技术中的应用:云计算中的网络 (5讲)
第24讲 | 云中网络:自己拿地成本高,购买公寓更灵活
第25讲 | 软件定义网络:共享基础设施的小区物业管理办法
第26讲 | 云中的网络安全:虽然不是土豪,也需要基本安全和保障
第27讲 | 云中的网络QoS:邻居疯狂下电影,我该怎么办?
第28讲 | 云中网络的隔离GRE、VXLAN:虽然住一个小区,也要保护隐私
第三模块 热门技术中的应用:容器技术中的网络 (3讲)
第29讲 | 容器网络:来去自由的日子,不买公寓去合租
第30讲 | 容器网络之Flannel:每人一亩三分地
第31讲 | 容器网络之Calico:为高效说出善意的谎言
第三模块 热门技术中的应用:微服务相关协议 (5讲)
第32讲 | RPC协议综述:远在天边,近在眼前
第33讲 | 基于XML的SOAP协议:不要说NBA,请说美国职业篮球联赛
第34讲 | 基于JSON的RESTful接口协议:我不关心过程,请给我结果
第35讲 | 二进制类RPC协议:还是叫NBA吧,总说全称多费劲
第36讲 | 跨语言类RPC协议:交流之前,双方先来个专业术语表
第四模块 网络协议知识串讲 (4讲)
第37讲 | 知识串讲:用双十一的故事串起碎片的网络协议(上)
第38讲 | 知识串讲:用双十一的故事串起碎片的网络协议(中)
第39讲 | 知识串讲:用双十一的故事串起碎片的网络协议(下)
第40讲 | 搭建一个网络实验环境:授人以鱼不如授人以渔
答疑与加餐 (9讲)
协议专栏特别福利 | 答疑解惑第一期
协议专栏特别福利 | 答疑解惑第二期
协议专栏特别福利 | 答疑解惑第三期
协议专栏特别福利 | 答疑解惑第四期
协议专栏特别福利 | 答疑解惑第五期
加餐1 | 测一测:这些网络协议你都掌握了吗?
加餐2 | 创作故事:我是如何创作“趣谈网络协议”专栏的?
加餐3 | “趣谈网络协议”专栏食用指南
第2季回归 | 这次我们来“趣谈Linux操作系统”
结束语 (1讲)
结束语 | 放弃完美主义,执行力就是限时限量认真完成
趣谈网络协议
登录|注册

第30讲 | 容器网络之Flannel:每人一亩三分地

刘超 2018-07-25
上一节我们讲了容器网络的模型,以及如何通过 NAT 的方式与物理网络进行互通。
每一台物理机上面安装好了 Docker 以后,都会默认分配一个 172.17.0.0/16 的网段。一台机器上新创建的第一个容器,一般都会给 172.17.0.2 这个地址,当然一台机器这样玩玩倒也没啥问题。但是容器里面是要部署应用的,就像上一节讲过的一样,它既然是集装箱,里面就需要装载货物。
如果这个应用是比较传统的单体应用,自己就一个进程,所有的代码逻辑都在这个进程里面,上面的模式没有任何问题,只要通过 NAT 就能访问进来。
但是因为无法解决快速迭代和高并发的问题,单体应用越来越跟不上时代发展的需要了。
你可以回想一下,无论是各种网络直播平台,还是共享单车,是不是都是很短时间内就要积累大量用户,否则就会错过风口。所以应用需要在很短的时间内快速迭代,不断调整,满足用户体验;还要在很短的时间内,具有支撑高并发请求的能力。
单体应用作为个人英雄主义的时代已经过去了。如果所有的代码都在一个工程里面,开发的时候必然存在大量冲突,上线的时候,需要开大会进行协调,一个月上线一次就很不错了。而且所有的流量都让一个进程扛,怎么也扛不住啊!
没办法,一个字:拆!拆开了,每个子模块独自变化,减少相互影响。拆开了,原来一个进程扛流量,现在多个进程一起扛。所以,微服务就是从个人英雄主义,变成集团军作战。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《趣谈网络协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(19)

  • 小宇宙
    flannel的backend除了UDP和vxlan还有一种模式就是host-gw,通过主机路由的方式,将请求发送到容器外部的应用,但是有个约束就是宿主机要和其他物理机在同一个vlan或者局域网中,这种模式不需要封包和解包,因此更加高效。

    作者回复: 对的

    2018-08-27
    12
  • jacy
    回答自己提的udp丢包的问题,希望老师帮忙看看是否正确。
    flannel实际上是将docker出来的包再加udp封装,以支持二层网络在三层网络中传输。udp确实可能丢包,丢包是发生在flannel层上,丢包后内层的docker(如果被封装的是tcp)无ack,源docker的虚拟网卡还会按tcp协议进行重发。无非是按flannel原理多来几次。

    作者回复: udp会丢的

    2019-03-14
    4
  • 刘工的一号马由
    1默认路由发到容器网络的网关
    2underlay网络
    2018-07-26
    4
  • 小宇
    老师好,我这里有一个疑问,第28讲的VXLAN,虚拟机通信时包的结构, VTEP的设备ip为什么在VXLAN头之外,我的理解VTEP设备的ip应该和flannel的VXLAN模式一样,在VXLAN头里面。

    作者回复: vxlan的格式都是一样的

    2019-01-23
    3
  • Jay
    “例如物理机 A 是网段 172.17.8.0/24,物理机 B 是网段 172.17.9.0/24”,这里应该是指物理机A给docker分配的网段吧?老师,这个容易造成误解哦……
    2018-08-03
    3
  • 天王
    1 快速迭代,单体应用不能满足快速迭代和高并发的要求,所以需要拆成微服务,容器作为集装箱,可以保证应用在不同的环境快速迁移,还需要一个容器的调度平台,可以将容器快速的调度到任意服务器,这个调度平台就是k8s。2 微服务之间存在服务调用的问题,就像集团军作战,需要解决各个部队位置和部队之间通讯的问题,2.1 位置问题用注册中心,但是可能会有ip端口冲突,Flannel是为了解决这种问题的技术,给每个物理机分配一小段网络段,每个物理机的容器只使用属于自己的网络段,2.2 部队之间通讯 容器网络互相访问,Flannel使用UDP实现Overlay网络,每台物理机上都跑一个flannelid进程,打开dev/net/tun设备的时候,就会有这个网卡,所有发到flannel.1的网络包,都会被flannelid进程截获,会讲网络包封装进udp包,发到b的flannel.1,b的flannelid收到网络包以后,解开,由flannel.1发出去,通过dock0给到容器b。通讯比较慢,Flannel使用VXLAN技术,建立一个VXLAN的VTEP,通过netlink通知内核建立一个VTEP的网卡flannel.1,A物理机上的flannel.1就是vxlan的vtep,将网络包封装,通过vxlan将包转到另一台服务器上,b的flannel.1接收到,解包,变成内部的网络包,通过物理机上的路由转发到docker0,然后转发到容器B里面,通信成功。
    2019-07-30
    2
  • 王子瑞Aliloke有事电联
    老刘讲的太好了!!!这个专栏超值,开眼界了,而且讲的通俗易懂-虽然还有很多知识我没有懂,但开眼界了。
    2019-03-14
    1
  • 大星星
    想问下老师,后一种使用VTEP,为什么flannel.id里面内部源地址配置的是flannel.id的mac地址,而不是使用第一种打开dev/net/tun时候源地址写的是容器A的源地址。
    为什么两种情况下不一样了,谢谢

    作者回复: 这是flannel的一个问题,会造成很多困扰

    2019-02-22
    1
  • ⊙▽⊙
    老师我想问下,如何知道容器宿主机的地址,这样才可以在对数据包进行二次封装的时候把目的地址填写进去
    2018-12-29
    1
  • 饭粒
    VXLAN 模式的 VTEP 相较于 /dev/net/tun 字符设备网卡,性能改善是在 VTEP 通信比字符设备网卡通信少了内核态用户态间的数据拷贝?
    2019-12-07
  • 饭粒
    # tcpdump -i eth0 dst 192.168.1.7 -w dst.pcap
    抓了下 vxlan 类型的 flannel 容器间的包,确实是 udp 的封包,但是没有看到 vxlan 的信息,不知道这要怎么看?
    Frame 3: 201 bytes on wire (1608 bits), 201 bytes captured (1608 bits)
    Ethernet II, Src: fa:16:3e:08:a8:46 (fa:16:3e:08:a8:46), Dst: fa:16:3e:5a:de:91 (fa:16:3e:5a:de:91)
    Internet Protocol Version 4, Src: 192.168.1.4, Dst: 192.168.1.7
    User Datagram Protocol, Src Port: 54228, Dst Port: 8472
    Data (159 bytes)
    2019-12-07
  • ╯梦深处゛
    对于 IP 冲突的问题,如果每一个物理机都是网段 172.17.0.0/16,肯定会冲突啊,但是这个网段实在太大了,一台物理机上根本启动不了这么多的容器,所以能不能每台物理机在这个大网段里面,抠出一个小的网段,每个物理机网段都不同,自己看好自己的一亩三分地,谁也不和谁冲突。
    -----------------------------------------------------------------------------------------------------
    老师,不同节点之间不一定都是不同网段的,相反很多时候,一个K8S集群的所有节点都是在一个网段,请问在这种场景下,如果避免这种冲突的问题呢?

    作者回复: 一个K8S集群的所有节点都是在一个大网段里面,但是不同的主机分了小网段。

    2019-04-23
  • allwmh
    flannel怎么做容器的IP保持呢?

    作者回复: 不保持

    2019-04-23
  • 超超
    回答问题1:是不是在dockerX网卡上做NAT?

    作者回复: 是的

    2019-04-08
  • jacy
    udp丢包能接受吗
    2019-03-13
  • 峻铭
    如物理机A坏了,docker要迁移到C上去,物理机B内容器中的应用如何和C中的通信

    作者回复: 会重新配置

    2018-10-11
  • donson
    flannel网络的地址段是10.242.0.0/16,默认每个Node上的子网划分是10.242.x.0/24,请问这个子网划分在哪里可以配置,比如我想划分成/21
    2018-09-03
  • selboo
    物理机A和物理机B是以access模式连接到交换机。此时flannel.1 在加上 VXLAN 头可以通信吗???求老师解答。
    2018-08-07
  • _CountingStars
    1.容器访问外面还是应该用nat
    2.使用bgp协议的其他实现 calico kube-router
    2018-07-25
收起评论
19
返回
顶部