Docker-Flannel网络讲解

news2024/10/7 10:15:01

目录

什么是Flannel

Flannel原理

部署

环境准备

安装etcd

安装fannel

在server2上装flannel

测试


什么是Flannel

       flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方面来介绍这个工具的使用方法。 Flannel通过给每台宿主机分配一个子网的方式为容器提供虚拟网络,它基于Linux TUN/TAP,使用UDP封装IP包来创建overlay网络,并借助etcd维护网络的分配情况。 Flannel is a simple and easy way to configure a layer 3 network fabric designed for Kubernetes.

Flannel原理

        Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。但在默认的Docker配置中,每个Node的Docker服务会分别负责所在节点容器的IP分配。Node内部得容器之间可以相互访问,但是跨主机(Node)网络相互间是不能通信。Flannel设计目的就是为集群中所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得"同属一个内网"且"不重复的"IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。 Flannel 使用etcd存储配置数据和子网分配信息。flannel 启动之后,后台进程首先检索配置和正在使用的子网列表,然后选择一个可用的子网,然后尝试去注册它。etcd也存储这个每个主机对应的ip。flannel 使用etcd的watch机制监视/coreos.com/network/subnets下面所有元素的变化信息,并且根据它来维护一个路由表。为了提高性能,flannel优化了Universal TAP/TUN设备,对TUN和UDP之间的ip分片做了代理。 在Flannel的GitHub页面有如下的一张原理图:

 

对上图的简单说明 (Flannel的工作原理可以解释如下):

  1. 数据从源容器中发出后,经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡,这是个P2P的虚拟网卡,flanneld服务监听在网卡的另外一端。
  2. Flannel通过Etcd服务维护了一张节点间的路由表,该张表里保存了各个节点主机的子网网段信息。
  3. 源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达以后被解包,然后直接进入目的节点的flannel0虚拟网卡,然后被转发到目的主机的docker0虚拟网卡,最后就像本机容器通信一样的由docker0路由到达目标容器。

部署

环境准备

