微服务自动化.etcd跨主机集群

本文详细介绍了Flannel在Docker集群中的应用,包括容器间和跨主机通信的实现原理、环境搭建步骤、ETCD版本兼容性处理、flannel的安装与配置,以及如何通过修改Docker启动参数使其与Flannel集成,最后测试了Flannel的功能和解决跨主机容器互通问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、容器间内部通信

二、跨主机通信

1、直接路由

2、Pipework

3、Flannel

①、Flannel特点

三、环境搭建

ETCD版本问题

①、修改配置文件

②、api 2 使用方法

③、 api 3 使用方法

                   4、 ETCD中保存网络信息

①、使用v2版的set命令向ETCD中保存flannel覆盖网络信息

三、flannel安装与配置

                          1、下载或上传flannel安装包

2、创建flannel安装目录

3、解压到安装目录

4、查看解压后文件

5、 为flannel创建一个systemd服务(用于后台启动)

6、更新配置文件中并启动flanneld

7、 验证flannel网络

四、docker配置

1、查看flannel分配的网络参数

2、创建Docker运行参数

3、修改Docker启动参数

下面是docker.service要修改的地方

4、重新加载systemd配置,并重启Docker

5、查看是否应用成功

五、测试flannel

1、下载centos镜像,因为此镜像中其它软件及命令均有安装

2、依次查看集群内容器的flannel.1网络IP

3、从不同宿主机容器到其他宿主机容器

4、解决flannel下容器无法跨主机互通问题

一、容器间内部通信

  • bridge模式

  • host模式

  • 自定义网络

  • Container模式

  • None模式

二、跨主机通信

Docker默认的网络环境下 , 单台主机上的 Docker 容器可以通过 docker0 网桥直接通信 , 而不同主机上 的Docker 容器之间只能通过在主机上做端口映射进行通信。 这种端口映射方式对很多集群应用来说极不方便。 如果能让 Docker 容器之间直接使用自己的 IP 地址进行通信 , 会解决很多问题。 按实现原理可分别直接路由方式、桥接方式( 如 pipework) 、 Overlay 隧道方式 ( 如 flannel 、 ovs+gre) 等

1、直接路由

2、Pipework

pipework是由Docker的工程师Jérôme Petazzoni开发的一个Docker网络配置工具,由200多行shell实现,方便易用。下面用三个场景来演示pipework的使用和工作原理。

3、Flannel

Flannel 实质上是一种覆盖网络 (overlay network), 即表示运行在一个网上的网 ( 应用层网络 ), 并不依靠 ip 地址来传递消息 , 而是采用一种映射机制 , 把 ip 地址和 identifiers 做映射来资源定位。 也就是将 TCP 数据包装在另一种网络包里面进行路由转发和通信 , 目前已经支持 UDP 、 VxLAN 、 AWS VPC 和 GCE 路由等数据转发方式 Flannel 实现的容器的跨主机通信通过如下过程实现 : 每个主机上安装并运行etcd和flannel; 在etcd中规划配置所有主机的docker0子网范围; 每个主机上的flannel根据etcd中的配置,为本主机的docker0分配子网,保证所有主机上的docker0网段不重复,并将结果(即本主机上的docker0子网信息和本主机IP的对应关系)存入 etcd库中,这样etcd库中就保存了所有主机上的docker子网信息和本主机IP的对应关系; 当需要与其他主机上的容器进行通信时,查找etcd数据库,找到目的容器的子网所对应的outip(目的宿主机的IP); 将原始数据包封装在VXLAN或UDP数据包中,IP层以outip为目的IP进行封装; 由于目的IP是宿主机IP,因此路由是可达的; VXLAN或UDP数据包到达目的宿主机解封装,解出原始数据包,最终到达目的容器。

①、Flannel特点
  1. 使集群中的不同Node主机创建的Docker容器都具有全集群唯一的虚拟IP地址。

  2. 建立一个覆盖网络(overlay network),通过这个覆盖网络,将数据包原封不动的传递到目标容器。覆盖网络是建立在另一个网络之上并由其基础设施支持的虚拟网络。覆盖网络通过将

  3. 一个分组封装在另一个分组内来将网络服务与底层基础设施分离。在将封装的数据包转发到端点后,将其解封装。

  4. 创建一个新的虚拟网卡flannel0接收docker网桥的数据,通过维护路由表,对接收到的数据进行封包和转发(vxlan)。

  5. etcd保证了所有node上flanned所看到的配置是一致的。同时每个node上的flanned监听etcd上的数据变化,实时感知集群中node的变化。

    三、环境搭建

主机 ip(根据主机的来) 环境要求
centos 7 192.168.232.135 etcd,docker,flannel
centos 7 192.168.232.135 etcd,docker,flannel

ETCD版本问题

ETCD3.4 版本中 ,ETCDCTL_API=3 和 etcd --enable-v2=false 成为了默认配置 flannel 操作 etcd 使用的是 v2 的 API, 而 kubernetes 操作 etcd 使用的 v3 的 API 为了兼容 flannel, 将默认开启 v2 版本 , 故配置文件中还要设置 :

①、修改配置文件

vi / etc / profile
export ETCDCTL_API=2 # 指定etcdctl命令的版本为v2 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷亿!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值