1、概述
flannel 能够让不通的容器上的docker容器都拥有唯一的IP地址,不像之前的docker0分配虚拟地址,这样不同的容器可能会出现同样的ip地址。
----underlay 物理网络
----overlay 虚拟网络
flannel 是一种overlay 网络,表示运行在一个网上的网(应用层网络)并不依靠ip地址传递信息,而是采用映射机制,把IP地址和identifiers做映射来资源定位,即把tcp数据包装在另一种网络包里进行理由转发和通信。
flannel使用etcd存储配置数据和子网分配信息
flannel启动之后,后台进程首先检索配置和正在使用的子网列表,选择一个可用的子网,去注册它,etcd也存储每个主机对应的IP
flannel使用etcd的watch机制监视/coreos.com/network/subnets下面所有元素的变化信息,并且根据它来维护一个路由表,为提高性能,flannel优化了universal TAP/TUN设备。
属于二层网络,基于网关的三层网络宣告
2、打开中继路由
3、防火墙
4、机器25部署etcd
客户端网络要注入到flannel地址里面去,把路由放到etcd里面去,上面是监听,下面是访问地址
service etcd start
systemctl status etcd.service /开启服务
chkconfig etcd on
ps -ef | grep etcd
【单机版的etcd安装完成】
测试端口是否正常
etcdctl -C http://192.168.80.25:4001 cluster-health
etcdctl -C http://192.168.80.25:2379 cluster-health
查看etcd 成员 etcdctl member list
5、所有机器部署flannel
6、定义网络
查看生成的网络cat /run/flannel/subnet.env
查看网络ifconfig,会多生成一个flannel网卡
修改docker的启动文件
vim /usr/lib/systemd/system/docker.service
--------------------------------------------
ExecStart=/usr/bin/dockerd --bip=172.27.68.1/24 --mtu=1472
------------------------------------------------
要与cat /run/flannel/docker查看到的IP一致
之后重新启动docker
systemctl daemon-reload
service docker restart
chkconfig docker on
7、机器26、27重启flanneld
8、给机器26添加Docker配置
cat /run/flannel/subnet.env
vim /usr/lib/systemd/system/docker.service
修改docker的启动文件
要与cat /run/flannel/docker查看到的IP一致
------------------------------------------------
ExecStart=/usr/bin/dockerd --bip=172.27.71.1/24 --mtu=1472
--------------------------------------------
# 完成之后docker进行重启
systemctl daemon-reload
systemctl restart docker
--------------------------------------
查看网卡ifconfig
9、给机器27添加Docker配置
cat /run/flannel/subnet.env
vim /usr/lib/systemd/system/docker.service
修改docker的启动文件
要与cat /run/flannel/docker查看到的IP一致
------------------------------------------------
ExecStart=/usr/bin/dockerd --bip=172.27.13.1/24 --mtu=1472
--------------------------------------------
# 完成之后docker进行重启
systemctl daemon-reload
systemctl restart docker
-----------------------------------------
查看网卡ifconfig
10、测试是否通信成功
分别对3台启动一个容器进行测试
docker run -itd --name by1 busybox //25
docker run -itd --name by2 busybox //26
docker run -itd --name by3 busybox //27
docker exec -it by1 ifconfig
docker exec -it by2 ifconfig
docker exec -it by3 ifconfig
----测试by1----ping by2--------->>>
----测试by1----ping by3--------->>>>
测试网络通信正常,实验成功!
【扩展】 如果后期有一台新的机器,要加入集群如何操作?
11、补充
物理网---------underlay network
虚拟网络------flannel overlay network
思考: k8s - 三个网络 :1、物理网络 2、svc网络 3、pod网络
这三个网络我全弄成物理网络那个IP可以嘛? 就不用走那么多规则,是不是更加高效呢?
两个集群之间的Pod不就直接可以相互通信了嘛?
答案是:可以的
那安全怎么解决?
-> 安全加固,低运行时 runc! kata + gvisor + 扫描器
-->资源限制, 限制cpu 限制内存
---------------------------------------------------------------
可以一个集群有状态服务 , 一个集群无状态服务