我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何搭建Flannel容器

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何搭建Flannel容器

这篇文章主要为大家展示了“如何搭建Flannel容器”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何搭建Flannel容器”这篇文章吧。

随着docker容器化兴起,云计算面对的挑战越来越大,例如:网络管理、存储等。一个数据中心很容易搞出成百上千个容器,这么多的容器我们需要如何管理呢。

如何搭建Flannel容器

Flannel实现原理

原理说明

Flannel为每个host分配一个subnet,容器从这个subnet中分配IP,这些IP可以在host间路由,容器间无需使用nat和端口映射即可实现跨主机通信

每个subnet都是从一个更大的IP池中划分的,flannel会在每个主机上运行一个叫flanneld的agent,其职责就是从池子中分配subnet

Flannel使用etcd存放网络配置、已分配 的subnet、host的IP等信息

Flannel数据包在主机间转发是由backend实现的,目前已经支持UDP、VxLAN、host-gw、AWS VPC和GCE路由等多种backend

数据转发流程

如何搭建Flannel容器

容器直接使用目标容器的ip访问,默认通过容器内部的eth0发送出去。

报文通过veth pair被发送到vethXXX。

vethXXX是直接连接到虚拟交换机docker0的,报文通过虚拟bridge docker0发送出去。

查找路由表,外部容器ip的报文都会转发到flannel0虚拟网卡,这是一个P2P的虚拟网卡,然后报文就被转发到监听在另一端的flanneld。

flanneld通过etcd维护了各个节点之间的路由表,把原来的报文UDP封装一层,通过配置的iface发送出去。

报文通过主机之间的网络找到目标主机。

报文继续往上,到传输层,交给监听在8285端口的flanneld程序处理。

数据被解包,然后发送给flannel0虚拟网卡。

查找路由表,发现对应容器的报文要交给docker0。

docker0找到连到自己的容器,把报文发送过去。

Flannel安装配置

环境准备

节点名称 IP地址 安装软件docker1 192.168.198.133 etcd、flannel、dockerdocker2 192.168.198.130 flannel、docker

安装etcd

etcd下载地址:https://github.com/coreos/etcd/releases

启动命令:

etcd -name etcd1 -data-dir /var/lib/etcd --advertise-client-urls http://192.168.198.133:2379,http://127.0.0.1:2379 --listen-client-urls http://192.168.198.133:2379,http://127.0.0.1:2379 &

安装Flannel

flannel下载地址:https://github.com/coreos/flannel/releases

添加flannel网络配置信息到etcd:

etcdctl --endpoints http://127.0.0.1:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "vxlan"}}'

Network:用于指定Flannel地址池

SubnetLen:用于指定分配给单个宿主机的docker0的ip段的子网掩码的长度

SubnetMin:用于指定最小能够分配的ip段

SudbnetMax:用于指定最大能够分配的ip段,在上面的示例中,表示每个宿主机可以分配一个24位掩码长度的子网,可以分配的子网从10.0.1.0/24到10.0.20.0/24,也就意味着在这个网段中,最多只能有20台宿主机

Backend:用于指定数据包以什么方式转发,默认为udp模式,host-gw模式性能最好,但不能跨宿主机网络

启动Flannel

# cat /etc/systemd/system/flanneld.service[Unit]Description=FlanneldDocumentation=https://github.com/coreos/flannelAfter=network.targetBefore=docker.service[Service]User=rootExecStartPost=/usr/local/bin/mk-docker-opts.shExecStart=/usr/local/bin/flanneld \--etcd-endpoints="http://192.168.198.133:2379" \--iface=192.168.198.133 \--ip-masq=true \--etcd-prefix=/coreos.com/networkRestart=on-failureType=notifyLimitNOFILE=65536[Install]WantedBy=multi-user.target# systemctl daemon-reload# systemctl start flanneld

Flannel启动过程解析:

从etcd中获取network的配置信息,划分subnet,并在etcd中进行注册,将子网信息记录到/run/flannel/subnet.env中,Flannel必须先于Docker启动。

验证Flannel网络

查看etcd中的数据:

# etcdctl ls /coreos.com/network/subnets/coreos.com/network/subnets/10.0.18.0-24

查看docker1的flannel网卡信息:

38: flannel.1:  mtu 1450 qdisc noqueue state UNKNOWN group default   link/ether 1a:8e:8b:09:d6:d4 brd ff:ff:ff:ff:ff:ff   inet 10.0.18.0/32 scope global flannel.1      valid_lft forever preferred_lft forever   inet6 fe80::188e:8bff:fe09:d6d4/64 scope link      valid_lft forever preferred_lft forever

可以看到flannel0网卡的地址和etcd存储的地址一样,这样flannel网络配置完成

配置Docker

