docker三种自定义网络(虚拟网络) overlay实现原理

·  docker提供了三种自定义网络驱动:bridge、overlay、macvlan。

·  bridge驱动类似默认的bridge网络模式。

·  overlay和macvlan是用于创建跨主机网络

·  支持自定义网段、网关,docker network create --subnet 172.77.0.0/24 --gateway 172.77.0.1 my_net。

·  docker创建容器使用默认docker0网络不支持自定义固定IP,都是动态的。

常用网络管理工具

apt install net-tools //ifconfig  查看网卡配置 (推荐使用 ip addr查看网卡信息

apt install dnsutils // nslookup

一、bridge创建单机

当你在Docker中创建bridge虚拟网络(虚拟网桥)时,Docker会同时创建一个与该虚拟网络相关的虚拟网卡

  Docker Bridge 网络的原理:

1.网桥(Bridge):网桥是一个虚拟的二层设备,它允许多个容器连接到同一个网络。Docker 在主机上创建一个名为 docker0 的网桥,默认分配网桥的 IP 地址为 172.17.0.1/16。主机上的容器可以连接到 docker0 网桥,并通过该网桥与其他容器进行通信

2.容器接口和 IP 分配:每当创建一个容器时,Docker 创建一个虚拟网络接口 veth 对并在容器内部分配一个唯一的 IP 地址。该 veth 对的一端连接到容器的网络命名空间,另一端连接到 docker0 网桥。通过这种方式,容器能够与其他容器和主机进行通信。

3.IP 数据包的转发:当容器之间需要进行通信时,Docker Bridge 网络使用 IP 转发机制将数据包从一个容器转发到另一个容器。它通过在主机上设置转发规则实现转发,确保数据包能够正确地传递到目标容器。

4.网络地址转换(NAT):通过 Docker Bridge 网络,容器可以通过主机访问外部网络。Docker 使用网络地址转换(NAT)技术,将容器的私有 IP 地址映射为主机的公共 IP 地址,以实现容器与外部网络的通信。

docker network ls //查看docker虚拟网络 

NETWORK ID     NAME              DRIVER    SCOPE

b483c4f42a0d     bridge              bridge    local

docker network inspect bridge  //如下所示 就是虚拟网桥的name 

通过brctl show 可查看宿主机上网桥信息(需要安装bridge-utils软件包)

可以通过ifconfig docker0 查看对应的虚拟网卡配置信息(推荐使用 ip addr查看网卡信息)。

二、macvlan创建

Docker 内置的 Macvlan 驱动(Windows 上是 Transparent)通过为容器提供 MAC 和 IP 地址,让容器在物理网络上成为“一等公民”。它允许Docker容器直接通过物理网络接口使用宿主机的MAC地址。Macvlan网络驱动程序使得每个容器都能获得唯一的MAC地址,就像宿主机的物理或虚拟机网卡一样

使用Macvlan网络驱动程序时,每个容器都可以直接与宿主机所连接的物理网络通信,就像它们是网络中的独立设备一样。这使得容器能够实现与网络上的其他设备直接进行通信,而不需要进行NAT转换

Macvlan 的优点是性能优异,无须端口映射或者额外桥接,可以直接通过主机接口(或者子接口)访问容器接口。Macvlan 的缺点是需要将主机网卡(NIC)设置为混杂模式(Promiscuous Mode),这在大部分公有云平台上是不允许的。

Macvlan 对于公司内部的数据中心网络来说很棒(假设公司网络组能接受 NIC 设置为混杂模式),但是 Macvlan 在公有云上并不可行。

# 所有主机均需开启网卡混杂模式

ip link set ens192 promisc on

docker network create -d macvlan --subnet=10.3.1.0/8 --ip-range=10.3.1.0/8 --gateway=10.1.1.1 -o parent=ens160 macvlan

--subnet=10.0.0.0/24:macvlan的IPv4网段

--gateway=10.0.0.1:macvlan的IPv4网关

--ipv6:启用IPv6支持

--subnet=fd00::/60:macvlan的IPv6前缀

--gateway=fd00::1:macvlan的IPv6网关

-o parent=ens192:桥接网络走的接口名称

 docker run -itd --name=node-1 -v /data:/data --network=macvlan --ip=10.3.1.145 993a4cf9c1e8

 Macvlan 也支持 VLAN 的 Trunk 功能。可以在相同的 Docker 主机上创建多个 Macvlan 网络,并且将容器按照下图的方式连接起来。

 

默认情况下各个macvlan容器之间可以通讯,但是不能与宿主机进行通讯!!

主要原因:为了安全而禁止互通. 如宿主机ping容器的ip,尽管他们属于同一网段,但也是ping不通的,反过来也是。

