【记录】docker笔记(五):Docker网络-Network Namespace

Docker 网络理论基础

要了解docker网络,先了解如下基础概念。

Network Namespace

        Docker 网络的底层原理是 Linux Network Namespace ,所以对于 Linux Network
Namespace 的理解对 Docker 网络底层原理的理解非常重要。

简介

        Network Namespace 是 Linux 内核提供的用于实现网络虚拟化的重要功能,它能创建多
个隔离的网络空间,每个独立的网络空间内的防火墙、网卡、路由表、邻居表、协议栈都是
独立的。不管是虚拟机还是容器,当运行在独立的命名空间时,就像是一台单独的主机一样

Namespace连接案例

        通过手工方式创建两个 Network Namespace,并最终让它们相互连通,即可以通过 ping 命令测试成功。通过案例更好地去理解 Docker 网络的底层原理。

        前置条件:在虚拟机中准备好linux环境。

      

创建两个命名空间

        分别创建两个命名空间netns(Network Namespace) ns1 与 ns2,查看是否创建成功

ip netns add ns1
ip netns add ns2
ip netns list

        因为每个网络空间都是独立的,所以每个 Network Namespace 都具有一个回环网络适配器 lo。查看刚刚创建的两个netns的ip信息。

ip netns exec ns1 ip addr
ip netns exec ns2 ip addr
创建网络接口 veth pair

        如果要让两个命名空间连通,则需要用到虚拟设备接口技术 veth pair。该技术需要一对网络接口分别置于两个命名空间中。

        以下命令用于创建一对网络接口 veth-ns1 与 veth-ns2。

ip link add veth-ns1 type veth peer name veth-ns2

        此时通过 ip link 查看当前的网络地址情况,可以看到新增了两个相互连通的 veth pair,它们都具有 MAC 地址,但它们的状态都是 DOWN,且都不具有 IP。

命名空间分配网络接口

        通过 ip link set 命令,将这两个网络接口分别分配给两个命名空间。

ip link set veth-ns1 netns ns1
ip link set veth-ns2 netns ns2

        此时分别在两个命名空间中执行 ip link 命令,可以查看到,它们中分别新增了前面指定的一个网络接口。

        此时再在主机中查看 ip link,发现原来的那两个网络接口已经消失了。

网络接口分配 IP

        前面创建的两个网络接口是没有 IP 的。下面要通过 ip netns exec 命令,为每个指定的命名空间执行 IP 添加命令 ip addr add [ip] dev [网络接口]。

ip netns exec ns1 ip addr add 192.168.1.1/24 dev veth-ns1
ip netns exec ns2 ip addr add 192.168.1.2/24 dev veth-ns2

        分别查看两个ns的ip信息。

ip netns exec ns1 ip addr
ip netns exec ns2 ip addr

启动接口

上图可以看到两个接口虽然分配了IP,但是状态依旧是DOWN。下面要通过 ip link set dev [接口] up 来启动指定的网络接口。

[root@localhost ~]# ip netns exec ns1 ip link set dev veth-ns1 up
[root@localhost ~]# ip netns exec ns2 ip link set dev veth-ns2 up

再查看两接口的状态,已经变为了 UP。

测试ping
ip netns exec ns1 ping 192.168.1.2
ip netns exec ns2 ping 192.168.1.1

总结

        通过上述内容,应该可以更好的理解Network Namespace。个人认为可以理解从网络上讲,一个Network Namespace就是一个独立主机。

CNM

        Docker 网络架构由三个主要部分构成:CNM、Libnetwork 与 Driver。

        CNM,Container Network Model,容器网络模型,其是一种网络连接的解决方案,是一种设计规范、设计标准,其规定了 Docker 网络的基础组成要素。

        CNM 中定义了三个基本要素:沙盒 Sandbox,终端 Endpoint 与网络 Network。

  1. 沙盒:一个独立的网络栈,其中包括以太网接口、端口号、路由表、DNS 配置等。Linux Network Namespace 是沙盒的标准实现。
  2. 终端:虚拟网络接口,主要负责创建连接,即将沙盒连接到网络上。一个终端只能接入某一个网络。
  3. 网络:802.1d 网桥的软件实现,是需要交互的终端的集合。

Libnetwork

        CNM 是设计规范,而 Libnetwork 是开源的、由 Go 语言编写的、跨平台的 CNM 的标准实现。

        Libnetwork 除了实现了 CNM 的三个组件,还实现了本地服务发现、容器负载均衡,以及网络控制层与管理层功能。

Driver

        每种不同的网络类型都有对应的不同的底层 Driver,这些 Driver 负责在主机上真正实现需要的网络功能,例如创建 veth pair 设备等。

        不过,无论哪种网络类型,其工作方式都是类似的。通过调用 Docker 引擎的 API 发出请求,然后由 Libnetwork 做出框架性的处理,然后将请求转发给相应的 Driver。

        通过 docker network ls 命令可以查看当前主机所连接的网络及网络类型。

        可以看到docker中有如下driver:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode328奇偶链表

题目描述 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。请注意,偶数组和奇数组…

node.js的Express框架的介绍 与 安装详细教程

一、Express框架介绍 (1)Express定义: Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。 使用 Express 可以快速地搭建一个完整功能的网站。 &#xff08…

DDoS防护的市场需求将不断增长,DDoS高防IP显得各位重要

分布式拒绝服务(DDoS)攻击是一种恶意攻击,它借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的为例。DDoS攻击通过大量合法的请求占用大…

19个测试⽤例⽣成的AI⼯具!卷起来!

