Kubernetes二进制部署——Flannel网络

本文介绍Flannel在Kubernetes中的角色与配置流程。Flannel为容器提供唯一IP,通过覆盖网络实现容器间的通信。文章详细讲解Flannel的工作原理、安装步骤及网络配置。

一、Flannel简介

  • Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。
  • 在默认的Docker配置中,每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相互ping通。
  • Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。
  • Flannel实质上是一种“覆盖网络(overlaynetwork)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持udp、vxlan、host-gw、aws-vpc、gce和alloc路由等数据转发方式,默认的节点间数据通信方式是UDP转发。

二、Flannel原理

  • 首先,Flannel通过Kubernetes API把整个集群的网络配置存储在Etcd中,其中最主要的内容为设置集群的网络地址空间。例如,指定整个集群内所有容器的IP都取自“10.1.0.0/16”网段。
  • 接着,Flannel在每个主机中运行flanneld作为agent,它会为所在主机从集群的网络地址空间中,获取一个小的网段subnet(子网),本主机内所有容器的IP地址都将从中分配。
  • 然后,Flanneld再将本主机获取的subnet以及用于主机间通信的Public IP,同样通过Kubernetes API存储在Etcd中。
  • 最后,Flannel利用各种数据转发方式,例如udp、vxlan、AWS、VPC和GCE路由等等,跨主机转发容器间的网络流量,完成容器间的跨主机通信。

在这里插入图片描述

  • 首先,定义两个节点主机A POD-A 主机B POD-B
  • POD-A首先会发送给docker 0网桥
    docker 0会转发给flannel0网桥
  • flannel0会转发给flanneld(后台进程),flanned会到ETCD中查看ETCD维护的路由表条目/信息,确认往哪去发送
  • flanned 会在转发给宿主机的物理网卡
  • 物理网卡会以UDP的方式转发数据包(数据包中除了主机A和主机B的源TP和目标IP之外,还会封装POD-A和POD-B的源/目标Ip)
  • 主机B接收到
  • 首先解封装,发现源IP地址是找自己的(主机IP地址)
  • UDP 转发过来,解封装之后,发现了封装在UDP内部的POD IP(源/目标)
  • 主机B的物理网卡就会发送给flanned进行处理
  • 而flanned会查询ETCD中维护的路由表信息,发现是自己的pod (也能查询到找的docker-ip网段是什么网段)
  • flanned会发送给自己的flannel0网桥,flannel网桥再发送给对应的docker (0)网桥
  • docker 网桥(网关),会把这个数据包发送给对应的POD-B

三、Flannel的作用

  • 使集群中的不同Node主机创建的Docker容器都具有全集群唯一的虚拟IP地址。
  • 建立一个覆盖网络(overlay network),通过这个覆盖网络,将数据包原封不动的传递到目标容器。覆盖网络是建立在另一个网络之上并由其基础设施支持的虚拟网络。覆盖网络通过将一个分组封装在另一个分组内来将网络服务与底层基础设施分离。在将封装的数据包转发到端点后,将其解封装。
  • 创建一个新的虚拟网卡flannel0接收docker网桥的数据,通过维护路由表,对接收到的数据进行封包和转发(vxlan)。
  • etcd保证了所有node上flanned所看到的配置是一致的。同时每个node上的flanned监听etcd上的数据变化,实时感知集群中node的变化
  • Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来
  • VXLAN:将源数据包封装到UDP中,并使用基础网络的IP/MAC作外层报文头进行封装,然后再以太网上传输,到达目的地后由隧道端点解封并将数据转发到目标地址

四、Flannel 网络配置

1.node 节点安装 docker

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce docker-ce-cli containerd.io

systemctl enable docker
systemctl start docker


'不要忘记配置镜像加速和优化网络'

vim /etc/sysctl.conf
net.ipv4.ip_forward= 1

service network restart
systemctl restart docker

2.master配置

1、 写入分配的子网段到ETCD中,供flannel使用(master主机)

需要在有证书的目录下使用此命令
写入分配的子网段到ETCD中,供flannel使用

cd k8s/etcd-cert/

/opt/etcd/bin
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值