容器中的网络是建立docker集群的重要内容。

本文将介绍如何用flannel实现容器的多节点互通。

下图是flannel的实现原理,摘自:

http://docker-k8s-lab.readthedocs.io/en/latest/docker/docker-flannel.html

本文有两台VM,一台是主节点,将安装docker、etcd、flannel,第二台是docker的工作节点,将安装docker、flannel。具体步骤如下:

一 安装

1 node1

node1 将安装docker、etcd和flannel

yum install docker  etcd flannel -y 

2 node2

node2 安装docker、flannel

yum install docker flannel -y 

二 配置启动etcd

1 配置

配置etcd:

vim /etc/etcd/etcd.conf

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" #这个参数是指明对外提供服务的地址和端口。0.0..0表示所有接口都可以提供服务
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.235.128:2379" #这个参数表明,其他etcd节点转发本节点的链接

2 启动

启动etcd

systemctl start etcd 

三 在etcd中增加flannel网络的kv值

通过etcdctl命令增加flannel网络配置的kv值,需要先将配置写入a.json文件:

etcdctl set /flannel/network/config < ./a.json
{"Network": "10.0.0.0/8",
"SubnetLen": ,
"SubnetMin": "10.10.0.0",
"SubnetMax": "10.99.0.0",
"Backend": {"Type": "vxlan",
"VNI": ,
"Port": }
}

四 配置flannel

1 配置flannel配置文件

两个node配置相同:

准备log目录

mkdir /var/log/k8s/flannel
chmod -R /var/log/k8s

编辑flannel配置

vim /etc/sysconfig/flanneld

FLANNEL_ETCD_ENDPOINTS="http://192.168.235.128:2379" #etcd的ip地址和端口
FLANNEL_ETCD_PREFIX="/flannel/network" #和刚才在etcd中配置相对应
FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/k8s/flannel/ --iface=eno16777736" #log和在哪个端口enable flannel

2 启动flannel

systemctl start flanneld

3 检查端口信息

此时检查ifconfig

docker0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 172.18.0.1 netmask 255.255.240.0 broadcast 0.0.0.0
…… eno16777736: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 192.168.235.128 netmask 255.255.255.0 broadcast 192.168.235.255
…… flannel.: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 10.10.48.0 netmask 255.255.255.255 broadcast 0.0.0.0
……

可以看到产生了一个flannel.100的端口。

4 配置docker0的地址

对docker0端口进行配置,使docker0采用flannel分配的地址段:

source /run/flannel/subnet.env
echo ${FLANNEL_SUBNET}
ifconfig docker0 ${FLANNEL_SUBNET}

可以看到docker0在flannel.100的网段中了:

docker0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 10.10.48.1 netmask 255.255.240.0 broadcast 0.0.0.0
...... eno16777736: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 192.168.235.128 netmask 255.255.255.0 broadcast 192.168.235.255
...... flannel.: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 10.10.48.0 netmask 255.255.255.255 broadcast 0.0.0.0
......

五 配置ip forward

1 配置iptables

配置iptables设置允许forward

iptables -P FORWARD ACCEPT 

2 配置sysctl文件

vim /etc/sysctl.conf                   

net.ipv4.ip_forward=
sysctl –p

六 重新启动docker

两个node上的docker都重新启动

systemctl restart docker 

七 检查

1 启动容器

docker01上:

docker run -d --name c01 httpd 

docker02上:

docker run -d --name c02 httpd 

2 检查网络联通性

在docker01上:

docker exec -it c01 bash 
root@d0a04613f4d9:/usr/local/apache2# ip a

: lo: <LOOPBACK,UP,LOWER_UP> mtu  qdisc noqueue state UNKNOWN group default
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UP group default
link/ether ::0a:0a:: brd ff:ff:ff:ff:ff:ff
inet 10.10.48.2/ scope global eth0

可以看到eth的地址10.10.48.2是flannel.100的网段

ping www.sina.com.cn

PING spool.grid.sinaedge.com (202.102.94.124) () bytes of data.
bytes from 202.102.94.124: icmp_seq= ttl= time=11.3 ms
bytes from 202.102.94.124: icmp_seq= ttl= time=11.9 ms
bytes from 202.102.94.124: icmp_seq= ttl= time=11.6 ms

在docker02上:

root@60973d570c81:/usr/local/apache2# ip a

: lo: <LOOPBACK,UP,LOWER_UP> mtu  qdisc noqueue state UNKNOWN group default
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UP group default
link/ether ::0a:0b:b0: brd ff:ff:ff:ff:ff:ff
inet 10.11.176.2/ scope global eth0

相同的,10.11.176.2是flannel分配的地址

相互ping:

ping 10.10.48.2

