Fannel-容器互通

Flannel:

flannel是coreos开发专门用于docker多机互联的一个工具,让集群中的不同节点主机创建的容器都具有全集群唯一的虚拟ip地址,flannel使用go语言编写。

Flannel的设计目的:为集群中的所有节点重新规划IP地址的使用规则,使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。


工作原理:

Flannel实质上是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。

简单来说就是,将配置存在etcd上面,然后客户端使用flannel获取到一个可用的网段,然后将该网段修改docker0的网段,使得每个主机的docker IP段不同,但是又同在一个大网段中。

原理图:

安装配置:

1.安装etcd

curl -L https://github.com/coreos/etcd/releases/download/v2.2.2/etcd-v2.2.2-linux-amd64.tar.gz -o etcd-v2.2.2-linux-amd64.tar.gz
tar xzvf etcd-v2.2.2-linux-amd64.tar.gz
cd etcd-v2.2.2-linux-amd64
cp etcd*  /bin/
etcd --listen-client-urls ‘http://0.0.0.0:2379‘ --advertise-client-urls="http://0.0.0.0:2379" &

2.配置网络

etcdctl -C 192.168.229.128:2379 set /data/etcdctl/config ‘{"network":"192.168.0.0/16"}‘ UDP转发,使用端口暂不确定
etcdctl -C 192.168.229.128:2379 set /data/etcdctl/config ‘{"network":"192.168.0.0/16", "Backend": {"Type": "vxlan"}}‘ VXLAN模式
说明: VXLAN模式性能比UDP高,但是都相对于正常网络有损失

3.安装flannel(运行docker机器上面)

flanneld通过etcd获取到一些配置。然后通过 mk-docker-opts.sh生成参数列表 ,需要自己加到/etc/default/docker中。重启docker,最主要的就是docker0的IP段

wget https://github.com/coreos/flannel/releases/download/v0.5.5/flannel-0.5.5-linux-amd64.tar.gz

该包中有两下文件

mk-docker-opts.sh: 可不用,主要是用于生成docker启动的一些参数

flanneld: 二进制文件

4. 启动flanneld

flanneld -etcd-endpoints="http://192.168.229.128:2379" -etcd-prefix="/data/etcdctl" &
cd flannel-0.5.5  && ./mk-docker-opts.sh -i
source /run/flannel/subnet.env
ifconfig docker0 ${FLANNEL_SUBNET}
service docker restart

docker run -it -d --name ubuntu01 ubuntu    #正常run一个容器,内网关互通
[email protected]:/# ping 192.168.88.2
PING 192.168.88.2 (192.168.88.2) 56(84) bytes of data.
64 bytes from 192.168.88.2: icmp_seq=1 ttl=60 time=1.89 ms
64 bytes from 192.168.88.2: icmp_seq=2 ttl=60 time=1.32 ms
64 bytes from 192.168.88.2: icmp_seq=3 ttl=60 time=1.84 ms

原理参考链接:

http://www.open-open.com/news/view/1aa473a

时间: 2024-11-10 18:22:07

Fannel-容器互通的相关文章

[docker]使用quaaga实现(rip ospf)实现主机间容器互通

使用quaaga实现(rip ospf)实现主机间容器互通 - n1设置 brctl addbr br0 ip a a 10.1.1.1/24 br0 ip a a 10.1.1.1/24 dev br0 ip l s dev br0 up systemctl stop docker dockerd -b=br0 docker run -itd --name=router --privileged --net=host georce/router - n2设置 brctl addbr br0 i

docker技术剖析--docker网络(二)docker宿主机之间容器互通

http://hongge.blog.51cto.com/ 多台物理主机之间的容器互联(暴露容器到真实网络中) docker 默认的桥接网卡是 docker0 .它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 vethxxx,而 docker 只是把所有这些网卡桥接在一起,如下: 这样就可以把这个网络看成是一个私有的网络,通过 nat 连接外网,如果要让外网连接到容器中,就需要做端口映射,即 -p 参数. 如果在企业内部应用,或则做多个物理主机的集群,可能需要将多个物理

