docker with flannel
** 原创文章,请勿转载 **
docker的单host,多container环境下,是使用host的docker0网桥进行通信的。如果跨host, container之间要通信怎么办呢?
答案是flannel(当然也有其它方案)。
本文记录下实验过程。
1. 环境
三个VM (都是CentOS 7.3 64位)
192.168.1.120 etcd
192.168.1.121 flannel, docker
192.168.1.122 flannel, docker
etcd, flannel, docker都是通过yum安装。 flannel是0.7.6版本, docker是17.09.0-ce版本
# yum install etcd
# yum install flannel
# yum install docker-ce
如果是yum install docker, 应该安装的是1.12.6。
2. 向etcd添加配置项
先在192.168.1.120上,用etcdctl向etcd添加一个flannel的配置项,名称任意。
网上有/flannel/network/config, 有/coreos.com/network/config, ... 都行,无所谓。我用的是/flannel/network/config
# etcdctl set /flannel/network/config '{"Network": "10.80.0.0/16"}'
这个10.80.0.0也是随便写的,10.20.0.0也行,反正随便, 习惯上一般是10.x.x.x, 或172.x.x.x 或192.x.x.x。
/16, 掩码。
3. 启动flannel
在192.168.1.121, 192.168.1.122两个vm上做同样的工作:
启动前,要对flannel进行配置
# vi /etc/sysconfig/flanneld # 这个指定etcd集群的地址,多个地址用逗号分开
FLANNEL_ETCD_ENDPOINTS="http://192.168.1.120:2379"
# 这个是etcd里配置项的key的前缀, flannel是通过这个key,从etcd查询网络配置信息的
FLANNEL_ETCD_PREFIX="/flannel/network"
启动:
# systemctl daemon-reload
# systemctl start flanneld
启动后,两个vm的docker0的ip,不再是172.17.0.1, 而是变成10.80.x.x,
比如, 192.168.1.121的docker0的ip, 变成10.80.55.1
192.168.1.122的docker0的ip, 变成10.80.17.1
10.80.55.0/24, 10.80.17.0/24, 是10.80.0.0/16的子网, 这两个子网的网段就是flannel根据etcd里的配置,自动分配的。
如果重新实验, 就不再是55和17,而是别的数字.
那么在192.168.1.121这台vm上, docker container分配的地址就是
10.80.55.2, 10.80.55.3, ... 依此类推
在192.168.1.122这个vm上, docker container的ip就是
10.80.17.2, 10.80.17.3, ...
4. 启动docker
那么现在的问题是,docker怎么就那么听话,使用你指定的子网呢? 默认docker是使用172.17.0.0段
这个是通过dockerd的--bip参数指定的。
就是启动docker的时候要这样
# /usr/bin/dockerd --bip="10.80.55.1/24"
但这样是hardcode, 也就是ip是写死的,不能够啊。
flannel在安装时,会生成几个配置文件,具体是哪几个记不住不写了,网上都有。
经过参数化后,docker启动变成这个样子:
# vi /usr/lib/systemd/system/docker.service
将
ExecStart=/usr/bin/dockerd 改成
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPOTIONS 就OK了。 (DOCKER_NETWOKR_OPTIONS就是配置文件里的变量, 会映射到docker.service里)
启动
# systemctl daemon-reload
# systemctl start docker
5. 启用ip转发
如果不启用这个,跨host的容器间是不能通信的, 即使关掉selinux, firewalld也不行。
# iptables -P FORWARD ACCEPT
6. 测试
测试使用alpine,或busybox,它们都有ping命令,这里以alpine为例
192.168.1.121:
192.168.1.122
如果不启动ip转发,可以ping通10.80.17.0, 10.80.17.1, 但ping不通10.80.17.2。
至此,实验成功!
7. 再补充一点
docker run 每启动一个container, host的主机上就会多出一个vethxxxxxx设备, 它对应着容器里的eth0.
docker with flannel的更多相关文章
- docker使用flannel网络
基础环境我们使用了两台centos 7系统 基础配置为: 两台机器IP为 172.17.3.10 172.17.3.62 hosts文件配置为 172.17.3.10 node1 172.17.3.6 ...
- Docker 网络 Flannel
flannel 安装 sudo yum install kernel-headers golang gccyum install flannel flannel 配置 在etcd中设置变量 etcdc ...
- Docker - 用Flannel跨主机
试了下比较流行的几种SDN,感觉flannel还是比较好用,这里简单记录一下. 用的是virtualbox,3个机器,分别为: genesis : inet 192.168.99.103/24 brd ...
- 二进制安装 kubernetes 1.12(二) - 安装docker, 部署Flannel网络
在 node 节点上安装 docker 参考 https://www.cnblogs.com/klvchen/p/8468855.html Flannel 工作原理: 部署Flannel网络 在 ma ...
- k8s1.4.3安装实践记录(1)-etcd、docker、flannel安装配置
虚拟机:VMware® Workstation 12 Pro 系统:CentOS Linux release 7.2.1511 (Core) 3.10.0-327.el7.x86_64 由于刚开始学习 ...
- docker使用 Flannel(etcd+flannel)网络
一.Flannel网络简介 Flannel是一种基于overlay网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信,Flannel是CoreOS开发,专门用于 ...
- 【Network】Calico, Flannel, Weave and Docker Overlay Network 各种网络模型之间的区别
From the previous posts, I have analysed 4 different Docker multi-host network solutions - Calico, F ...
- docker k8s 1.3.8 + flannel
docker k8s + flannel kubernetes 是谷歌开源的 docker 集群管理解决方案. 项目地址: http://kubernetes.io/ 测试环境: node-1: 10 ...
- 在 Docker 中使用 flannel - 每天5分钟玩转 Docker 容器技术(60)
上一节我们安装和配置了 flannel,本节在 Docker 中使用 flannel. 配置 Docker 连接 flannel 编辑 host1 的 Docker 配置文件 /etc/systemd ...
随机推荐
- Python_02笔记
数据类型 引子 什么是数据?x=10, 10 是我们要存储的数据 为啥数据要分不同的类型数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 数据类型数字(整形,长整型,浮点型,复数)字符串 ...
- Android 防内存泄露handler
Android 防内存泄露handler 1.使用弱引用 WeakRefHander /** * 作者: allen on 15/11/24.感谢开源作者https://coding.net/u/co ...
- Creational模式之Builder模式
1.意图 将一个复杂对象的构建与它表示分离,使得相同的构建过程能够创建不同的表示. 查看很多其它请点击 2.别名 无 3.动机 一个RTF(Rich Text Format)文档交换格式的阅读器应能将 ...
- JavaScript 实现命名空间(namespace)的最佳方案——兼容主流的定义类(class)的方法,兼容所有浏览器,支持用JSDuck生成文档
作者: zyl910 一.缘由 在很多的面向对象编程语言中,我们可以使用命名空间(namespace)来组织代码,避免全局变量污染.命名冲突.遗憾的是,JavaScript中并不提供对命名空间的原生支 ...
- Material使用05 自定义主题、黑夜模式\白天模式切换
需求: 1 不使用materil依赖内建的主题,使用自己创建的主题 2 利用自己创建的主题实现白天模式和黑夜模式 1 自定义主题 1.1 创建自定义主题文件 them.scss // 引入materi ...
- 自学Zabbix3.8.2-可视化Visualisation-maps网络地图
自学Zabbix3.8.2-可视化Visualisation-maps网络地图 可以简单的理解为动态网络拓扑图,可以针对业务来配置zabbix map,通过map可以了解应用的整体状况:服务器是否异常 ...
- .net core中使用GB2312编码的问题
最近在用.net core写一个爬虫抓取网页上的数据,碰到了网页编码是GBK的页面,抓取的数据都是乱码,当使用Encoding.GetEncoding("GBK")的时候抛出了异常 ...
- 微信小程序路过
应该算是入门篇, 从我怎么0基础然后沿着什么方向走,遇到的什么坑,如何方向解决,不过本人接触不是很多,所以也就了解有限. 小程序的前提: 1.小程序大小不允许超过2M.(也就是本地图片,大图精图不要在 ...
- 从初识Maven到使用Maven进行依赖管理和项目构建
前些天就安装了Maven,以备自己以后整合项目用,尤其是我们的ssh,ssm项目.想必好多人在开始的时候并不清楚Maven是什么,它能够帮助我们干什么. 所以在学习Maven之前我们一定要知道它是什么 ...
- C语言中一些不被熟知的特性
designated initializers(c99) C99允许你对结构体中指定的变量初始化,如 struct Foo { int x; int y; int z; }; }; 指定初始化也可适用 ...