PING 10.10.48.2 (10.10.48.2) () bytes of data.
bytes from 10.10.48.2: icmp_seq= ttl= time=1.64 ms
bytes from 10.10.48.2: icmp_seq= ttl= time=1.32 ms
bytes from 10.10.48.2: icmp_seq= ttl= time=1.07 ms
bytes from 10.10.48.2: icmp_seq= ttl= time=1.39 ms

可以相互ping通

总结:

通过flannel可以实现多节点的docker互通。

容器中跨主机的网络方案-flannel的更多相关文章

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

    容器中的网络是建立docker集群的重要内容. 本文将介绍如何用Weave实现容器的多节点互通. Weave是一个开源的项目,其网站为: https://www.weave.works/ 其工作原理相 ...

  2. 容器中跨主机的网络方案-Calico

    容器中的网络是建立docker集群的重要内容. 本文将介绍如何用Calico实现容器的多节点互通. Calico的组件结构如下: Calico通过etcd同步Bridge的信息,各个Docker no ...

  3. Kubernetes网络方案 Flannel和calico

    摘抄某博客 1.   Flannel Flannel是为kubernetes设计的一个非常简洁的多节点三层网络方案,解决不同host上的容器互联问题,原理是为每个host分配一个subnet,容器从此 ...

  4. k8s网络之Flannel网络

    k8s网络主题系列: 一.k8s网络之设计与实现 二.k8s网络之Flannel网络 三.k8s网络之Calico网络 简介 Flannel是CoreOS团队针对Kubernetes设计的一个网络规划 ...

  5. 浅谈K8S cni和网络方案

    此文已由作者黄扬授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在早先的k8s版本中,kubelet代码里提供了networkPlugin,networkPlugin是一组接 ...

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

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

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

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

  8. [Kubernetes]谈谈容器跨主机网络

    继上篇文章:[Kubernetes]浅谈容器网络,自己给自己挖的坑,这篇文章来谈谈容器跨主机网络. 要理解容器"跨主通信"的原理,就要来谈谈 Flannel 这个项目. Flann ...

  9. Docker系列04—跨主机网络方案(overlay/weave)

    在前面详细讲解了几种网络模式:none,host,bridge,container.他们解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信. 跨主机网络方案包括两大类: 1,docke ...

随机推荐

  1. [POI2008]账本BBB

    题目 BZOJ 做法 明确: \(~~~1.\)为了达到目标分数所取反的次数是固定的 \(~~~2.\)为了满足前缀非负,得增加取反和滚动次数 滚动的次数可以枚举,增加的取反可以通过最小前缀和得到 滚 ...

  2. Windos Server 2008 配置定时清理任务

    系统环境:Windos 2008 R2 x64 位 实施方案:自动清理超过两周的备份系统文件. 编写自动清理脚本..bat文件后缀. 打开计划任务

  3. INSPIRED启示录 读书笔记 - 第38章 打造企业级产品的经验

    十大要点 1.可用性:很少有企业开发这类软件时会进行交互设计.视觉设计.可用性测试,因此产品才会表现得如此糟糕 2.产品正常工作:多数企业级产品根本没法使用,或者还需花大量的时间和资金开发临时补丁,产 ...

  4. centos_mysql5.6.35_rpm安装

    1.查看操作系统相关信息.[root@linuxidc ~]# cat /etc/issue CentOS release 6.5 (Final) Kernel \r on an \m [root@l ...

  5. java基础学习总结——java环境变量配置(转)

    只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ...

  6. UVA 12307 Smallest Enclosing Rectangle(旋转卡壳)

    题意:给你一些点,找出两个可以包含所有点的矩形,一个保证矩形面积最小,一个保证矩形周长最小,输出两个最小值 题解:首先根据所有点求一个凸包,再在这个凸包上枚举每条边,作为矩形的一条边(这样可以保证最小 ...

  7. Mfc 建立窗口线程

    之前一直都是在学习C,但是没用MFC写过东西.所以这个算是MFC的一个处女作把. 今天硬着头皮写了个爆破工具,但是界面(edit控制)在显示的时候一下就被卡住了. 于是到处问人,后来有个不错的朋友帮我 ...

  8. hdu 5890 Eighty seven 暴力+bitset优化背包

    Eighty seven Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) P ...

  9. (转)Nova中的compute_node

    如需转载,请标明原文出处以及作者 陈锐 RuiChen @kiwik *2015/2/4 22:44:22 * 写在最前面: 这段时间连续改了几个scheduler和resource_tracker相 ...

  10. HorizontalScrollView水平滚动控件

    HorizontalScrollView水平滚动控件 一.简介 用法ScrollView大致相同 二.方法 1)HorizontalScrollView水平滚动控件使用方法 1.在layout布局文件 ...