centos7下安装docker(15.4跨主机网络-flannel)

时间:2020-12-20 20:01:40

flannel是CoreOS开发的容器网络解决方案,flannel为每一个host分配一个subnet,容器从这些subnet中分配IP,这些IP可以在host之间路由,容器无需NAT和port mapping就可以跨主机通信。

每个subnet都是一个更大的IP池中划分的,flannel会在每个主机上运行一个叫flanned的agent,其职责就是从池子中分配subnet。为了在个主机之间共享,flannel用etcd(与consul类似的key-value分布式还素据库)存放网络状态,已分配的subnet,host的IP等信息

数据包如何在主机之间转发是由backend实现的,flannel提供了多种backend,最常用的有vxlan和host-gw,我们重点学习xvlan和host-gw,其他backend,参考:https://github.com/coreos/flannel

试验环境:盗图

centos7下安装docker(15.4跨主机网络-flannel)

etcd部署在192.168.7.222,docker1和docker2上部署flanneld

先来配置etcd,注:我们本次使用的方法是直接在192.168.7.222上运行脚本,当然也可以用容器来运行etcd,但是由于etcd所需的镜像在国外网站才能下载到,所以本次不使用容器的方法

容器的方法请参考:https://github.com/coreos/etcd/releases/

centos7下安装docker(15.4跨主机网络-flannel)

使用在linu本地创建etcd:

1.在192.168.7.222上运行如下脚本:本脚本在usr/local/bin下

centos7下安装docker(15.4跨主机网络-flannel)

ETCD_VER=v3.2.9

# choose either URL
GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/coreos/etcd/releases/download
DOWNLOAD_URL=${GOOGLE_URL} rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1 /tmp/etcd-download-test/etcd --version
<<COMMENT
etcd Version: 3.2.9
Git SHA: f1d7dd8
Go Version: go1.8.4
Go OS/Arch: linux/amd64
COMMENT ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl version
<<COMMENT
etcdctl version: 3.2.9
API version: 3.2
COMMENT

centos7下安装docker(15.4跨主机网络-flannel)

启动etcd服务:

/tmp/etcd-download-test/etcd也可在/tmp/etcd-dowmload-test/etcd下执行./etcd

centos7下安装docker(15.4跨主机网络-flannel)

centos7下安装docker(15.4跨主机网络-flannel)

测试etcd是否可用

ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo

centos7下安装docker(15.4跨主机网络-flannel)

可以正常在etcd中存取数据了

安装和配置flannel

flannel没有现成的可执行文件,必须自己build,最可靠的办法是在Docker容器中build。不过用于build的docker镜像托管在grc.io,国内可能无法直接访问

使用二进制文件包配置flannel

1.部署flannel环境;

yum install kernel-headers golang gcc

centos7下安装docker(15.4跨主机网络-flannel)

2.安装flannel

centos7下安装docker(15.4跨主机网络-flannel)

centos7下安装docker(15.4跨主机网络-flannel)

3.在etcd中设置变量:etcdctl set /coreos.com/network/config '{ "Network": "172.17.0.0/16" }'

centos7下安装docker(15.4跨主机网络-flannel)

4.在flannel(192.168.7.235)配置flannel

centos7下安装docker(15.4跨主机网络-flannel)

FLANNEL_ETCD_ENDPOINTS="http://192.168.7.222:2379"     ETCD所在的服务器的IP

FLANNEL_ETCD_PREFIX="/coreos.com/network"