如果想要实现互通,有个曲线救国的方法,就是macvlan与macvlan之间可以互通,只需要在宿主机再创建一个macvlan网络,然后修改路由,让数据经过这个macvlan达到互通的目的。

宿主机 10.3.1.45  ens160  255.0.0.0

docker容器 10.3.2.146

# 创建一个名为macvlan_host的macvlan虚拟接口,并桥接到ens160物理接口上

ip link add macvlan_host link ens160 type macvlan mode bridge

# 为macvlan_host接口添加一个10.3.2.2的IP

# ip addr add 10.3.2.2 dev macvlan_host

# 开启macvlan_host接口

ip link set macvlan_host up

# 新增路由,使到macvlan容器的数据包由macvlan_host发出

ip route add 10.3.2.146 dev macvlan_host  //或者ip route add 10.3.2.0/24 dev macvlan_host

macvlan容器与宿主机在同一网段的情况下,macvlan_host不需要配置IP

ip link show //link查看

然后在宿主机ping 10.3.2.146即可ping通。

三、overlay创建跨主机

由于Linux内核设置的限制,当1000 个容器位于同一主机上时覆盖网络会变得不稳定,容器间通信可能会中断

如果部署的服务非常多推荐使用host模式(共用宿主机网络,不需要nat转发),并自行维护iptables转发规则和负载均衡

 在 Docker Overlay 网络中,并不会创建单独的虚拟网卡,而是使用 VXLAN 技术在主机之间建立隧道来实现容器之间的通信利用底层网络的网络设备来传输数据。这样可以实现多个主机上的容器与网络的统一管理,提供了分布式容器网络的功能。

Docker 集群会生成两种不同类型的流量:

1.控制和管理平面流量:这包括集群管理消息,例如加入或离开集群的请求。此流量始终是加密的。

2.应用程序数据平面流量:这包括容器流量以及进出外部客户端的流量。

docker swarm overlay网络 容器通过gw_bridge桥接在宿主机上若是集群内服务则走IPVS,若外网或集群外的服务器则走宿主机转发出去

以下三个网络概念对集群服务很重要:

1.overlay覆盖网络管理参与集群的Docker守护进程之间的通信。您可以创建覆盖网络,就像为独立容器创建用户定义的网络一样。您还可以将服务附加到一个或多个现有的覆盖网络,以启用服务到服务的通信。覆盖网络是使用覆盖网络驱动程序的Docker网络。

2.ingress入口网络是一种特殊的覆盖网络,可以促进服务节点之间的负载均衡。当任何集群节点在已发布的端口上接收到请求时,它将该请求传递给称为IPVS的模块。IPVS跟踪参与该服务的所有IP地址,选择其中一个,并通过入口网络将请求路由到它。

入口网络在初始化或加入集群时自动创建。大多数用户不需要自定义它的配置,但是Docker允许你这样做。

3.docker_gwbridge是一个桥接网络,它将overlay覆盖网络(包括ingress入口网络)连接到单个Docker守护进程的物理网络。默认情况下,服务运行的每个容器都连接到其本地Docker守护进程主机的docker_gwbridge网络。

docker_gwbridge 是一个特殊的桥接bridge网络,用于连接主机网络与Docker Overlay网络之间的网桥。并提供代理节点间通信的功能。它允许容器与外部网络进行通信。

在初始化或加入集群时自动创建docker_gwbridge网络。大多数用户不需要自定义它的配置,但是Docker允许你这样做。

Docker Overlay网络的实现原理如下:

1.创建Overlay网络:在Docker Swarm集群中,可以通过运行docker network create命令来创建Overlay网络。这将创建一个虚拟网络,其中包含集群中的所有Docker主机。

VXLAN:在创建Overlay网络时,Docker引擎会自动为每个Docker主机创建一个VTEP(VXLAN Tunnel Endpoint)。VTEP负责将容器网络数据封装成VXLAN报文,并通过底层网络进行传输

2.连接容器:当创建一个容器并将其连接到Overlay网络时,Docker引擎会为该容器分配一个唯一的IP地址,并将其添加到Overlay网络中。

3.数据传输:当容器之间需要进行通信时,发送方容器会将网络数据封装成VXLAN报文,并通过底层网络发送给接收方容器所在的主机。接收方主机上的VTEP会解封装VXLAN报文,提取出原始的网络数据,并将其传递给目标容器VXLAN报文通过底层网络传输,主要使用UDP协议,并使用标准的4789端口

4.负载均衡:在Overlay网络中,Swarm Mode会自动进行服务负载均衡。Swarm Mode会根据容器部署的策略,将请求均匀地分发给网络中的各个容器

 docker swarm init  创建一个manager

 docker swarm join-token -q worker  //manager  输出添加节点所需token

