kubernetes——flannel

kubernetes——flannel

一、Flannel容器集群网络部署

Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来

VXLAN:将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后在以太网上传输,到达目的地后由隧道端点解封装并将数据发给目标地址

Flannel:是Overlay网络的一种,也将源数据包缝在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VXLAN、AWS、VPC和GCE路由等数据转发方式

kubernetes——flannel

图片详解:

例如有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”}} #查看写入的信息

kubernetes——flannel

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

kubernetes——flannel

上一篇:几个容器网络相关问题的分析和解决总结(续1)


下一篇:理解容器跨主机通信一