覆盖网络 Flannel 0.7
生活随笔
收集整理的这篇文章主要介绍了
覆盖网络 Flannel 0.7
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
资源
- https://github.com/coreos/fla... 官方资源
- https://github.com/coreos/fla... 下载地址
特性
概念
- Flannel会修改Docker的启动参数,限制指定每台节点使用的子网不重复
- 数据请求会从 docker0虚拟网卡转发到flannel0虚拟网卡 再将数据封包之后通过路由或者隧道发送到对应节点解包,再从flannel0虚拟网发送到docker0虚拟网卡
- 可以使用etcd的最新版本3.x,但flannel使用的还是2.x的数据保存格式,和v2的api
- 使用中间网络会有网络延迟,大概比使用路由器性能下降了2倍路由器平均内网请求0.2ms左右 使用中间网络内网平均0.4ms
- 使用vxlan backend时,数据是由Kernel转发的,Flannel不转发数据,仅仅动态设置ARP entry
- Flannel中有多种backend,其中vxlan backend通过内核转发数据,而udp backend通过用户态进程中的proxy转发数据
- 0.7.0中刚刚加入,即VTEP的IP加上了/32位的掩码避免了广播,此前的版本都是/16掩码,解决了VXLAN网络中由于广播导致的“网络风暴”的问题。
- Flannel在使用vxlan backend的时候,短暂启停flanneld不会造成网络中断,而udp backend会
- 可以重启flanneld来更新网络配置;然后flannel每24h会自动重新分配集群内的网络flanneld挂掉会导致本地的ARP entry无法自动更新,但是已经生成的网络环境还是可用的
安装
mkdir /opt/flanneld-v0.8.0 wget https://github.com/coreos/flannel/releases/download/v0.8.0/flannel-v0.8.0-linux-amd64.tar.gz tar -xzvf flannel-v0.8.0-linux-amd64.tar.gz -C /opt/flanneld-v0.8.0 ln -sf /opt/flanneld-v0.8.0/flanneld /usr/bin/flanneld rm -f flannel-v0.8.0-linux-amd64.tar.gz mkdir -p /var/log/k8s/flanneld#配置配置文件 vim /etc/sysconfig/flanneldFLANNEL_ETCD="http://10.31.75.198:2379,http://10.29.164.118:2379" FLANNEL_ETCD_KEY="/dudu_flannel/network" FLANNEL_OPTIONS="-ip-masq=true -v=0" FLANNEL_IFACE="eth0" 网卡 eth0 或IP -ip-masq=true 这个参数的目的是让flannel进行ip伪装,而不让docker进行ip伪装。这么做的原因是如果docker进行ip伪装,流量再从flannel出去,其他host上看到的source ip就是flannel的网关ip,而不是docker容器的ip#配置系统启动 vim /usr/lib/systemd/system/flanneld.service [Unit] Description=Flanneld server After=network.target After=network-online.target Wants=network-online.target Before=docker.service[Service] Type=notify EnvironmentFile=/etc/sysconfig/flanneld ExecStart=/usr/bin/flanneld -etcd-endpoints=${FLANNEL_ETCD} -iface=${FLANNEL_IFACE} -etcd-prefix=${FLANNEL_ETCD_KEY} $FLANNEL_OPTIONS Restart=on-failure[Install] WantedBy=multi-user.target#向etcd 写入网段配置 export ETCDCTL_API=3 etcdctl put /dudu_flannel/network/config '{"Network": "172.17.0.1/16","SubnetMin": "172.17.0.0", "SubnetMax": "172.17.254.0","Backend":{"Type":"vxlan"}}' --endpoints=10.30.187.25:2379 查看 etcdctl --endpoints=10.30.187.25:2379 get /dudu_flannel/network/config 删除 etcdctl --endpoints=10.30.187.25:2379 del --prefix=true "/dudu_flannel"或rest接口 curl -X PUT http://10.30.187.25:2379/v2/keys/dudu_flannel/network/config -d value='{"Network": "172.17.0.1/16","SubnetLen":24,"Backend":{"Type":"vxlan"}}' curl http://localhost:2379/v2/keys/dudu_flannel/network/config#删除配置 curl http://localhost:2379/v2/keys/dudu_flannel/network/config -XDELETE curl http://localhost:2379/v2/keys/dudu_flannel?recursive=true -XDELETE#关闭防火墙 flanneld systemctl stop firewalld systemctl disable firewalld#清理防火墙到默认规则 #没有任何参数的 -F 命令在当前表中刷新所有链。同样的, -X 命令删除表中所有非默认链。iptables -Fiptables -Xiptables -t nat -Fiptables -t nat -Xiptables -t mangle -Fiptables -t mangle -Xiptables -t raw -Fiptables -t raw -Xiptables -t security -Fiptables -t security -Xiptables -P INPUT ACCEPTiptables -P FORWARD ACCEPTiptables -P OUTPUT ACCEPT保存规则iptables-save#查看规则iptables -t filter --listiptables -t mangle --listiptables -t nat --listiptables -t raw --list#清理网卡 ip link delete docker0 ip link delete flannel.1#停止docker 启动flannel systemctl daemon-reload systemctl stop docker systemctl stop flanneldsystemctl enable flanneld systemctl start flanneld systemctl status -l flanneldsystemctl restart flanneld#命令行启动 /usr/local/bin/flanneld -etcd-endpoints=http://10.29.167.233:2379 -etcd-prefix=/dudu_flannel/network -iface=eth0 -log_dir=/var/log/k8s/flanneld#启动flannel之后从etcd中获取network的配置信息划分本机subnet子网络, #并在etcd中进行注册本机的IP已经对应的子网。 #Flannel守护程序将子网配置信息记录到/run/flannel/subnet.env文件中 #Flannel守护进程还创建/run/flannel/docker文件记录docker的守护进程启动需要的环境变量信息 #按照生成的docker环境变量配置docker的启动参数启动docker #如果没有/run/flannel/docker 文件手动生成 /opt/flanneld-v0.8.0/mk-docker-opts.sh -i cat /run/docker_opts.env#例子: cat /run/flannel/subnet.env FLANNEL_NETWORK=172.17.0.0/16 FLANNEL_SUBNET=172.17.31.1/24 FLANNEL_MTU=1450 FLANNEL_IPMASQ=falsecat /run/flannel/docker DOCKER_OPT_BIP="--bip=172.17.31.1/24" DOCKER_OPT_IPMASQ="--ip-masq=true" DOCKER_OPT_MTU="--mtu=1450" DOCKER_NETWORK_OPTIONS=" --bip=172.17.31.1/24 --ip-masq=true --mtu=1450 "#修改 docker的启动参数 按照/run/flannel/docker 文件中的配置 ip-masq表示IP伪装 vim /etc/docker/daemon.json {"registry-mirrors": ["https://mb4qkfnx.mirror.aliyuncs.com"],"insecure-registries":["dudureg.xip.io:5000"],"bip":"172.17.0.1/24","ip-masq": false,"mtu": 1450,"iptables":false}#重启docker systemctl restart docker #查看路由,查看网卡 route -n ifconfig #查看成员 curl http://localhost:2379/v2/keys/dudu_flannel/network/subnets #PublicIP配置的地址是外网地址,不是内网地址#测试 docker run -d -it --name ip_test alpine:3.5 ash docker inspect ip_test docker exec -ti ip_test ash #进入容器中互pingdocker run -it --rm busybox shdocker logs -f -t --tail=100 ip_test #查看系统日志 journalctl -fu docker.service journalctl --no-pager -l -u flanneld#监控包 tcpdump -i flannel.1 tcpdump host 10.29.168.24 and 10.29.167.186 -w /var/log/001.cap tcpdump -i flannel.1 -w /var/log/001.cap #防火墙Nat转发规则 iptables -t filter -L -v#查看封包地址 bridge fdb show dev flannel.1 删除 bridge fdb del xx:xx:xx:cc:dd:a7 dev flannel.1 添加 bridge fdb add xx:xx:xx:cc:dd:a7 dev flannel.1 dst 192.168.110.18 self permanent常用操作命令
配置
- 配置使用Vxlan 重启需要在几秒钟内完成此操作,因为ARP条目可能会开始超时,需要法兰绒守护程序刷新它们
- 为了避免重新启动过程中的中断,不能更改配置(例如,VNI,-iface值)
- vxlan将具有较低的延迟开销和原生网络一样的带宽,性能基本和原生一样
-
cat /boot/config-uname -r | grep CONFIG_VXLAN 检查主机内核是否支持VXLAN 返回 CONFIG_VXLAN=m支持
cat flannel-config.json{"Network": "172.17.0.0/16","SubnetLen": 24,"Backend": {"Type": "vxlan","VNI": 1} } 在backend中还可以配置 Port 默认为内核默认端口8472 是发送UDP封包的端口号 #保存到etcd etcdctl set /dudu_flannel/network/config < flannel-config.json -
使用udp 作为后端 flanneld可以重新启动 甚至进行升级而不会影响现有的流量
cat flannel-config.json {"Network": "172.17.0.0/16","SubnetLen": 24,"SubnetMin": "172.17.0.0","SubnetMax": "172.17.254.0","Backend": {"Type": "udp","Port": 7890} } - 使用 host-gw 作为后端
- --iface 启动参数默认使用的系统的默认路由网卡 route -n 排在第一个的就是默认路由,在阿里云默认路由就是etch1 为外网路由
- 内网路由是eth0 需要手动配置--iface="eth0" 才能让flannel使用内网路由内网IP通信
功能
功能1
功能2
调试
优化
常见问题
实际应用
总结
以上是生活随笔为你收集整理的覆盖网络 Flannel 0.7的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 201771010126 王燕《面向对象
- 下一篇: 解决代码中重复的捕获 promise 错