Kubernetes二进制部署——Flannel网络

  • 一、Flannel简介
  • 二、Flannel原理
  • 三、Flannel的作用
  • 四、Flannel 网络配置
    • 1.node 节点安装 docker
    • 2.master配置
      • 1、 写入分配的子网段到ETCD中,供flannel使用(master主机)
    • 3、node节点操作
      • 1、上传flannel软件包到所有的 node 节点并解压
      • 2、建立 K8S 工作目录并撰写 flannel.sh 服务启动脚本
      • 3、指定集群启动脚本并检查IP地址
      • 4、配置 docker 以能连接上 flannel
      • 5、在两个 node 节点中创建容器互相 ping 以验证网络互通

一、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 0yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y docker-ce docker-ce-cli containerd.iosystemctl enable docker
systemctl start docker'不要忘记配置镜像加速和优化网络'vim /etc/sysctl.conf
net.ipv4.ip_forward= 1service network restart
systemctl restart docker

2.master配置

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

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

cd k8s/etcd-cert//opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.172.10:2379,https://192.168.172.20:2379,https://192.168.172.30:2379" set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.172.10:2379,https://192.168.172.20:2379,https://192.168.172.30:2379" get /coreos.com/network/config
get表示为查看,以下为反馈结果命令简介:
#使用etcdctl命令,借助ca证书,目标端点为三个ETCD节点IP,端口为2379
# set /coreos.com/network/config 设置网段信息
#"Network": "172.17.0.0/16" 此网段必须是集合网段(B类地址),而Pod分配的资源必须在此网段中的子网段(C类地址)
#"Backend": {"Type": "vxlan"}} 外部通讯的类型是VXLAN

3、node节点操作

1、上传flannel软件包到所有的 node 节点并解压

拖入软件包并解压

--node1、2--
上传flannel-v0.10.0-linux-amd64.tar软件包至/opt目录下'tar xf flannel-v0.10.0-linux-amd64.tar.gz
flanneld                服务启动脚本'
mk-docker-opts.sh       配合docker配置脚本'
README.md               说明文档'

2、建立 K8S 工作目录并撰写 flannel.sh 服务启动脚本

--node1、2--
'//建立K8S工作目录,与前文ETCD同理,两个node节点同步操作'
mkdir /opt/kubernetes/{cfg,bin,ssl} -p
mv /opt/mk-docker-opts.sh /opt/flanneld /opt/kubernetes/bin/'//撰写一个服务启动脚本'
vim /root/flannel.sh#!/bin/bashETCD_ENDPOINTS=${1:-"http://127.0.0.1:2379"}      '//定义访问地址(etcd)'cat <<EOF >/opt/kubernetes/cfg/flanneld        '//配置文件'FLANNEL_OPTIONS="--etcd-endpoints=${ETCD_ENDPOINTS} \      '//指向etcd的集群地址'
-etcd-cafile=/opt/etcd/ssl/ca.pem \        '//etcd用到的证书(变量)'
-etcd-certfile=/opt/etcd/ssl/server.pem \
-etcd-keyfile=/opt/etcd/ssl/server-key.pem"EOFcat <<EOF >/usr/lib/systemd/system/flanneld.service        '//启动脚本'
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target     '//借助于flanneld启动之前network网络功能必须具备'
Before=docker.service      '//还依赖于docker'[Service]
Type=notify        '//触发调用'
EnvironmentFile=/opt/kubernetes/cfg/flanneld       '//定义变量,指向配置文件'
ExecStart=/opt/kubernetes/bin/flanneld --ip-masq \$FLANNEL_OPTIONS     '//启动文件指定启动脚本,并指定集群变量IP'
ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure[Install]
WantedBy=multi-user.target     '//多用户登录模式'EOFsystemctl daemon-reload
systemctl enable flanneld
systemctl restart flanneld


3、指定集群启动脚本并检查IP地址

--node1、2--
在/opt/目录下启动
. flannel.sh https://192.168.172.10:2379,https://192.168.172.20:2379,https://192.168.172.30:2379systemctl status flanneld.service
'//服务启动成功'cat /run/flannel/subnet.env     '//执行完flanneld启动脚本后会生成此文件:网段环境变量'



4、配置 docker 以能连接上 flannel