Docker安装完成以后,需要修改其启动参数以使其能够使用flannel进行IP分配,以及网络通讯

在Flannel运行之后,会生成一个环境变量文件,包含了当前主机要使用flannel通讯的相关参数,如下:

# cat /run/flannel/subnet.envFLANNEL_NETWORK=10.0.0.0/16FLANNEL_SUBNET=10.0.18.1/24FLANNEL_MTU=1450FLANNEL_IPMASQ=true

可以使用flannel提供的脚本将subnet.env转写成Docker启动参数,创建好的启动参数默认生成在/run/docker_opts.env文件中:

# /opt/flannel/mk-docker-opts.sh -c# cat /run/docker_opts.envDOCKER_OPTS=" --bip=10.0.18.1/24 --ip-masq=false --mtu=1450"修改docker的服务启动文件如下:# vim /lib/systemd/system/docker.serviceEnvironmentFile=/run/docker_opts.envExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://

重启docker

systemctl daemon-reloadsystemctl restart docker

这时可以看到docker0的ip已经位于flannel网卡的网段之中:

3: docker0:  mtu 1500 qdisc noqueue state DOWN group default   link/ether 02:42:de:a3:d8:7d brd ff:ff:ff:ff:ff:ff   inet 10.0.18.1/24 brd 10.0.18.255 scope global docker0      valid_lft forever preferred_lft forever   inet6 fe80::42:deff:fea3:d87d/64 scope link      valid_lft forever preferred_lft forever38: flannel.1:  mtu 1450 qdisc noqueue state UNKNOWN group default   link/ether 1a:8e:8b:09:d6:d4 brd ff:ff:ff:ff:ff:ff   inet 10.0.18.0/32 scope global flannel.1      valid_lft forever preferred_lft forever   inet6 fe80::188e:8bff:fe09:d6d4/64 scope link      valid_lft forever preferred_lft forever

验证容器互通

root@ubuntu:~# docker run -it busybox/ # ip a1: lo:  mtu 65536 qdisc noqueue qlen 1000   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00   inet 127.0.0.1/8 scope host lo      valid_lft forever preferred_lft forever39: eth0@if40:  mtu 1450 qdisc noqueue   link/ether 02:42:0a:00:12:02 brd ff:ff:ff:ff:ff:ff   inet 10.0.18.2/24 brd 10.0.18.255 scope global eth0      valid_lft forever preferred_lft forever/ # ping 10.0.12.2PING 10.0.12.2 (10.0.12.2): 56 data bytes64 bytes from 10.0.12.2: seq=0 ttl=62 time=0.803 msroot@ubuntuserver:~/flannel# docker exec -it b4d /bin/bashroot@b4d65fdc02a3:/usr/local/apache2# ip a1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00   inet 127.0.0.1/8 scope host lo      valid_lft forever preferred_lft forever5: eth0@if6:  mtu 1450 qdisc noqueue state UP group default   link/ether 02:42:0a:00:0c:02 brd ff:ff:ff:ff:ff:ff   inet 10.0.12.2/24 brd 10.0.12.255 scope global eth0      valid_lft forever preferred_lft foreverroot@b4d65fdc02a3:/usr/local/apache2#root@b4d65fdc02a3:/usr/local/apache2#root@b4d65fdc02a3:/usr/local/apache2# ping 10.0.18.2PING 10.0.18.2 (10.0.18.2) 56(84) bytes of data.64 bytes from 10.0.18.2: icmp_seq=1 ttl=62 time=0.794 ms64 bytes from 10.0.18.2: icmp_seq=2 ttl=62 time=0.957 ms

此时的网络数据包流向如图:

如何搭建Flannel容器
详解:Flannel安装与配置详解:Flannel安装与配置

配置backend为host-gw

host-gw bakcend是flannel的另一个backend。与vxlan不同,host-gw不会封装数据包,而是在主机的路由表中创建到其他主机的subnet的路由条目,从而实现容器网络跨主机通信。需要说明的是,host-gw不能跨宿主机网络通信,或者说跨宿主机网络通信需要物理路由支持。

修改etcd如下:

etcdctl --endpoints http://127.0.0.1:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "host-gw"}}'

重启flanneld与docker:

systemctl restart flanneld docker

可以在宿主机上查看到路由条目:

root@ubuntu:~# ip routedefault via 192.168.198.2 dev ens33 proto dhcp metric 10010.0.12.0/24 via 192.168.198.130 dev ens3310.0.18.0/24 dev docker0 proto kernel scope link class="lazy" data-src 10.0.18.1 linkdown169.254.0.0/16 dev ens33 scope link metric 1000192.168.198.0/24 dev ens33 proto kernel scope link class="lazy" data-src 192.168.198.133 metric 100

