flannel 概述

flannel 是 CoreOS 开发的容器网络解决方案。

flannel 为每个 host 分配一个 subnet,容器从此 subnet 中分配 IP,这些 IP 可以在 host 间路由,容器间无需 NAT 和 port mapping 就可以跨主机通信。

每个 subnet 都是从一个更大的 IP 池中划分的,flannel 会在每个主机上运行一个叫 flanneld 的 agent,其职责就是从池子中分配 subnet。

为了在各个主机间共享信息,flannel 用 etcd(与 consul 类似的 key-value 分布式数据库)存放网络配置、已分配的 subnet、host 的 IP 等信息。

数据包如何在主机间转发是由 backend 实现的。

flannel 提供了多种 backend,最常用的有 vxlan 和 host-gw。(其他 backend 请参考 https://github.com/coreos/flannel。)

flannel实验环境描述如图:

etcd 部署在 10.12.31.21上,host1(10.12.31.22) 和 host2(10.12.31.23) 上运行 flanneld,首先安装配置 etcd。

1)安装配置 etcd

 [root@ubuntu ~]$cat etcd_install.sh
ETCD_VER=v2.3.7
DOWNLOAD_URL=https://github.com/coreos/etcd/releases/download
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
mkdir -p /tmp/test-etcd && tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/test-etcd --strip-components=
cp /tmp/test-etcd/etcd* /usr/local/bin/
 [root@ubuntu ~]$sh etcd_install.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
--:--:-- :: --:--:--
--:--:-- :: --:--:-- 100k
8347k 8347k 222k :: :: --:--:-- 250k
etcd-v2.3.7-linux-amd64/Documentation/
etcd-v2.3.7-linux-amd64/Documentation/runtime-configuration.md
etcd-v2.3.7-linux-amd64/Documentation/admin_guide.md
etcd-v2.3.7-linux-amd64/Documentation/tuning.md
etcd-v2.3.7-linux-amd64/Documentation/glossary.md
etcd-v2.3.7-linux-amd64/Documentation/rfc/
etcd-v2.3.7-linux-amd64/Documentation/rfc/v3api.md
etcd-v2.3.7-linux-amd64/Documentation/discovery_protocol.md
etcd-v2.3.7-linux-amd64/Documentation/errorcode.md
etcd-v2.3.7-linux-amd64/Documentation/metrics.md
etcd-v2.3.7-linux-amd64/Documentation/security.md
etcd-v2.3.7-linux-amd64/Documentation/configuration.md
etcd-v2.3.7-linux-amd64/Documentation/docker_guide.md
etcd-v2.3.7-linux-amd64/Documentation/dev/
etcd-v2.3.7-linux-amd64/Documentation/dev/release.md
etcd-v2.3.7-linux-amd64/Documentation/members_api.md
etcd-v2.3.7-linux-amd64/Documentation/auth_api.md
etcd-v2.3.7-linux-amd64/Documentation/backward_compatibility.md
etcd-v2.3.7-linux-amd64/Documentation/platforms/
etcd-v2.3.7-linux-amd64/Documentation/platforms/freebsd.md
etcd-v2.3.7-linux-amd64/Documentation/libraries-and-tools.md
etcd-v2.3.7-linux-amd64/Documentation/implementation-faq.md
etcd-v2.3.7-linux-amd64/Documentation/reporting_bugs.md
etcd-v2.3.7-linux-amd64/Documentation/upgrade_2_2.md
etcd-v2.3.7-linux-amd64/Documentation/internal-protocol-versioning.md
etcd-v2.3.7-linux-amd64/Documentation/upgrade_2_1.md
etcd-v2.3.7-linux-amd64/Documentation/faq.md
etcd-v2.3.7-linux-amd64/Documentation/api_v3.md
etcd-v2.3.7-linux-amd64/Documentation/runtime-reconf-design.md
etcd-v2.3.7-linux-amd64/Documentation/clustering.md
etcd-v2.3.7-linux-amd64/Documentation/proxy.md
etcd-v2.3.7-linux-amd64/Documentation/branch_management.md
etcd-v2.3.7-linux-amd64/Documentation/other_apis.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd----rc-memory-benchmarks.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd--demo-benchmarks.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd----benchmarks.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd----alpha-benchmarks.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd-storage-memory-benchmark.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/README.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd----rc-benchmarks.md
etcd-v2.3.7-linux-amd64/Documentation/benchmarks/etcd--watch-memory-benchmark.md
etcd-v2.3.7-linux-amd64/Documentation/api.md
etcd-v2.3.7-linux-amd64/Documentation/authentication.md
etcd-v2.3.7-linux-amd64/Documentation/04_to_2_snapshot_migration.md
etcd-v2.3.7-linux-amd64/Documentation/upgrade_2_3.md
etcd-v2.3.7-linux-amd64/Documentation/production-users.md
etcd-v2.3.7-linux-amd64/README-etcdctl.md
etcd-v2.3.7-linux-amd64/etcdctl
etcd-v2.3.7-linux-amd64/etcd
etcd-v2.3.7-linux-amd64/README.md
[root@ubuntu ~]$

