Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。
在Kubernetes的网络模型中,假设了每个物理节点应该具备一段“属于同一个内网IP段内”的“专用的子网IP”
Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且”不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。
flannel 支持多种 backend,有vxlan和host-gw。
etcdctl set /flannel/network/config ‘ ’
不写backend是默认是vxlan
{
"Network": "10.2.0.0/16",
"SubnetLen": 24
}
这样写是host-gw
{
"Network": "10.2.0.0/16",
"SubnetLen": 24,
"Backend": {
"Type": "host-gw"
}
}
host-gw 把每个主机都配置成网关,主机知道其他主机的 subnet 和转发地址。
vxlan 则在主机间建立隧道,不同主机的容器都在一个大的网段内。
由于 vxlan 需要对数据进行额外打包和拆包,性能会稍逊于 host-gw。
docker启动时使用注意其中的“–bip=$FLANNEL_SUBNET”这个参数,它限制了所在节点容器获得的IP范围。
这个IP范围是由Flannel自动分配的,由Flannel通过保存在Etcd服务中的记录确保它们不会重复。
flannel
1、启动etcd
2、启动flanneld
3、使用flannel参数(/run/flannel/subnet.env)启动dockerd