节点名称IP地址安装软件
docker-server1192.168.100.5etcd、flannel、docker
docker-server2192.168.100.6flannel、docker
#首先需要在两台机子开启 地址转发
[root@docker-server1 ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf^C
[root@docker-server1 ~]# sysctl -p
net.ipv4.ip_forward = 1

安装etcd

[root@docker-server1 ~]# yum -y install etcd
[root@docker-server1 ~]# vim /etc/etcd/etcd.conf 
#[Member]

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_CLIENT_URLS="http://192.168.100.5:2379,http://127.0.0.1:2379"

ETCD_NAME="default"

#[Clustering]

ETCD_ADVERTISE_CLIENT_URLS="http://192.168.100.5:2379"


[root@docker-server1 ~]# systemctl start etcd.service 
[root@docker-server1 ~]# etcdctl mk /atomic.io/network/config '{"Network":"172.20.0.0/16","SubnetMin":"172.20.1.0","SubnetMax":"172.20.254.0"}'
{"Network":"172.20.0.0/16","SubnetMin":"172.20.1.0","SubnetMax":"172.20.254.0"}
[root@docker-server1 ~]# etcdctl get /atomic.io/network/config
{"Network":"172.20.0.0/16","SubnetMin":"172.20.1.0","SubnetMax":"172.20.254.0"}

安装fannel

[root@docker-server1 ~]# yum install -y docker
[root@docker-server1 ~]# yum install -y flannel
[root@docker-server1 ~]# vim /etc/sysconfig/flanneld 
FLANNEL_ETCD_ENDPOINTS="http://192.168.100.5:2379"

# etcd config key.  This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/atomic.io/network"

[root@docker-server1 ~]# systemctl restart flanneld

#我们查看网桥,看到了flannel0,而且ip的地址端是我们自己指定的172.20.0.0/16网段中的地址段172.20.75.0/24
[root@docker-server1 ~]# ip a
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:98:e9:7d:c6 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

#而且还生成了配置文件/run/flannel/subnet.env和/run/flannel/docker存储了这个服务器端信息。
启动flanneld后,会有一张网卡产生:而且此网卡的地址就是使用etcdctl mk定义的网段地址。
[root@docker-server1 ~]# cat /run/flannel/subnet.env
FLANNEL_NETWORK=172.20.0.0/16
FLANNEL_SUBNET=172.20.66.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false

[root@docker-server1 ~]# cat /run/flannel/docker
DOCKER_OPT_BIP="--bip=172.20.66.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1472"
DOCKER_NETWORK_OPTIONS=" --bip=172.20.66.1/24 --ip-masq=true --mtu=1472"

修改Docker启动文件

[root@docker-server1 ~]# vim /usr/lib/systemd/system/docker.service
#修改[service]
[Service]
Type=notify

#添加这一行
EnvironmentFile=-/run/flannel/docker

#在-H前添加$DOCKER_NETWORK_OPTIONS
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always



[root@docker-server1 ~]# systemctl daemon-reload
[root@docker-server1 ~]# systemctl restart docker
[root@docker-server1 ~]# systemctl enable flanneld.service 
[root@docker-server1 ~]# systemctl enable docker.service 
[root@docker-server1 ~]# systemctl enable etcd.service 


#查看docker的ip
[root@docker-server1 ~]# ip a
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:98:e9:7d:c6 brd ff:ff:ff:ff:ff:ff
    inet 172.20.66.1/24 brd 172.20.66.255 scope global docker0
       valid_lft forever preferred_lft forever

在server2上装flannel

[root@docker-server2 ~]# yum -y install docker
[root@docker-server2 ~]# yum -y install flannel

[root@docker-server2 ~]# vim /etc/sysconfig/flanneld 

#这里设置的是etcd的IP地址
FLANNEL_ETCD_ENDPOINTS="http://192.168.100.5:2379"

[root@docker-server2 ~]# systemctl restart flanneld

在server2上也要修改docker启动脚本,修改方法和server1一样


[root@docker-server2 ~]# systemctl enable flanneld.service --now
[root@docker-server2 ~]# systemctl enable docker.service --now

测试

#首先在两台服务器上拉取镜像
[root@docker-server1 ~]# docker pull centos:7.9.2009
[root@docker-server2 ~]# docker pull centos:7.9.2009

#运行
[root@docker-server1 ~]# docker run -itd --name=centos1 centos:7.9.2009 
[root@docker-server2 ~]# docker run -itd --name=centos1 centos:7.9.2009 

#分别查看各自的IP地址
[root@docker-server1 ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' centos1
172.20.66.2

[root@docker-server2 ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' centos1
172.20.13.2

#进入容器,互相ping一下,看看是否ping通
[root@docker-server1 ~]# docker exec -it centos1 bash
[root@6fce48324a03 /]# ping 172.20.13.2 -c4
PING 172.20.13.2 (172.20.13.2) 56(84) bytes of data.
64 bytes from 172.20.13.2: icmp_seq=1 ttl=60 time=0.632 ms
64 bytes from 172.20.13.2: icmp_seq=2 ttl=60 time=0.697 ms
64 bytes from 172.20.13.2: icmp_seq=3 ttl=60 time=2.89 ms
64 bytes from 172.20.13.2: icmp_seq=4 ttl=60 time=2.32 ms

--- 172.20.13.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 0.632/1.637/2.897/0.995 ms
[root@6fce48324a03 /]# 



[root@docker-server2 ~]# docker exec -it centos1 bash
[root@56b694f654fa /]# ping 172.20.66.2 -c 4
PING 172.20.66.2 (172.20.66.2) 56(84) bytes of data.
64 bytes from 172.20.66.2: icmp_seq=1 ttl=60 time=11.5 ms
64 bytes from 172.20.66.2: icmp_seq=2 ttl=60 time=2.07 ms
64 bytes from 172.20.66.2: icmp_seq=3 ttl=60 time=4.52 ms
64 bytes from 172.20.66.2: icmp_seq=4 ttl=60 time=2.08 ms

--- 172.20.66.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 2.076/5.050/11.515/3.864 ms
[root@56b694f654fa /]# 



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/499435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文心一言 VS chatgpt (15)-- 算法导论3.2 4~5题

四、函数 ⌈ lg ⁡ n ⌉ ! \lceil \lg n \rceil ! ⌈lgn⌉! 多项式有界吗&#xff1f;函数 ⌈ lg ⁡ lg ⁡ n ⌉ ! \lceil \lg \lg n \rceil ! ⌈lglgn⌉! 多项式有界吗&#xff1f; 文心一言&#xff1a; chatgpt&#xff1a; 对于第一个问题&#xff0c;函数 ⌈ lg ⁡ n…

C++类和对象(6)

类和对象 1.在谈构造函数1.1. 构造函数体赋值1.2. 初始化列表1.3. explicit关键字 2. static成员2.1. 概念2.2. 特性 3.友元函数3.2.友元类 4. 内部类5.匿名对象6.拷贝对象时的一些编译器优化7.再次理解类和对象 1.在谈构造函数 1.1. 构造函数体赋值 在创建对象时&#xff0c…

【SPSS】回归分析详细操作教程(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

数据结构入门-顺序表链表

线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。线性表是一种实际中广泛使用多个数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线。…

前后端图片交互的简易方式

前后端图片交互的简易方式 一、交互方式说明二、前后端具体代码实现前端具体代码实现后端具体代码实现效果 测试结果 一、交互方式说明 在项目的实际开发中&#xff0c;难免会遇到前端需要渲染数据库中保存的图片&#xff0c;那咱知道图片也属于一种文件&#xff0c;不好保存到…

maven依赖jar包时版本冲突的解决

1、第一声明优先原则 在pom.xml配置文件中&#xff0c;如果有两个名称相同版本不同的依赖声明&#xff0c;那么先写的会生效。 所以&#xff0c;先声明自己要用的版本的jar包即可。 所以&#xff0c;添加新依赖时要放在最后边&#xff0c;以防止新依赖替换原有依赖造成版本冲…

Mybatis基础操作XML映射文件

Mybatis基本操作 一、环境准备 数据库表和springboot工程在课程资料中都有提供 注意&#xff0c;entrydate是用的jdk1.8中的LocalDate类型&#xff0c;createTime用的是jdk1.8中的LocalDateTime类型 二、删除 Mybatis中提供了一种参数占位符 #{id} empMapper.java package…

Leetcode461. 汉明距离

Every day a leetcode 题目来源&#xff1a;461. 汉明距离 解法1&#xff1a;模拟 先将x和y转为为对应二进制的字符串&#xff0c;再遍历两个字符串进行比较。 代码&#xff1a; /** lc appleetcode.cn id461 langcpp** [461] 汉明距离*/// lc codestart class Solution {…

HTML的两个实战项目

文章目录 HTML的两个实战项目1. 个人简历1. 1 快速生成模板1.2 根据简历格式进行预设计1.3 开始创作吧1.3.1 基本信息1.3.2 教育背景1.3.3 专业技能1.3.4 我的项目1.3.5 自我评价 2. 输入简历信息页面设计2.1 设计大概框架2.2 开始创作吧2.2.1 输入姓名2.2.2 上传照片2.2.3 输入…

Axure教程——用中继器制作动态柱状图

今天作者就教大家在Axure里面如何用中继器做一个可以动态的柱状图。 制作完成之应具备以下交互效果&#xff1a; 1.在中继器表格中填写具体数据和坐标轴后&#xff0c;自动生成对应的柱状图 2.鼠标移动到每项&#xff0c;显示其数据 预览地址&#xff1a;https://tj4v11.axshar…

node笔记_读文件(异步读取、流式读取)

文章目录 ⭐前言⭐ 读取文件异步读 readFile读取txt 流式读 createReadStream读取视频 ⭐ 结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本期分享node读取文件。 往期文章 node_windows环境变量配置 node_npm发布包 linux_配置node node_nvm安装配置 node笔记_http服务…

2023/05/02~07 刷题记录

A - AABCC 题义&#xff1a; 题解&#xff1a; 读完题目可以想到直接暴力&#xff0c;但是肯定超时别想了。 因为 a b c 都是素数&#xff0c;所以我们可以先求出所有的素数 进行减少循环的次数&#xff0c;然后遍历。在遍历过程中&#xff0c;我们也要去进行剪枝 &#xff0c;…

10_Uboot启动流程_2

目录 _main函数详解 board_init_f函数详解 relocate_code函数详解 relocate_vectors函数详解 board_init_r 函数详解 _main函数详解 在上一章得知会执行_main函数_main函数定义在文件arch/arm/lib/crt0.S 中,函数内容如下: 第76行,设置sp指针为CONFIG_SYS_INIT_SP_ADDR,也…

美团外卖红包优惠券:美团外卖节红包或美团外卖天天神券怎么领取使用?

什么是美团外卖节红包或美团外卖天天神券&#xff1f; 美团外卖节红包、美团外卖天天神券都可以称为美团外卖红包优惠券。使用美团外卖节红包、美团外卖天天神券&#xff0c;点餐可以享受优惠。且美团外卖节红包、美团外卖天天神券每天都可以免费领取。美团会员红包不能与美团…

nginx相关知识

目录 一. Nginx目录结构 二. Nginx配置文件结构 三. Nginx具体应用 1. 部署静态资源 2. 反向代理 3. 负载均衡 一. Nginx目录结构 重点目录/文件&#xff1a; conf/nginx.conf nginx配置文件html 存放静态文件&#xff08;html、CSS、Js等&#xff09;logs 日志目…

【Redis】数据结构底层结构

我们知道Redis的很快&#xff0c;一个原因是因为在内存上操作&#xff0c;另一个原因是本身的数据结构。而具体的五大类型就是如下&#xff1a; 键和值如何组织的 通过key找到value的过程&#xff0c;Redis使用了哈希表结构进行查找。具体就是根据key的hash值计算出对应的下…

三子棋(C语言重做版)

&#x1f929;本文作者&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;内容专栏&#xff1a;这里是《C语言》专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;希望可以…

对标ChatGPT3.5,支持手机电脑网页使用,无需魔法

说到 Claude 是什么&#xff0c;大家可能没听说过。 但是说到 OpenAI&#xff0c;说到 ChatGPT&#xff0c;相信大家一定听说过&#xff0c;玩过。 PS&#xff1a;关于 Claude 网页版的注册教程&#xff0c;我之前已经写过文章了&#xff0c;现在额外介绍如何使用手机App和电脑…

centos搭建code-server及配置HTTPS、登录页自定义

文章目录 一、Code-Server二、安装及运行三、系统配置四、HTTPS配置五、登录页面自定义 注&#xff1a;本版本基于4.11.0&#xff0c;在此之前版本&#xff0c;在centos上会出现CPU占用一直100%的情况&#xff0c;当前版本已经搭建两个月&#xff0c;综合下来比较稳定 通过搭建…

【高数+复变函数】傅里叶级数

文章目录 1. 傅里叶级数1.1 和差化积积化和差1.2 三角函数系的正交性1.3 系数公式求解1.4 展开条件1.5 变形下的傅里叶 在课程学习中&#xff0c;感觉这一部分的东西频繁会被用到&#xff0c;因此写下来做个总结。 1. 傅里叶级数 在科学技术中&#xff0c;常常会遇到各种各样的…