以上是“如何搭建Flannel容器”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何搭建Flannel容器

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何搭建Flannel容器

这篇文章主要为大家展示了“如何搭建Flannel容器”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何搭建Flannel容器”这篇文章吧。随着docker容器化兴起,云计算面对的挑战越来越大,例
2023-06-27

容器云如何搭建web服务器

要搭建一个容器云中的Web服务器,可以按照以下步骤进行操作:1. 选择一个容器管理平台:选择一个合适的容器管理平台,如Docker、Kubernetes等。2. 安装和配置容器管理平台:根据所选择的容器管理平台的官方文档,安装和配置该平台。
2023-09-22

Android实战之Cocos游戏容器如何搭建

这篇文章主要介绍“Android实战之Cocos游戏容器如何搭建”,在日常操作中,相信很多人在Android实战之Cocos游戏容器如何搭建问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android实战之C
2023-07-02

如何搭建云服务器搭建wordpress

搭建云服务器可以使用以下方法:安装云服务器:首先需要安装云服务器的基础配置,这里推荐使用MicrosoftAzure云服务器进行部署。如果不想自己安装,也可以参考下面的步骤。选择云服务器:选择云服务器的主机型号和云主机的类型。一般而言,选择云主机可以节省很多时间和成本。在选择云主机时,最好选择支持P2SP协议的主机,这样就可以避免在部署过程中出现其他问题。配置云服务器:根据云主机的配置文
2023-10-26

如何创建Docker容器

本篇内容介绍了“如何创建Docker容器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!GIScript2016是支持Python3的地理空间
2023-06-19

如何在DaoCloud的Docker容器中搭建WordPress及绑定域名

本篇内容介绍了“如何在DaoCloud的Docker容器中搭建WordPress及绑定域名”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、
2023-06-10

tftp服务器如何搭建

tftp服务器搭建的方法:1、使用install命令安装tftp服务端和客户端;2、使用vi命令修改tftp服务端相应的配置文件;3、使用mkdir和chmod命令创建tftp根目录,并设定目录权限;4、重启tftp服务端服务;5、创建测试
2023-02-09

jellyfin如何搭建服务器

搭建Jellyfin服务器需要按照以下步骤进行:下载并安装Jellyfin服务器软件:首先需要到Jellyfin官网上下载适用于您系统的服务器软件,然后按照官方指导进行安装。配置服务器:安装完成后,需要进行一些基本设置和配置,如创建管理员账
jellyfin如何搭建服务器
2024-04-17

云服务器如何搭建

云服务器是一种虚拟化计算服务,它提供了一种可以在同一台物理服务器上运行多个虚拟软件的能力。下面是搭建云服务器的一般步骤:选择云主机:在购买云服务器之前,需要首先确定自己的数据中心位置、网络连接以及计算能力等方面,选择适合自己需求的云主机。云主机通常会提供多种虚拟化技术,可以根据自己的需要进行选择。安装操作系统:在安装操作系统前,需要先将操作系统安装到云主机上。操作系统的安装通常比较简单,一般只需将
2023-10-25

php7.2服务器如何搭建

这篇文章主要介绍“php7.2服务器如何搭建”,在日常操作中,相信很多人在php7.2服务器如何搭建问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php7.2服务器如何搭建”的疑惑有所帮助!接下来,请跟着小编
2023-06-21

如何搭建rsync服务器

本篇内容介绍了“如何搭建rsync服务器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!下载rsync 源码包wget http://www
2023-06-27

Git服务器如何搭建

这篇文章主要介绍“Git服务器如何搭建”,在日常操作中,相信很多人在Git服务器如何搭建问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Git服务器如何搭建”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!第一
2023-06-28

如何搭建 SSH 服务器

如何搭建 SSH 服务器?搭建 SSH 服务器是在网络环境中实现安全远程登录和数据传输的关键步骤之一。本文将介绍一些简单而有效的方法,以帮助您轻松搭建 SSH 服务器。
如何搭建 SSH 服务器
2024-01-24

如何搭建ssl服务器

搭建SSL服务器需要以下步骤:1. 选择合适的服务器软件:常用的服务器软件有Apache、Nginx和IIS等。选择适合自己的服务器软件,并确保服务器软件支持SSL/TLS协议。2. 获取SSL证书:为了使用SSL/TLS协议,您需要获得一
2023-08-16

如何搭建Git服务器

本篇内容主要讲解“如何搭建Git服务器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何搭建Git服务器”吧!搭建Git服务器需要准备一台运行的Linux机器,强烈推荐用Ubuntu或Debia
2023-06-26

Docker容器怎么搭建Kafka集群

本篇内容介绍了“Docker容器怎么搭建Kafka集群”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Kafka集群的搭建1.拉取相关镜像
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录