Docker 跨主机容器网络通信 -- Flannel 实现
一、简介
Flannel 是一种基于 overlay 网络的跨主机容器网络解决方案,也就是将 TCP 数据包封装在另一种网络包里面进行路由转发和通信,Flannel 是 CoreOS 开发,专门用于 Docker 多机互联的一个工具,让集群中的不同节点主机创建的容器都具有全集群唯一的虚拟 IP 地址,Flannel 使用 go 语言编写。
工作原理
- Overlay 型网络,即覆盖型网络
- 通过 etcd 保存子网信息及网络分配信息
- 给每台 Docker Host 分配置一个网段
- 通过 UDP 协议传输数据包
二、环境
主机 | 软件 |
---|---|
192.168.1.7 | etcd、flannel、docker |
192.168.1.8 | docker |
三、安装 flannel
所有主机环境初始化
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
192.168.1.7
yum -y install etcd flannel
etcd 配置
# /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"
启动 etcd 服务
systemctl start etcd && systemctl enable etcd
flannel 配置
# /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.1.7:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
在 etcd 中添加网段
etcdctl mk /atomic.io/network/config '{"Network":"172.20.0.0/16"}'
etcdctl get /atomic.io/network/config
启动 flannel 服务
systemctl start flanneld && systemctl enable flanneld
192.168.1.8
yum -y install flannel
flannel 配置
# /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.1.7:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
启动 flannel 服务
systemctl start flanneld && systemctl enable flanneld
四、安装 docker
yum install -y yum-utils device-mapper-persistent-data lvm2 \
&& yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo \
&& yum makecache fast \
&& yum -y install docker-ce \
&& mkdir -p /etc/docker/ \
&& echo -e '{\n "registry-mirrors": ["https://1e7waog4.mirror.aliyuncs.com"]\n}' > /etc/docker/daemon.json \
&& systemctl daemon-reload && systemctl start docker && systemctl enable docker
配置 docker 使用 flannel 网络
查看 flannel 的 subnet 信息,每个 flannel 主机的 FLANNEL_SUBNET
不一样
# 192.168.1.7 cat /run/flannel/subnet.env
FLANNEL_NETWORK=172.20.0.0/16
FLANNEL_SUBNET=172.20.24.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false
# 192.168.1.8 cat /run/flannel/subnet.env
FLANNEL_NETWORK=172.20.0.0/16
FLANNEL_SUBNET=172.20.32.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false
编辑 docker 的配置文件
{"registry-mirrors": ["https://1e7waog4.mirror.aliyuncs.com"],"bip": "172.20.24.1/24","mtu": 1472
}
{"registry-mirrors": ["https://1e7waog4.mirror.aliyuncs.com"],"bip": "172.20.32.1/24","mtu": 1472
}
重启 docker
systemctl restart docker
查看 docker0 的 ip 地址
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.20.24.1 netmask 255.255.255.0 broadcast 172.20.24.255ether 02:42:4d:94:cf:f2 txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.20.32.1 netmask 255.255.255.0 broadcast 172.20.32.255ether 02:42:01:9a:1b:46 txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
测试容器网络互通
docker run -it -d --name test centos:latest
docker exec test ping 172.20.24.2
docker exec test ping 172.20.32.2
如果不通,则执行以下命令,修改 iptables 规则表
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
Docker 跨主机容器网络通信 -- Flannel 实现相关推荐
- calico 跨主机容器网络通信
环境说明 etcd服务器10.0.0.210, 安装版本3.1.11 两台虚拟机 主机1: hostname: node211 ip:10.0.0.211 OS: centos 7.4 docker: ...
- docker跨主机集群之flannel
0. 环境说明 CentOS7 etcd-v3.4.3-linux-amd64.tar.gz flannel-v0.11.0-linux-amd64.tar.gz 官方文档:https://githu ...
- docker 绑定固定ip 跨主机容器互访
之前使用pipework 分配静态ip是暂时的,重启之后就会失效,并且使用pipework绑定的ip 物理机,虚拟机,docker容器的ip都在同一网段,这在生产环境是很困难的,下面使用docker自 ...
- Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络
Docker原生网络.自定义网络.Docker容器通信.跨主机容器网络 Docker原生网络 bridge Host none Docker自定义网络 自定义bridge overlay macvia ...
- Docker 跨主机网络方案分析
PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...
- docker跨主机网络——overlay与macvlan
docker的跨主机网络 前言 这篇文件分两种方式介绍docker跨主机通信,overlay和macvlan,macvlan的方式给大家做个参考,生产环境下不推荐大家使用这种方式
- docker webdav_跨主机容器共享数据卷(webdav 双向同步)
在校内搭建的 Git 仓库,有时候需要在校外访问操作.因为使用的是 Gogs 搭建,所以只需要同步 data 文件夹即可,网上关于双向同步的方案有很多,但是都很麻烦,而且经常会"打架&quo ...
- Docker实现跨主机容器实例网络通信(2)——利用OpenVSwitch构建多主机Docker网络
题记 前面我们已经针对Docker容器进行了简单介绍,相信感兴趣的朋友已经能在相关帮助下部署一个docker环境感受了容器带给我们的另一种技术进步. 当然,如果你慢慢深入容器的技术研究,你会发现,尽管 ...
- 如何使用Calico实现跨主机Docker网络通信
写在前面 学习K8s,学到这里,整理记忆, 本文用于理解K8s网络中Calico网路方案的原理优缺点 内容包括: 常见的容器跨主机通信方案简介 Caliao实现Container跨主机通信简述 Cal ...
最新文章
- linux python2和python3共存_linux-Centos7安装python3并与python2共存
- 手把手教你用Kaggle开启机器学习之旅(附资源链接)
- Windows平台kafka环境的搭建
- 最简单的基于FFMPEG的推流器附件:收流器
- 【Python】【Python语言】Python3.7.2的关键字模块(keyword module)
- 为什么华为a1路由器网速变慢_上网用的路由器晚上要不要关?1个月能耗多少电?答案很意外!...
- 事务、事务的隔离级别、一致性
- 2022年6月25日PMP考试通关宝典-4
- mos管的rc吸收电路计算_RC阻容吸收计算公式
- 不同时区时间换算_世界时区划分时差在线查询计算_时间换算器
- 大数据系列之Java调用elasticsearch的增删查改聚合
- 免费logo设计在线生成(不定时更新)
- Linux中的子shell是什么,怎么理解?
- Rockchip | Rockchip Kernel的获取与构建
- 基于RNA-seq的基因表达分析
- 震惊!这浏览器居然进过全球 Top10
- 从营收提升到品牌资产增长,私域时代的购物节跃迁
- 关于生日悖论问题的验证
- Oracle利用start with子句实现递归查询
- GX works 2 使用问题
热门文章
- Android viewpager+fragment实现无限滚动,左右有前/后一页的部分,并fragment显示的内容是activity传过去的数据
- poi-tl填充动态word表格数据
- PYNQ开发板使用-使用DMA进行数据搬移(Simple DMA transfer 模式)
- 【微信小程序】横向/纵向布局(98/100)
- ES6的Array.from方法创建长度为N的undefined数组
- 2022-2028年中国商业智能化行业发展现状调查及前景战略分析报告
- python-Counter计数函数以及most_common函数
- Apple Music预告登场 暗示AirPod 3新款耳机发售?
- 试验解析抖音无水印视频【PHP版】
- html5点赞计数功能,点赞功能