该脚本从 github 上下载 etcd 的可执行文件并保存到 /usr/local/bin/,启动 etcd 并打开 2379 监听端口。

etcd -listen-client-urls http://10.12.31.21:2379 -advertise-client-urls http://10.12.31.21:2379

 [root@ubuntu ~]$etcd -listen-client-urls http://10.12.31.21:2379 -advertise-client-urls http://10.12.31.21:2379
-- ::33.110359 I | etcdmain: etcd Version: 2.3.
-- ::33.110422 I | etcdmain: Git SHA: fd17c91
-- ::33.110430 I | etcdmain: Go Version: go1.6.2
-- ::33.110437 I | etcdmain: Go OS/Arch: linux/amd64
-- ::33.110444 I | etcdmain: setting maximum number of CPUs to , total number of available CPUs is
-- ::33.110451 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd
-- ::33.110705 I | etcdmain: listening for peers on http://localhost:2380
-- ::33.110802 I | etcdmain: listening for peers on http://localhost:7001
-- ::33.110840 I | etcdmain: listening for client requests on http://10.12.31.21:2379
-- ::33.114237 I | etcdserver: name = default
-- ::33.114254 I | etcdserver: data dir = default.etcd
-- ::33.114259 I | etcdserver: member dir = default.etcd/member
-- ::33.114264 I | etcdserver: heartbeat = 100ms
-- ::33.114271 I | etcdserver: election = 1000ms
-- ::33.114278 I | etcdserver: snapshot count =
-- ::33.114288 I | etcdserver: advertise client URLs = http://10.12.31.21:2379
-- ::33.114297 I | etcdserver: initial advertise peer URLs = http://localhost:2380,http://localhost:7001
-- ::33.114310 I | etcdserver: initial cluster = default=http://localhost:2380,default=http://localhost:7001
-- ::33.141747 I | etcdserver: starting member ce2a822cea30bfca in cluster 7e27652122e8b2ae
-- ::33.141853 I | raft: ce2a822cea30bfca became follower at term
-- ::33.141900 I | raft: newRaft ce2a822cea30bfca [peers: [], term: , commit: , applied: , lastindex: , lastterm: ]
-- ::33.141915 I | raft: ce2a822cea30bfca became follower at term
-- ::33.142350 I | etcdserver: starting server... [version: 2.3., cluster version: to_be_decided]
-- ::33.143380 N | etcdserver: added local member ce2a822cea30bfca [http://localhost:2380 http://localhost:7001] to cluster 7e27652122e8b2ae
-- ::33.143968 E | etcdmain: failed to notify systemd for readiness: No socket
-- ::33.144218 E | etcdmain: forgot to set Type=notify in systemd service file?
-- ::33.542474 I | raft: ce2a822cea30bfca is starting a new election at term
-- ::33.542972 I | raft: ce2a822cea30bfca became candidate at term
-- ::33.543300 I | raft: ce2a822cea30bfca received vote from ce2a822cea30bfca at term
-- ::33.543575 I | raft: ce2a822cea30bfca became leader at term
-- ::33.543814 I | raft: raft.node: ce2a822cea30bfca elected leader ce2a822cea30bfca at term
-- ::33.544664 I | etcdserver: published {Name:default ClientURLs:[http://10.12.31.21:2379]} to cluster 7e27652122e8b2ae
-- ::33.544753 I | etcdserver: setting up the initial cluster version to 2.3
-- ::33.557561 N | etcdserver: set the initial cluster version to 2.3

测试 etcd 是否可用:

etcdctl --endpoints=10.12.31.21:2379 set foo "bar"

etcdctl --endpoints=10.12.31.21:2379 get foo

可以正常在 etcd 中存取数据了。

-----------------------------引用来自--------------------------------------

https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587799&idx=1&sn=a26c6c4a9681997031cd346224d01822&chksm=8d30814eba47085870ac9695411bc1943ee054baeb6920094256215112f5817b7a3874388c89&scene=21#wechat_redirect

第 8 章 容器网络 - 058 - flannel 概述的更多相关文章

  1. 第 8 章 容器网络 - 061 - flannel 的连通与隔离

    flannel 的连通与隔离 测试 bbox1 和 bbxo2 的连通性: bbox1 能够 ping 到位于不同 subnet 的 bbox2,通过 traceroute 分析一下 bbox1 到 ...

  2. 第 8 章 容器网络 - 060 - 在 Docker 中使用 flannel

    在 Docker 中使用 flannel 编辑 host1 的 Docker 配置文件 /etc/systemd/system/docker.service.d/10-machine.conf 设置 ...

  3. 第 8 章 容器网络 - 072 - 一文搞懂各种 Docker 网络

    Docker 起初只提供了简单的 single-host 网络,显然这不利于 Docker 构建容器集群并通过 scale-out 方式横向扩展到多个主机上. 跨主机网络方案: Docker Over ...

  4. 第 8 章 容器网络 - 063 - 如何使用 Weave 网络?

    如何使用 Weave 网络? weave 是 Weaveworks 开发的容器网络解决方案. weave 创建的虚拟网络可以将部署在多个主机上的容器连接起来. 对容器来说,weave 就像一个巨大的以 ...

  5. 第 8 章 容器网络 - 054 - 准备 macvlan 环境

    准备 macvlan 环境 macvlan 本身是 linux kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置 ...

  6. 第 8 章 容器网络 - 059 - 安装配置 flannel

    安装配置 flannel 1) build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 build. 不过用于做 build ...

  7. 第 8 章 容器网络 - 062 - 如何使用 flannel host-gw backend?

    flannel host-gw backend flannel 支持多种 backend:(1)vxlan backend:(2)host-gw: 与 vxlan 不同,host-gw 不会封装数据包 ...

  8. 第 8 章 容器网络 - 071 - 如何定制 Calico 的 IP 池?

    定制IP池 首先定义一个 IP Pool,比如: calicoctl create -f ipPool.yml 用此 IP Pool 创建 calico 网络. docker network crea ...

  9. 第 8 章 容器网络 - 070 - 如何定制 Calico 网络 Policy?

    定制 Calico 网络 Policy Calico 默认的 policy 规则是:容器只能与同一个 calico 网络中的容器通信. Calico 能够让用户定义灵活的 policy 规则,精细化控 ...

随机推荐

  1. 11: python递归

    1.1 递归讲解 1.定义 1. 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 2.递归特性 1. 必须有一个明确的结束条件 2. 每次进入更深一层递归时,问题 ...

  2. CC攻击介绍及如何防御

       CC攻击介绍 CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,前身名为Fatboy攻击,也是一种常见的网站攻击方法.攻击者借助代理服务器生成指向受害主机的合 ...

  3. tp剩余未验证内容-2

    如何设置一个 "资源" (文件/图片/zip/视频等)在点击时, 自动开始下载? 通常只要在这些地方, 设置 一个链接a, 让href等于这个资源就行了. 这样当点击这个资源时, ...

  4. php的缓冲/缓存 js对象 ,php编程的深入思考-1

    proto- 表示前缀, 表示"原始的, 主要的, 原型的, 最初的. 所以 prototype: 是原型的意思. webserver服务器apach, 的角色,就像一个 仓库/仓库保管员而 ...

  5. P4137 Rmq Problem / mex

    目录 链接 思路 线段树 莫队 链接 https://www.luogu.org/problemnew/show/P4137 思路 做了好几次,每次都得想一会,再记录一下 可持久化权值线段树 区间出现 ...

  6. L2-001:dijskstra + 多条最短路径 + 记录中间路径

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 思路: dijkstra算出最短路 ...

  7. 洛谷P1679神奇的四次方数--DP

    原题请戳>>https://www.luogu.org/problem/show?pid=1679<< 题目描述 在你的帮助下,v神终于帮同学找到了最合适的大学,接下来就要通知 ...

  8. 【译】第13节---数据注解-Required

    原文:http://www.entityframeworktutorial.net/code-first/required-attribute-dataannotations-in-code-firs ...

  9. NOIP2018退役祭

    退役感受 在写下这个标题的时候,我的心情是复杂的,无非就是感觉像对一位将要赶往战场的士兵说:"你的战争已经输掉了." 退役了,没有什么好说的.无论再怎么抱怨这题出的真烂也无法改变了 ...

  10. JsonKey小写

    System.Text.RegularExpressions.MatchCollection ms = System.Text.RegularExpressions.Regex.Matches(eca ...