vim /usr/lib/systemd/system/docker.service[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
EnvironmentFile=/run/flannel/subnet.env
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=alwayssystemctl daemon-reload
systemctl restart docker systemctl restart network
'//更改完后两台node节点需重载配置文件、重启docker和网络服务,否则仍有可能docker和flannel连接不成功'ip -a       '//现在可以看到dokcer与flannel同一网段了'



5、在两个 node 节点中创建容器互相 ping 以验证网络互通

--node1、2--docker run -it centos:7 /bin/bash
'//运行一个centos容器,下一步互ping对方docker0网卡,以证明flannel起到路由作用'
yum install net-tools -y        '//使用ifconfg需先安装网络工具'
ifconfig docker run -it centos:7 /bin/bash
yum install net-tools -y
ifconfig


Kubernetes二进制部署——Flannel网络相关推荐

  1. 01 kubernetes二进制部署

    kubernetes二进制部署文档-集群部分 文章目录 kubernetes二进制部署文档-集群部分 一.系统规划 1.1 系统组件分布 1.2 部署拓扑 1.3 系统环境 二.初始化系统环境 2.1 ...

  2. 【重要】kubernetes二进制部署单master节点

    目录 1.安装要求 2.安装规划 3.1.分步骤操作 3.2.一键执行脚本 4.1.安装cfssl证书生成工具 4.2.创建认证中心(根CA中心) 4.3.使用自签CA签发Etcd证书 4.4.部署E ...

  3. kubernetes二进制部署单master节点

    目录 1.安装要求 2.安装规划 3.1.分步骤操作 3.2.一键执行脚本 4.1.安装cfssl证书生成工具 4.2.创建认证中心(根CA中心) 4.3.使用自签CA签发Etcd证书 4.4.部署E ...

  4. 16进制转base64_《蹲坑学K8S》之19-5:二进制部署Calico网络

    二进制部署kubernetes完毕后,查看群集状态为NotReady,现在开始二进制部署calico网络 在kubelet添加cni配置 [root@k8s-master ~]# vim /usr/l ...

  5. Kubernetes二进制部署——证书的制作和ETCD的部署

    Kubernetes二进制部署--证书的制作和ETCD的部署 一.实验环境 自签 SSL 证书 二.ETCD集群部署 1.环境部署 2.master节点 3.node1节点 4.node2节点 5.m ...

  6. 二进制安装K8S(四):部署flannel网络

    一.master编写flannel脚本: vim /root/scripts/flannel.sh #!/bin/bash cd /opt/kubernetes/ssl/ #写入分配的子网网段 /op ...

  7. 9-1 Kubernetes二进制部署的Prometheus实现服务发现

    文章目录 前言 创建用户 复制Token 配置文件 全局配置 Master节点发现 Node节点发现 Namespace Pod发现 自定义Pod发现 前言 在上一章节介绍了 8-5 在Prometh ...

  8. Kubernetes集群二进制部署flannel

    一.版本信息 名称 版本 kubernetes 1.22.5 etcd 3.5.2 docker 19.03.8 flannel 0.14.0 cni 0.8.6 CNI:容器网络接口(Contain ...

  9. Kubernetes 二进制部署 多节点(基于单节点部署,超详细)3

    目录 一.环境准备 二.master02 节点部署 三.负载均衡部署 1.在lb01.lb02节点上操作 2.在 master01 节点上操作 四.部署 Dashboard UI 1.Dashboar ...

最新文章

  1. 总结接口与类和抽象类的关系
  2. 抢先体验微软最新客户端系统Windows 8.1!
  3. 转:Oracle SQL 内置函数大全 (一)
  4. WebSocket教程
  5. CAP 原则与 BASE 理论
  6. Redis面试 - 如何保证缓存与数据库的双写一致性?
  7. c语言程序设计 a b,用C语言编程时,a+=b 和 a=a+b 真的完全等价吗?
  8. 很详细的硬盘基础知识
  9. 个推mastersecret_推送:个推
  10. java创新_Java没有创新了吗?Java 13提供可提高生产率和效率的功能
  11. dhcp服务环境搭建
  12. 部署Lync监控报告
  13. 根据录入的计算公式计算_建筑行业公式大全(一)之“钢筋工程量计算”
  14. 第三季-第19课-消息队列编程
  15. ubuntu16.04 pytorch 安装
  16. 基于深度学习生成音乐
  17. 玩转代码|简单分析如何获取小程序的t值
  18. 原生JS实现登录框邮箱提示
  19. 简单大学生静态HTML网页作品 HTML5+CSS大作业——圣诞节节日(7页) 带轮播特效
  20. Flash绘画与动画宝典

热门文章

  1. WebRTC 速成课程
  2. 走近互联网先驱者——Henning Schulzrinne
  3. 张霖峰:AV1和VVC的格局将在2023年后明朗
  4. 何亚明:Facebook的工具文化和多媒体QoE
  5. 技术她力量,鹅厂女博士的寻“豹”之旅
  6. 化繁为简 - 腾讯计费高一致TDXA的实践之路
  7. 一篇文章搞懂腾讯云AI平台的人工智能IDE:TI-ONE
  8. OpenShift安装
  9. Bootstrap+jquery实现页面跳转【小demo】
  10. SparkShell中提交任务java.net.ConnectException: Call From henu4/192.168.248.244 to henu2:9000 failed on co