在上一篇中我们已经部署了etcd集群,我们仍然在之前的基础之上做配置,所有的环境还是沿用之前的,在这就不多说了。
Flannel实质上是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。
---------------------------------------------------------------------------------------------------
所谓的覆盖网络:覆盖网络(overlay network [1] )简单说来覆盖网络就是应用层网络,它是面向应用层的,不考虑或很少考虑网络层,物理层的问题。覆盖网络允许对没有IP地址标识的目的主机路由信息,例如:Freenet和DHT(分布式哈希表)可以路由信息到一个存储特定文件的结点,而这个结点的IP地址事先并不知道。比如说,P2P就是一种覆盖网络P2P是集中分散分形概念的同行对等覆盖网络,网络覆盖就是指用户能够接收到网络信号的范围。比如说网络覆盖10米半径,就是指以发射点为圆心10米半径内的设备都可以收到信号。通常指无线信号网络,如手机网络,无线网络等设备的有效信号接收范围
数据从源容器中发出后,经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡,这是个P2P的虚拟网卡,flanneld服务监听在网卡的另外一端。
Flannel通过Etcd服务维护了一张节点间的路由表,详细记录了各节点子网网段 。
源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达以后被解包,然后直接进入目的节点的flannel0虚拟网卡,然后被转发到目的主机的docker0虚拟网卡,最后就像本机容器通信一下的有docker0路由到达目标容器。
将flannel二进制文件解压并将文件移动到相应位置,flannel压缩包可以在etcd篇中的百度网盘地址处获取
tar -zxvf flannel-v0.10.0-linux-amd64.tar.gz
mkdir /k8s/flannel/{bin,config,ssl} -p
mv flanneld mk-docker-opts.sh /k8s/flannel/bin/
向 etcd 写入集群 Pod 网段信息
/k8s/etcd/bin/etcdctl \
--ca-file=/k8s/etcd/ssl/ca.pem --cert-file=/k8s/etcd/ssl/server.pem \
--key-file=/k8s/etcd/ssl/server-key.pem \
--endpoints="http://192.168.1.250:2379,http://192.168.1.251:2379,http://192.168.1.252:2379" \
set /coreos.com/network/config '{ "Network": "10.10.0.0/16", "Backend": {"Type": "vxlan"}}'
cd /k8s/etcd/ssl/
cp *.pem /k8s/flannel/ssl/
vi /k8s/flannel/config/flanneld
FLANNEL_OPTIONS="--etcd-endpoints=http://192.168.1.250:2379,http://192.168.1.251:2379,http://192.168.1.252:2379 -etcd-cafile=/k8s/flannel/ssl/ca.pem -etcd-certfile=/k8s/flannel/ssl/server.pem -etcd-keyfile=/k8s/flannel/ssl/server-key.pem"
创建 flanneld 的 systemd unit 文件
vi /usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target
Before=docker.service
[Service]
Type=notify
EnvironmentFile=/k8s/flannel/config/flanneld
ExecStart=/k8s/flannel/bin/flanneld --ip-masq $FLANNEL_OPTIONS
ExecStartPost=/k8s/flannel/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure
[Install]
WantedBy=multi-user.target
修改Docker文件,在docker启动处指定子网段
vi /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl enable flanneld
systemctl start flanneld
systemctl restart docker
查看启动状态
systemctl status flanneld
journalctl -xe -u flanneld
ip add
cd /k8s/
scp -r flannel 192.168.1.251:/k8s/
scp -r flannel 192.168.1.252:/k8s/
scp /usr/lib/systemd/system/docker.service 192.168.1.251:/usr/lib/systemd/system/docker.service
scp /usr/lib/systemd/system/docker.service 192.168.1.252:/usr/lib/systemd/system/docker.service
scp /usr/lib/systemd/system/flanneld.service 192.168.1.251:/usr/lib/systemd/system/flanneld.service
scp /usr/lib/systemd/system/flanneld.service 192.168.1.252:/usr/lib/systemd/system/flanneld.service