Docker容器使用Flannel通信

Docker 跨主机间通信

在这里插入图片描述

通信的方式

  • 路由
  • 虚拟包头

flannel 网络

概念

Flannel 是 Docker 提供的一种网络解决方案,它旨在为容器提供简单的 IP 地址管理和跨主机通信。Flannel 使用了一些现有的技术,比如 Linux 内核的 TUN/TAP 接口和 ETCD 分布式键值存储,来实现容器之间的通信。

原理
  • Flannel 的工作原理是将一个大的 IP 地址段分成许多小的子网,并为每个子网分配一个唯一的子网前缀。flannel 为每个 host 分配一个 subnet
  • 例如:每个主机是 /24 的子网
    • 因此主机 a 分配10.100.5.0/24
    • 主机 B 分配10.100.18.0/24
    • 容器从此 subnet 中分配 IP,这些 IP 可以在 host 间路由,并让属于不在一个 host 上的容器能够直接通过内网 IP 通信。
  • 每个 subnet 都是从一个更大的 IP 池中划分的,flannel 会在每个主机上运行一个叫 flanneld 的代理程序,其职责就是负责从预配置地址空间中为每台主机分配一个网段。
  • 为了在各个主机间共享信息,flannel 直接使用 Kubernetes API 或 ETCD(与 consul 类似的 key-value 分布式数据库)存储网络配置、已分配的 subnet、host 的 IP 等信息。

  1. Flannel 将一个大的 IP 地址段分成许多小的子网,每个子网的大小由参数--subnet 控制。

  2. 每个主机上的 Flannel 代理都会为容器分配一个唯一的 IP 地址,该地址由子网前缀和主机上的唯一标识符组成。其中,子网前缀是在第一步中分配给该主机的子网前缀,唯一标识符可以是主机的 MAC 地址或其他标识符。

  3. 当容器需要与其他容器通信时,它们会将数据包发送到目标 IP 地址,Flannel 代理会根据目标 IP 地址的子网前缀判断目标容器是否在同一子网中。如果目标容器在同一子网中,那么数据包将直接发送到目标容器,否则它将被发送到目标容器所在主机上的 Flannel 代理。

  4. 当数据包到达目标主机上的 Flannel 代理时,它会根据目标容器的 IP 地址将数据包转发到目标容器。

Flannel 还支持多种后端网络,包括 UDP、VXLAN、Host-GW 等。这些后端网络可以根据不同的场景和需求进行选择,以提高网络性能和可靠性。

ETCD

概念
  • 官方仓库:Releases · etcd-io/etcd (github.com)
  • etcd是一个开源的分布式键值存储系统,由CoreOS团队开发和维护。它是一个高可用、一致性的系统,用于共享配置和服务发现。etcd使用Raft算法来保证数据的一致性和可靠性。
解决的问题

使用etcd可以解决分布式系统中的很多问题,例如:

  1. 配置共享:etcd可以作为分布式系统中的配置中心,用于保存和共享应用程序的配置数据。

  2. 服务发现:etcd可以用于服务发现,可以在集群中注册和发现服务,以便于不同的服务之间进行通信。

  3. 分布式锁:etcd可以用于分布式锁的实现,保证在分布式环境下的数据一致性问题。

优点

etcd的优点包括:

  1. 高可用:etcd使用Raft算法保证数据的一致性和可靠性,可以实现高可用的分布式系统。

  2. 性能高:etcd的访问速度非常快,可以满足高并发、低延迟的需求。

  3. 易于使用:etcd提供了简单易用的API,可以方便地进行数据的读写和管理。

  4. 可靠性强:etcd使用多副本机制,即使在一些节点失效的情况下仍可以正常运行。

缺点

etcd也存在一些缺点:

  1. 存储容量受限:etcd的存储容量有限,如果存储的数据量超过了容量限制,可能会影响系统的性能。

  2. 部署复杂:etcd的部署需要考虑很多因素,如节点数量、网络拓扑结构等,需要一定的技术水平。

场景
  • 例如,在 Kubernetes 中,etcd 作为后端存储用于存储整个集群的配置信息和状态信息,包括 Pod、Service、Volume 等资源的信息。
  • Kubernetes 的各个组件通过 etcd API 访问 etcd 集群,以获取和更新集群中的配置数据。此时,2379 端口号就扮演了客户端访问 etcd 集群的重要角色。
  • 另外,在 Docker Swarm 中,etcd 也可以作为后端存储用于存储集群的配置信息和状态信息,以确保各个 Docker 节点之间的数据一致性。在这种情况下,2379 端口号同样用于客户端访问 etcd 集群,以读写集群中的配置数据。

部署 flannel 网络的 vxlan 模式

实验环境

主机名 IP 部署服务
Y 21 192.168.45.21 flannel,docker
Y 22 192.168.45.22 flannel,docker
Y 23 192.168.45.23 etcd

部署 ETCD

获取安装包
wget https://storage.googleapis.com/etcd/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz
tar -zxvf etcd-v3.4.13-linux-amd64.tar.gz -C /usr/local/
ls /usr/local/etcd-v3.4.13-linux-amd64/

image.png

初始化
  • 软链接
ln -s /usr/local/etcd-v3.4.13-linux-amd64/etcd* /usr/local/bin/
  • 启动 etcd
/usr/local/etcd-v3.4.13-linux-amd64/etcd
  • 配置 etcd
mkdir /etc/etcd
vim /etc/etcd/etcd.conf
#[member]
ETCD_NAME="etcd"
ETCD_DATA_DIR="/data/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://192.168.45.23:2379,http://127.0.0.1:2379"
ETCD_ADVERTISE_CLIENT_URLS=http://192.168.45.23:2379,http://127.0.0.1:2379
ETCD_ENABLE_V2=true 
配置文件解析
  • ETCD_NAME 节点名称
  • ETCD_DATA_DIR 数据目录
  • ETCD_LISTEN_CLIENT_URLS 客户端访问监听地址
  • ETCD_ADVERTISE_CLIENT_URLS 客户端通告地址
  • ETCD_ENABLE_V2 ETCD 3.4 版本 ETCDCTL_API=3--enable-v2=false 成为了默认配置,
    • 如要使用 v 2 版本, 需要 ETCD_ENABLE_V 2=true,否则会报错“404 page not found”
配置 etcd.service
vim /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Service
Documentation=https://coreos.com/etcd/docs/latest/
After=network.target

[Service]
Type=notify
ExecStart=/usr/local/bin/etcd
EnvironmentFile=-/etc/etcd/etcd.conf
Restart=on-failure
RestartSec=
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值