//在其他节点执行命令加入此的swarm集群(使用上面输出的token)

docker swarm join 10.1.1.115:2377 --token SWMTKN-1-2rcj8zj7rsajg6nm8difk3crs1n7r81d6nb9dwz4e44amyg3y9-63x165r4mapwza9dlfc8u9lib

 docker node ls来查看节点状态

查看所有节点的network ( docker network ls), 它们现在都有一个名为  ingress 的 overlay 网络和一个名为 docker_gwbridge 是 bridge 网络

 docker_gwbridge 将 ingress 网络连接到 Docker 宿主机的网络接口上,这样流量就可以在 swarm管理者和 worker 之间流动。如果你创建了 swarm 服务,但没有指定网络,它们就会被连接到 ingress 网络上。建议你为每个应用程序或将一起工作的应用程序组使用单独的 overlay 网络。

docker_gwbridge 的enable_icc 设置成false gwbridge 只是用来提供外网访问,不提供容器间访问,容器间的通信应该通过overlay网络

docker inspect docker_gwbridge

容器内ping 8.8.8.8能ping通即可( 若ping不通可能是存在网段冲突之类的问题,尝试删掉然后重新创建一个docker_gwbridge网络,或者重新建一个纯净虚拟机配置环境 )

创建overlay网络要求必须是swarm集群中的节点,否则会报错。

在 manager 上,创建一个新的 overlay 网络。不需要在其他节点上创建 overlay 网络,因为当这些节点开始运行一个需要它的服务任务时,网络将自动创建

docker network create -d overlay --subnet 10.3.1.0/8  --gateway 10.1.1.1 --attachable overlay

 --opt encrypted     在它们的vxlan流量启用附加的加密层(启用加密)。

 --subnet        指定overlay网络使用的子网网段。当不指定一个子网时,swarm管理器自动选择一个子网并分配给网络。

 --attachable       要创建一个既能用于集群服务,又能用于单独的容器来和其他docker守护进程中的单独的容器进行通信的网络,加上--attachable标记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PPT大珩助手新功能-生成迷宫

大珩助手是一款功能丰富的办公软件插件,它主要分为两个版本:PPT大珩助手和Word大珩助手。这两个版本都旨在提高用户在处理演示文稿和文档时的效率。 PPT大珩助手 这是一款专门为Microsoft PowerPoint设计的插件。它提供了多种功能,例如素材…

盲人社区生活支持体系:织就一张温暖的网

在当今社会,构建一个全面、包容的盲人社区生活支持体系成为了推动社会进步、保障残障人士权益的重要议题。随着科技的不断革新,一款名为“蝙蝠避障”的辅助软件走进了盲人的日常生活,它如同一位无形的向导,通过实时避障与拍照识别…

element DatePicker 日期选择器设置禁用未来日期,时间范围为60天

需要用到 DatePicker 里面的 picker-options 方法 disabledDate onPick方法 <el-date-pickerv-model"form.xxxx"type"daterange"value-format"yyyy-MM-dd":clearable"false":picker-options"pickerOptions"start-placeho…

运行Android项目时,提示错误: 程序包javax.annotation.processing不存在

今天在运行项目时提示错误: 错误: 程序包javax.annotation.processing不存在 import javax.annotation.processing.Generated; 最后是修改了Android Studio的JDK的路径修改为你安装的JDK路径&#xff0c;完成的修复&#xff1a;

5.23 Linux中超时检测方式+模拟面试

1.IO多路复用的原理&#xff1f; IO多路复用使得一个或少量线程资源处理多个连接的IO事件的技术。对于要处理的多个阻塞的IO操作&#xff0c;建立集合并存储它们的文件描述符&#xff0c;利用单个阻塞函数去监控集合中文件描述符事件到达的情况&#xff0c;&#xff08;如果到…

cPanel中如何移除之前添加的域名

我这边想要移除我之前绑定到主机的域名&#xff0c;但是不知道如何在主机上面进行移除&#xff0c;由于我使用的Hostease的Linux虚拟主机产品默认带普通用户权限的cPanel面板&#xff0c;但是不知道如何在cPanel上操作移除域名&#xff0c;因为也是对于Hostease主机产品不是很了…

Linux磁盘高级操作

RAID RAID存储系统是一种数据存储虚拟化技术&#xff0c;它将多个物理磁盘驱动器组合成一个或多个逻辑单元&#xff0c;以提供数据冗余和/或提高性能。 1. RAID 0 无奇偶校验与冗余&#xff08;磁盘容错&#xff09;的条带存储&#xff08;带区卷/条带卷&#xff09; 由两块…

基于windows通过kind部署轻量级便携式k8s集群

