kubernetes——flannel
一、Flannel容器集群网络部署
Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来
VXLAN:将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后在以太网上传输,到达目的地后由隧道端点解封装并将数据发给目标地址
Flannel:是Overlay网络的一种,也将源数据包缝在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VXLAN、AWS、VPC和GCE路由等数据转发方式
图片详解:
例如有pod1-pod4
pod1将自己的数据和自己的源IP(10.1.15.2)和目标IP(10.1.20.3)打包成数据段,经过docker0的网桥,flannel再进行封包,组成数据包,让在加上源物理IP(192.168.0.100)和目标物理IP(192.168.0.200)组成数据帧,然后经过网络发送给另一台服务器,服务器收到和核对物理IP,然后进行拆封,到docker0网桥,在进行拆封,看虚拟IP再分配给相对应的pod4
一个完成的MTU(数据传输的单元):是1500个字节,包头会占掉20个字节,然后封包会消耗掉30个字节,最终真正能传输的字节为1450个字节
二、部署Flannel
1、部署docker
#在每个node节点上都要部署docker
#安装docker存储仓库
yum-config-manager \
–add-repo
https://download.docker.com/linux/centos/docker-ce.repo#安装docker
yum install docker-ce docker-ce-cli containerd.io
#启动服务
systemctl start docker
二、Flannel网络配置
1、master配置
#写入分配的子网段到etcd中,供flannel使用
[root@master1 etcd-cert]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints=“https://192.168.200.11:2379,https://192.168.200.12:2379,https://192.168.200.13:2379” set /coreos.com/network/config ‘{ “Network”: “172.17.0.0/16”, “Backend”: {“Type”:“vxlan”}}’
[root@master1 etcd-cert]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints=“https://192.168.200.11:2379,https://192.168.200.12:2379,https://192.168.200.13:2379” get /coreos.com/network/config ‘{ “Network”: “172.17.0.0/16”, “Backend”: {“Type”:“vxlan”}}’
{ “Network”: “172.17.0.0/16”, “Backend”: {“Type”:“vxlan”}} #查看写入的信息
2、node1、2配置
#node1和node2配置一样
#将Flannel软件包移到node1中并解压
[root@node1 ~]# tar zxvf flannel-v0.10.0-linux-amd64.tar.gz
#解压后会产生flanneld、mk-docker-opts.sh、README.md三个文件
#创建k8s工作目录
[root@node1 ~]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p
#将flanneld、mk-docker-opts.sh移到工作目录/bin下
[root@node1 ~]# mv mk-docker-opts.sh flanneld /opt/kubernetes/bin/
#将启动脚本放到node1中并启动
[root@node1 ~]# bash flannel.sh https://192.168.200.11:2379,https://192.168.200.12:2379,https://192.168.200.13:2379
3、Docker识别Flannel
[root@node1 ~]# cat /run/flannel/subnet.env #查看flannel信息
DOCKER_OPT_BIP="–bip=172.17.69.1/24"
DOCKER_OPT_IPMASQ="–ip-masq=false"
DOCKER_OPT_MTU="–mtu=1450"
DOCKER_NETWORK_OPTIONS=" --bip=172.17.69.1/24 --ip-masq=false --mtu=1450"#修改docker.service文件
[root@node1 ~]# vim /usr/lib/systemd/system/docker.service
EnvironmentFile=/run/flannel/subnet.env #关联flannel的subnet.env文件
ExecStart=/usr/bin/dockerd KaTeX parse error: Expected 'EOF', got '#' at position 80: …tainerd.sock #̲添加DOCKER_NETWORK_OPTIONS,使docker的地址能够变成172.17.69.1#重启docker服务
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl restart docker.service
4、下载容器
[root@node1 ~]# docker run -it centos:7 /bin/bash
[root@0019a28bf14f /]# yum install -y net-tools #下载为了适应ifconfig,检查IP
5、测试
#在容器内进行测试
[root@0019a28bf14f /]# ping 172.17.1.2 #用node1的容器IP去ping容器2的IP