在不断发展的软件开发领域中,确保应⽤程序的可靠性和功能性⾄关重要。 随着软件系统复杂性的增加,有效测试⽅法的需求也在上升。 传统的测试⽤例⽣成⽅法通常⽆法满⾜快速开发周期和复杂代码库的需求。 随着进⼊⼈⼯智能(AI)时…

treejs 3D+echart实现三维旋转炫酷导航网页

treejs 3Dechart实现三维旋转炫酷导航网页https://www.bilibili.com/video/BV1SM4m1C7ki/

行为驱动开源免费接口测试框架:karate

什么是行为驱动测试: 行为驱动测试(Behavior-Driven Testing,简称 BDT)是一种测试方法,旨在通过描述系统行为和功能来编写测试用例。BDT的重点是从用户的角度出发,描述系统应该如何行为,而不是专…

Python代码:四、读入整数数字

1、题目 在学会读入字符串以后,小白还想要读入整数,请你帮他使用input函数读入数字并输出数字与变量类型。 2、代码 import sysa int(input()) print(a, type(a), sep"\n") 3、在sublime运行结果

亚阈值电流镜

相同电流情况下,由于亚阈值区的gm较大,造成由于阈值电压Vth的失配造成的失配会更大,所以要规避过大的gm,选取较大的过驱动电压。 相同电流情况下,W/L的尺寸选的较小一点,或者说L一定时,W不要取得过大。 Q:Vgs一定的情况下,特别小,几乎小于Vth,一定是亚阈值电流镜吗。…

数据结构之栈与队列

一.栈 1.定义:一种线性表,只允许在固定的一端进行删除和插入数据的操作,该端叫栈底,另一端叫栈顶 2.特点:先进后出 注:栈中元素出栈是一对多的(他虽然满足先进后出但是我们可以在pop数据前先获取栈顶元素…

React 第三十二章 虚拟DOM

面试题:什么是虚拟DOM?其优点有哪些? 标准且浅显的答案 虚拟dom本质上就是一个普通的 JS 对象,用于描述视图的界面结构 虚拟 DOM 最早是由 React 团队提出来的,因此 React 团队在对虚拟 DOM 的定义上面有绝对的话语权。…

ASP.NET在线二手交易系统的设计与实现

摘 要 随着当今社会信息技术的进步,基于互联网的各种应用日益受到了人们的重视,二手商品的重新利用也逐渐被人们关注,二手交易系统就在这种形势下产生了,它利用网络,改变了人们的购物方式。 本文是基于现代二手交易…

醉了,面个功能测试,还问我Python装饰器

Python 装饰器是个强大的工具,可帮你生成整洁、可重用和可维护的代码。某种意义上说,会不会用装饰器是区分新手和老鸟的重要标志。如果你不熟悉装饰器,你可以将它们视为将函数作为输入并在不改变其主要用途的情况下扩展其功能的函数。装饰器可…

Git 分支命令操作详解

目录 1、分支的特点 2、分支常用操作 3、分支的使用 3.1、查看分支 3.2、创建分支 3.3、修改分支 3.4、切换分支 3.5、合并分支 3.6、产生冲突 3.7、解决冲突 3.8、创建分支和切换分支说明 1、分支的特点 同时并行推进多个功能开发,提高开发效率。各个分…

[ROS 系列学习教程] 建模与仿真 - URDF 建模实践

ROS 系列学习教程(总目录) 本文目录 一、机器人结构组成二、新建功能包三、编写launch文件四、创建底盘五、添加轮子六、添加其他部件七、解决部分实体位于地面以下的问题 前文介绍了URDF建模与URDF语法,接下来介绍怎么使用URDF从零构建一个机器人模型并在rviz中显示…

网络爬虫安全:90后小伙,用软件非法搬运他人原创视频被判刑

目录 违法视频搬运软件是网络爬虫 如何发现偷盗视频的爬虫? 拦截违法网络爬虫 央视《今日说法》栏目近日报道了一名程序员开发非法视频搬运软件获利超700多万,最终获刑的案例。 国内某知名短视频平台报警称,有人在网络上售卖一款视频搬运…

2024年最新最全面的软件测试面试题(四)

1、在项目中如何保证软件质量? 项目质量不仅仅是某个人或某个团队来保障的,而是整个团队一起努力的结果,因此,在公司级别需要 有一个规范的项目流程。 产品,保证迭代过程中的产品逻辑,对于可能的兼容,升…

C++列表实现

文章目录 一、listView相关内容主要思想实例全部代码 二、QTreeView 一、listView 相关内容 QAbstractItemModel:一个抽象的类,为数据项模型提供抽象的接口,常见的的数据模型列如:QStringListModel,QStandardItemMode,QDirModel…

(实测验证)Gitee代码托管尝试(一)——克隆/下载

一、登录 Gitee(码云)代码托管平台: Gitee - 基于 Git 的代码托管和研发协作平台 新建个人账户如下: 二、SSH 公钥设置 1、在git安装目录打开“git-cmd.exe”; 2、通过命令 ssh-keygen 生成 SSH Key: ssh-keygen …

社区服务用工具建立与居民的强关系

在数字化时代的浪潮下,社区服务不再局限于传统的面对面交流模式,而是借助互联网医疗健康服务应用,尤其是智慧康养服务平台,构建起了与居民之间更为紧密、便捷的联系。这种新型的社区服务模式,不仅提升了服务效率&#…

PDK安装及简介

目录 PDK简介 pdk安装 Standard Cell Library简介 IO Library简介 PDK简介 PDK:全称Process Design Kit,是工艺设计工具包的缩写,是制造和设计之间的沟通桥梁,是模拟电路设计的起始点。 具体来说,PDK是代工厂(FAB…