感谢老师的视频教程&#xff1a; 基于windows通过kind部署轻量级便携式k8s集群 wsl windows下的linux wsl --set-default-version 2 wsl --help wsl --list --online wsl --install -d Ubuntu wsl -l -v &#xff08;看看版本是不是2&#xff0c;否则docker那边识别不到&…

从零开始:在线教育系统源码与知识付费小程序开发指南

开发一个功能完善的在线教育系统和知识付费小程序并不是一件简单的事情。今天&#xff0c;小编将从零开始&#xff0c;详细介绍如何开发在线教育系统和知识付费小程序。 一、需求分析与系统设计 在开始编写代码之前&#xff0c;首先需要进行需求分析和系统设计。这一步非常关键…

汽车摄像头智能画质增强解决方案,高品质车载视觉系统

在数字化与智能化浪潮的推动下&#xff0c;汽车行业正经历着一场前所未有的技术革命。其中&#xff0c;车载摄像头作为智能驾驶与安防监控的核心部件&#xff0c;其画质的高低直接关系到行车安全与驾驶体验。美摄科技&#xff0c;作为行业领先的智能图像技术解决方案提供商&…

机器学习圣经PRML作者Bishop推出重磅教材

图1 书籍《Pattern Recognition and Machine Learning》 只要学人工智能的人&#xff0c;必然学机器学习。 只要学机器学习的人&#xff0c;必然看PRML。 PRML为何物&#xff1f; PRML全名《Pattern Recognition and Machine Learning》&#xff0c;一部机器学习领域的内功…

数据库系列之MySQL数据库中内存使用分析

在实际系统环境中&#xff0c;MySQL实例的内存使用随着业务的增长缓慢增长&#xff0c;有些时候并没有及时的释放。本文简要介绍下MySQL数据库中和内存相关的配置&#xff0c;以及分析内存的实际使用情况&#xff0c;以进行应急和调优处理。 1、MySQL内存结构 在MySQL中内存的…

MySQL索引和视图

MySQL索引和视图是关系型数据库MySQL中的两个重要概念。索引用于优化数据库的查询性能&#xff0c;而视图用于提供一个逻辑上的表结构&#xff0c;方便用户查询和操作数据。 索引是一种数据结构&#xff0c;可以加速对数据库表中的数据进行查询的速度。通过创建索引&#xff0…

激光雷达SLAM算法综述

大家好呀&#xff0c;我是一个SLAM方向的在读博士&#xff0c;深知SLAM学习过程一路走来的坎坷&#xff0c;也十分感谢各位大佬的优质文章和源码。随着知识的越来越多&#xff0c;越来越细&#xff0c;我准备整理一个自己的激光SLAM学习笔记专栏&#xff0c;从0带大家快速上手激…

BEVFusion的相机工作流中,图像编码之后FPN+ADP网络的作用

在BEVFusion的相机工作流中&#xff0c;图像编码之后会经过一个FPNADP的网络,那么这个结构的作用是什么呢 FPN大家都很熟悉&#xff0c;就是特征金字塔。但是这里还是贴一些来自GPT的废话 在Bird’s Eye View (BEV) 算法中使用的特征金字塔网络&#xff08;FPN, Feature Pyrami…

视频监控管理平台LntonCVS监控视频汇聚融合云平台主要功能应用场景介绍

随着网络技术的不断发展和万物互联时代的到来&#xff0c;视频融合在一些系统集成项目及综合管理应用中变得日益重要。本文以LntonCVS视频融合云平台为案例&#xff0c;探讨视频融合的对象及其应用场景。 1. 视频监控设备 视频监控摄像设备是各种视频应用项目的基础部分。在视…

【Andoird开发】android获取蓝牙权限,beacon,android-beacon-library

iBeacon 最先是苹果的技术&#xff0c;使用android-beacon-library包可以在android上开发iBeacon 技术。 iBeacon的发明意义重大。它是一种基于蓝牙低功耗&#xff08;Bluetooth Low Energy, BLE&#xff09;技术的定位系统&#xff0c;通过向周围发送信号来标识其位置。这项技…

【NumPy】关于numpy.arange()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

AI--构建检索增强生成 (RAG) 应用程序

LLM 所实现的最强大的应用之一是复杂的问答 (Q&A) 聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 (RAG) 的技术。 典型的 RAG 应用程序有两个主要组件 索引&#xff1a;从源中提取数据并对其进行索引的管道。这通常在线下…

实时3D云渲染与汽车虚拟仿真的联系

汽车虚拟仿真是指利用计算机技术对汽车进行全方位的模拟&#xff0c;包括车身结构、发动机、转向系统、悬挂系统、制动系统等各个方面&#xff0c;以达到实现汽车设计验证、性能分析、安全评估和驾驶模拟等目的的一种技术手段。现如今&#xff0c;越来越多的汽车制造商采用虚拟…