博客
关于我
Docker网络之深挖overlay
阅读量:806 次
发布时间:2019-03-25

本文共 3382 字,大约阅读时间需要 11 分钟。

Docker Swarm 网络深度分析

Docker Swarm的网络架构设计确实非常巧妙,为容器化应用提供了强大的网络支持能力。本文将深入剖析Docker Swarm的网络实现机制,揭示官方文档中未提及的关键细节。

部署实例

首先,我们创建一个包含两个节点(node 1 和 node 2)的 Docker Swarm 集群。创建 swarm 集群的具体步骤不在本文详细阐述。接下来,我们创建一个 overlay 网络 net1 和三个服务:Redis、Node.js 和 Nginx。每个服务指定使用 net1 网络,这样可以确保服务之间的通信基于该 overlay 网络。

具体命令如下:

docker network create --option encrypted --subnet 100.0.0.0/24 -d overlay net1
docker service create --name redis --network net1 redis:latest
docker service create --name node --network net1 nvbeta/node:latest
docker service create --name nginx --network net1 -p 1080:80 nvbeta/swarm_nginx

这些命令创建了一个典型的三层架构:Nginx 作为负载均衡器,将请求转发到 Node.js 服务,而 Node.js 又通过调用 Redis 来获取数据并返回给 Nginx。为了简化起见,我们仅创建一个 Node 实例。

网络结构

在 Docker Swarm 中,网络分为几个关键部分:

  • net1 网络:这是一个 overlay 网络,用于容器之间的通信。
  • docker_gwbridge 网络:这是一个桥接网络,提供容器与宿主机之间的通信。
  • ingress 网络:默认创建的 overlay 网络,用于暴露外部服务和实现 routing mesh。
  • 此外,还可以看到 none 网络,它用于 container 操作时的临时通信。

    核心网络组件

    docker network ls 的输出可以看到:

    NETWORK ID          NAME                DRIVER              SCOPE
    cac91f9c60ff bridge bridge local
    b55339bbfab9 docker_gwbridge bridge local
    fe6ef5d2e8e8 host host local
    f1nvcluv1xnf ingress overlay swarm
    8vty8k3pejm5 net1 overlay swarm
  • net1 网络:负责容器间的通信,所有服务都指定使用此网络。
  • docker_gwbridge 网络:由 Docker 自动创建,用于容器与宿主机的通信。
  • ingress 网络:用于暴露外部服务,并管理 routing mesh,确保容器间的通信不受宿主机限制。
  • 通过 docker ps 命令可以观察到各个容器的状态:

    CONTAINER ID        IMAGE               COMMAND                  CREATED           STATUS             PORTS               NAME
    Seb03383913fb nvbeta/node:latest "nodemon /src/index.js" 2 hours ago Up 2 hours 8888/tcp node.1
    yscmxtoymkvs3bdd4z678w4434ce2679482 redis:latest "docker-entrypoint.sh" 2 hours ago Up 2 hours 6379/tcp redis.1

    此外,查看容器的网络配置,可以发现容器使用 overlay 网络进行通信。

    网络实现

    Docker Swarm 的网络架构主要基于以下技术:

  • Overlay 网络overlay 网络类型将多个宿主机连接成单个逻辑网络,确保容器在不同宿主机间通信。
  • Linux Bridge:用于宿主机和容器之间的通信,默认使用 docker_gwbridge
  • VxLAN(虚量化网络):通过 VTEP(虚拟化Ethernet impair)协议实现机制,允许多个子网在逻辑上连接到单个物理网络。
  • Ingress 网络:负责容器外部访问,基于 iptables 和 iptables 插件实现负载均衡和路由。
  • 具体网络拓扑

    通过 docker network inspectbrctl showbridge 等命令可以查看详细的网络拓扑信息:

    Name            Bridge id            STP enabled      Interface
    docker0 8000.0242e4567e9a no veth97d586b
    vethceaaebe 8000.024224f1afe8 no vethceaaebe
    ethefdaa0d 8000.0242e4567e9a no vethefdaa0d

    此外,使用 ip netns execip link 可以查看容器的网络接口及其对应的名称空间。

    服务间通信机制

    在 Docker Swarm 中,服务间通信基于 overlay 网络实现的高效 routing mesh:

    • net1 网络:负责容器间的直接通信。
    • docker_gwbridge 网络:允许容器与宿主机通信。
    • ingress 网络:完成外部请求的路由和负载均衡。

    通过 iptables -t nat 命令可以观察到网络路由规则,

    Chain DOCKER-INGRESS (policy ACCEPT 2 references)
    pkts bytes target prot opt in out source destination
    0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1080 to:172.18.0.2:1080

    这表明所有到宿主机 1080 端口的流量会被重定向到隐藏的 ingress-sbox 容器。

    负载均衡与路由

    Docker Swarm 的 routing mesh 机制确保了服务间的高效通信,无论服务运行在哪个节点,内部流量都能直接经过网络层而非传统的三次握手。

    通过 ipvsadm 可以看到负载均衡器的配置:

    IPVS: Thu Jan 14 16:38:51 2024 -> 1 server: 10.255.0.5:0
    FWM: Masq 1 0 0

    这个配置指示负载均衡将所有到达 10.255.0.5:0 的流量转发给后端服务。

    总结

    Docker Swarm 的网络设计极其巧妙,结合了 Overlay 网络、Linux Bridge、VxLAN 等技术,为容器化应用提供了高效、可靠的网络支持。深入理解这些机制对于开发与调试都是至关重要的。

    转载地址:http://nyvyk.baihongyu.com/

    你可能感兴趣的文章
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
    查看>>
    NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
    查看>>
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_说明操作步骤---大数据之Nifi工作笔记0028
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002---大数据之Nifi工作笔记0069
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>