0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

docker跨主机通信的方法

汽车玩家 来源:Devops部落 作者:Devops部落 2020-01-21 17:14 次阅读

概述

flannel是CoreOS提供用于解决Dokcer集群跨主机通讯的覆盖网络工具。它的主要思路是:预先留出一个网段,每个主机使用其中一部分,然后每个容器被分配不同的ip;让所有的容器认为大家在同一个直连的网络,底层通过UDP/VxLAN等进行报文的封装和转发。

架构图

docker跨主机通信的方法

跨主机容器通信

这里涉及到一个知识点,就是底层通过UDP/VxLAN设备进行报文的封装和转发,以下来叙述一下这个过程,当报文从Pod1:10.1.15.2/24要去往Pod4: 10.1.20.2/24这个容器的时候,要分别经过以下步骤。

因为Pod1的veth0和docker0的一段网卡相连,所以数据包会先发往docker0网桥,此时docker0会查询自己所维护的路由表,没有发现有10.1.20.2/24这个地址,所以会把数据包发送给默认路由,这里的默认路由即flannel网桥。

docker跨主机通信的方法

flannel网桥是一个VxLAN设备,它收到数据包后,检查到包中的目的地址并不是自己的地址,所以他本应该这把这个数据包重新发送出去,因为他的下一层已经是数据链路层,所以即将进行二层封包,即通过ARP协议来对以太网进行广播谁是10.1.20.2/24,接受并记录目的的MAC地址。但是由于它是一个VxLAN设备,其特殊性就是并没有真正在二层发出这个 arp 包,而是由 linux kernel 引发一个”L3 MISS”事件并将 arp 请求发到用户空间的 Flannel 程序中。

docker跨主机通信的方法

flannel程序接收到”L3 MISS”事件以及 arp 请求 (who is10.1.20.2/24 ) 后,并不会像以太网发送ARP请求,而是在etcd中匹配10.1.20.2/24的信息,从而找到Node2的MAC地址。Flannel 将查询到的信息放入 Node1 host 的 arp cache 表中,flannel0 完成这项工作后,Linux kernel 就可以在 arp table 中找到 10.1.20.2/24对应的 MAC 地址并封装二层以太包了。

Node 上 2 的 eth0 接收到上述 VXLAN 包,内核也识别出这是一个 VXLAN 包,于是通过相反的步骤解包出来,最后传达到POD4上去。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 以太网
    +关注

    关注

    40

    文章

    5069

    浏览量

    166189
  • 集群
    +关注

    关注

    0

    文章

    79

    浏览量

    17102
收藏 人收藏

    评论

    相关推荐

    全面介绍docker的使用方法

    docker使用方法
    发表于 07-25 14:22

    理解Docker容器并畅玩docker

    !命令行!玩docker,简单几句命令就够了。Docker容器响应迅速,执行迅速,回忆一下VM启动要多久?最佳的试验场所,想怎么玩怎么玩,rm -rf /* 根本不是大问题。主机上删掉容器后,一个命令
    发表于 11-05 09:54

    Docker容器管理命令(一)

    1、Docker容器管理命令的使用方法查看当前主机本地docker镜像:启动容器必须依赖镜像,所以要获取到镜像的唯一标识docker容器管理
    发表于 04-20 17:55

    Docker容器管理命令(二)

    1、Docker容器管理命令的使用方法批量删除docker 容器docker cp命令docker cp :用于容器与
    发表于 04-21 11:31

    docker基础知识和使用bmnnsdk时的docker常用命令

    安装docker并下载bmnnsdk2 解压bmnnsdk压缩包(以下简成bmnnsdk为SDK) 进入SDK解压后文件夹,文件名如bmnnsdk2_bm1684_vx.x.x ,此为宿主机根目录; 从
    发表于 09-18 07:59

    如何在docker容器内使用宿主机上的显示设备显示图像?

    主机名:端口』共享给dockerdocker 就可以通过端口找到显示输出的地方,和linux系统共用显示设备: 宿主机安装x11-server: sudo apt-get ins
    发表于 09-19 08:16

    如何判断是否在docker镜像中?

    则简洁很多 3. 一个有些土的方法:大部分 docker 容器中都不会在安装 docker,至少算能SDK 的docker是这样的,所以在云主机
    发表于 09-20 07:42

    基于Docker的云资源弹性调度策略

    针对云资源弹性调度问题,结合Ceph数据存储的特点,提出一种基于Docker容器的云资源弹性调度策略。首先,指出Docker容器数据卷不能跨主机的特性给应用在线迁移带来了困难,并对Ceph集群的数据
    发表于 03-29 10:11 0次下载
    基于<b class='flag-5'>Docker</b>的云资源弹性调度策略

    使用docker完成编译环境创建

    作者环境:主机MacBook Pro 2015(16G),Docker Desktop for Mac(官方)
    的头像 发表于 04-21 07:49 2629次阅读

    docker的4种网络模式

    Docker 使用 Linux 桥接,在宿主机虚拟一个 Docker 容器网桥(docker0),Docker 启动一个容器时会根据
    的头像 发表于 08-14 11:50 1234次阅读

    docker的4种网络模式配置

    Docker 使用 Linux 桥接,在宿主机虚拟一个 Docker 容器网桥(docker0),Docker 启动一个容器时会根据
    的头像 发表于 10-10 10:37 939次阅读

    Docker容器网络的数据链路是什么

    主机容器网络可能存在多个docker,分属于不同的bridge,它们之间有通信的需求。
    的头像 发表于 02-15 09:56 609次阅读
    <b class='flag-5'>Docker</b>容器网络的数据链路是什么

    docker exec命令的使用方法

    有用的命令,用于在正在运行的容器中执行命令。 在本文中,我将详细介绍Docker exec命令的使用方法,包括命令格式、参数选项、使用示例等。 Docker exec命令格式 Docker
    的头像 发表于 11-23 09:33 731次阅读

    docker容器与容器之间通信

    Docker是一种轻量级容器化技术,能够将应用程序及其依赖项封装在一个独立、可移植的容器中。而容器化的应用程序通常是以分布式方式设计的,因此实现容器与容器之间的通信至关重要。 本文将详细介绍
    的头像 发表于 11-23 09:36 531次阅读

    docker进入容器的方法有哪些

    Docker是一种流行的容器化平台,它能够快速构建、交付和运行应用程序。在使用Docker时,我们经常需要进入容器进行调试、管理和运行命令等操作。本文将详细介绍Docker进入容器的各种方法
    的头像 发表于 11-23 09:45 3197次阅读