docker虚拟网桥实现固定IP,容器互通,外网可用

提示: Docker不再兼容CentOS6,在使用docker的时候请将系统进行升级 CentOS最低版本7.0   kernel最低3.10.0 注意关闭SElinux和iptables等防火墙 一.更新阿里云CentOS源,安装Docker 备份yum源 # mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载阿里云yum源 # wget -O /etc/yum.repos.d/Cen

理解Docker(6):若干企业生产环境中的容器网络方案

本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 (6)若干企业生产环境中的容器网络方案 Docker 在早期只有单机上的网络解决方案,在 1.19 版本引入了原生的 overlay 网络解决方案,但是它的性能损耗较大,可能无法适应一些生产环

Docker多容器连接-以Nginx+PHP为例

Docker提供了多个容器直接访问的方法,最简单的方式是直接使用端口映射-p参数指定映射的端口或者-P映射所有端口,多个容器直接通过网络端口进行访问. 但网络端口映射方式并不是Docker中连接多个容器的唯一方式,还可以使用Docker的连接系统(--link)连接多个容器,当容器连接到一起时,接受者容器就可以看到源容器的信息. 建立容器之间的连接 - 以Nginx+PHP为例 在容器直接建立连接要使用--link选项 --link <name or id>:alias 这里我们通过建立一个

容器中跨主机的网络方案-Weave

容器中的网络是建立docker集群的重要内容. 本文将介绍如何用Weave实现容器的多节点互通. Weave是一个开源的项目,其网站为: https://www.weave.works/ 其工作原理相当比较简单,每个Docke的node和其他Docker的node建立peer的关系,如下图: 在每个Node上,创建Weave的Router,由Weave Router转发容器间的流量,如下图: 安装过程相对比较简单: 一 安装docker 在需要运行docker的node中安装docker软件 y

容器网络

容器的网络栈 所谓的网络栈包括:网卡.回环设备.路由表.Iptables规则,而对于一个进程来讲,这些要素是构成发起和响应网络请求的基本环境.而对于容器来讲可以直接使用宿主机的网络栈,即不开启Network Namespace,例如: docker run -d --net=host --name nginx-host nginx 直接监控到宿主机80端口 netstat -ntlp | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 29133/n

Kubernetes &amp; Docker 容器网络终极之战(十四)

目录 一.单主机 Docker 网络通信 1.1.host 模式 1.2 Bridge 模式 1.3 Container 模式 1.4.None 模式 二.跨主机 Docker 网络通信分类 2.1 通信方案 2.2.容器网络规范 2.3.网络通信实现方案 2.4.Kubernetes 网络模型 三.跨主机 Docker 网络 3.1 Flannel 网络方案 3.2.Calico 网络方案 3.3.Canal 网络方案 3.4.Docker overlay 网络方案 3.5.Docker ma

支持100+业务线、累计发布17万次|宜信容器云的A点与B点(分享实录)

宜信公司从2018年初开始建设容器云,至今,容器云的常用基本功能已经趋于完善,主要包括服务管理.应用商店.Nginx配置.存储管理.CI/CD.权限管理等,支持100+业务线.3500+的容器运行.伴随公司去VMware以及DevOps.微服务不断推进的背景,后续还会有更多的业务迁移到容器云上,容器云在宜信发挥着越来越重要的作用.本次分享主要介绍宜信容器云平台的背景.主要功能.落地实践及未来规划. 一.宜信容器云平台背景 宜信容器云平台的建设背景主要包括: 提高资源利用率.容器云建设之前,每台物

Kubernetes 网络原理

Docker网络基础 由于Kubernetes是基于Docker容器作为应用发布的载体,而Docker本身的网络特性也决定了Kubernetes在构建一个容器互通网络必须要解决Docker自身网络的缺陷. 网络命名空间 为了支持网络协议栈的多个实例,Linux在网络命名空间中引入了网络命名空间(Network Namespace),这些网络协议栈被隔离到不同的命名空间中.不同的命名空间中资源完全隔离,彼此之间无法完全通信.通过不同的网络命名空间,就可以在一台宿主机上虚拟多个不同的网络环境.Doc