一、简介

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 实现相关推荐

  1. calico 跨主机容器网络通信

    环境说明 etcd服务器10.0.0.210, 安装版本3.1.11 两台虚拟机 主机1: hostname: node211 ip:10.0.0.211 OS: centos 7.4 docker: ...

  2. docker跨主机集群之flannel

    0. 环境说明 CentOS7 etcd-v3.4.3-linux-amd64.tar.gz flannel-v0.11.0-linux-amd64.tar.gz 官方文档:https://githu ...

  3. docker 绑定固定ip 跨主机容器互访

    之前使用pipework 分配静态ip是暂时的,重启之后就会失效,并且使用pipework绑定的ip 物理机,虚拟机,docker容器的ip都在同一网段,这在生产环境是很困难的,下面使用docker自 ...

  4. Docker原生网络、自定义网络、Docker容器通信、跨主机容器网络

    Docker原生网络.自定义网络.Docker容器通信.跨主机容器网络 Docker原生网络 bridge Host none Docker自定义网络 自定义bridge overlay macvia ...

  5. Docker 跨主机网络方案分析

    PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...

  6. docker跨主机网络——overlay与macvlan

    docker的跨主机网络 前言 这篇文件分两种方式介绍docker跨主机通信,overlay和macvlan,macvlan的方式给大家做个参考,生产环境下不推荐大家使用这种方式

  7. docker webdav_跨主机容器共享数据卷(webdav 双向同步)

    在校内搭建的 Git 仓库,有时候需要在校外访问操作.因为使用的是 Gogs 搭建,所以只需要同步 data 文件夹即可,网上关于双向同步的方案有很多,但是都很麻烦,而且经常会"打架&quo ...

  8. Docker实现跨主机容器实例网络通信(2)——利用OpenVSwitch构建多主机Docker网络

    题记 前面我们已经针对Docker容器进行了简单介绍,相信感兴趣的朋友已经能在相关帮助下部署一个docker环境感受了容器带给我们的另一种技术进步. 当然,如果你慢慢深入容器的技术研究,你会发现,尽管 ...

  9. 如何使用Calico实现跨主机Docker网络通信

    写在前面 学习K8s,学到这里,整理记忆, 本文用于理解K8s网络中Calico网路方案的原理优缺点 内容包括: 常见的容器跨主机通信方案简介 Caliao实现Container跨主机通信简述 Cal ...

最新文章

  1. linux python2和python3共存_linux-Centos7安装python3并与python2共存
  2. 手把手教你用Kaggle开启机器学习之旅(附资源链接)
  3. Windows平台kafka环境的搭建
  4. 最简单的基于FFMPEG的推流器附件:收流器
  5. 【Python】【Python语言】Python3.7.2的关键字模块(keyword module)
  6. 为什么华为a1路由器网速变慢_上网用的路由器晚上要不要关?1个月能耗多少电?答案很意外!...
  7. 事务、事务的隔离级别、一致性
  8. 2022年6月25日PMP考试通关宝典-4
  9. mos管的rc吸收电路计算_RC阻容吸收计算公式
  10. 不同时区时间换算_世界时区划分时差在线查询计算_时间换算器
  11. 大数据系列之Java调用elasticsearch的增删查改聚合
  12. 免费logo设计在线生成(不定时更新)
  13. Linux中的子shell是什么,怎么理解?
  14. Rockchip | Rockchip Kernel的获取与构建
  15. 基于RNA-seq的基因表达分析
  16. 震惊!这浏览器居然进过全球 Top10
  17. 从营收提升到品牌资产增长,私域时代的购物节跃迁
  18. 关于生日悖论问题的验证
  19. Oracle利用start with子句实现递归查询
  20. GX works 2 使用问题

热门文章

  1. Android viewpager+fragment实现无限滚动,左右有前/后一页的部分,并fragment显示的内容是activity传过去的数据
  2. poi-tl填充动态word表格数据
  3. PYNQ开发板使用-使用DMA进行数据搬移(Simple DMA transfer 模式)
  4. 【微信小程序】横向/纵向布局(98/100)
  5. ES6的Array.from方法创建长度为N的undefined数组
  6. 2022-2028年中国商业智能化行业发展现状调查及前景战略分析报告
  7. python-Counter计数函数以及most_common函数
  8. Apple Music预告登场 暗示AirPod 3新款耳机发售?
  9. 试验解析抖音无水印视频【PHP版】
  10. html5点赞计数功能,点赞功能