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

news2024/11/24 0:58:12

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:

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

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

相关文章

java技术:nacos

目录 一、docker安装 1、创建一个nacos 2、复制配置信息出来(方便修改配置文件) 3、删除nacos 4、修改配置文件(主要是一下几个) 6、创建数据库 nacos 7、重启nacos mysql 一、docker安装 1、创建一个nacos docker run …

添砖Java之路(其七)——static

目录 static: 1.被类的所有对象所共享(和c有点像) 2.多了一种调用方法,可以通过类名调用 3.随着类的加载而加载,是优先于对象的存在。 工具类: 为什么主类的方法要加static: 理解 public static void main&#…

你还在手动加好友?试试这款神器,释放双手自动添加!

你还在手动添加微信好友吗?尤其是在忙碌的时候,手动加好友不仅费时又很容易出错。试试这个自动添加好友神器——个微管理系统,释放你的双手,轻松拓展好友列表! 1、多号同时登录在线 系统支持多个微信号同时登录在线&…

USB-OTG:1、OTG原理介绍

目录 🍅点击这里查看所有博文 随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记…

运维别卷系列 - 云原生监控平台 之 05.prometheus alertManager 实践

文章目录 [toc]Alertmanager 简介Alertmanager 实现的核心概念GroupingInhibitionSilencesClient behaviorHigh Availability Alertmanager 配置文件globaltemplatesrouteinhibit_rulesreceivers Alertmanager 部署创建 cm创建 svc创建 stsPrometheus 配置告警Prometheus 配置文…

010.理解异步性

异步消息传递是响应式系统的一个关键特性。但到底是什么异步性,为什么它对响应式应用程序如此重要?我们的人生注定在许多异步任务中。你可能没有意识到,但你的日常活动如果它们本质上不是异步的,那就太烦人了。要理解什么是异步,…

评价决策类-层次分析法

师从江北 问题引出 归一化处理:指标的数组[a b c]归一化处理得到[a/(abc),b/(abc),c/(abc)] 因为每个指标的重要性不同,所以要加上一个权重 如何科学的确定权重,就要用到层次分析法(AHP) 模型原理 建立递阶层次结构模…

利用一下Chat-GPT写两段处理字符串的简单样例ABAP程序。这样可以大大提高工作效率。Chat-GPT的能力真是让人震撼。

我让Caht-GPT写两段ABAP 程序,第一段程序要求如下: 判读字符串里面是否含有特殊字符,这里说的特殊字符不包括键盘上能够输入的字符,如果有这样的特殊字符则输出来。 DATA: lv_string TYPE string VALUE 你的字符串,lv_result TYP…

数据结构——二叉树知识点详解!

引言:本篇博客将详细介绍到数据结构中的又一位大将——二叉树。它也是我们目前学到的第一个非线性的数据结构。并且本章将学到的概念居多,希望大家可以理解并牢记。 更多有关C语言和数据结构知识详解可前往个人主页:计信猫 目录 一&#xff0…

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

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

微信小程序快速开发-基础内容(内容真的又多又干货)

目录 实现横向布局效果 实现滚动效果 实现轮播图效果 实现文本长按选中复制效果 渲染 HTML 标签 按钮组件的使用效果 图片组件的使用效果 Mustache 语法 动态绑定内容(定义变量,渲染变量) 动态绑定属性(将属性定义为变量…

2024年中国国际厨卫家居展览会(上海KIB厨卫展)

中国国际厨卫家居博览会(KIB)由中国五金制品协会、中国国际贸易促进委员会轻工行业分会、北京奥维云网大数据科技股份有限公司主办。从最初的“中国国际橱柜、厨房卫浴产品与技术博览会(CIKB)”,到2001年与中国国际五金展&#xf…

LSTM与GAN创新结合!模型性能起飞,准确率超98%

今天来聊一个深度学习领域非常具有创新性的研究方向:LSTM结合GAN。 LSTM擅长处理和记忆长期的时间依赖关系,而GAN可以学习复杂的数据分布并生成逼真的数据样本。通过充分结合两者的优势,我们可以增强模型对复杂数据的处理能力,提…

scanf读取标准输入

内容 scanf函数的原理 多种数据类型混合输入 常用的数据输入/输出函数 程序员可以给程序输入数据,程序处理后会返回一个输出。C语言通过函数库读取标准输入,然后通过对应函数处理将结果打印到屏幕上,printf函数可以将结果打印到屏幕上。下…

英语学习笔记14——What color‘s your ... ?

What color’s your … ? 你的 …… 是什么颜色的? 词汇 Vocabulary case n. 箱子【封闭的】 相关:box n. 箱子【开口的】    bookcase n. 书架 补充:case n. 案件,案例 口语:It’s a small case.    小意思&…

稚晖君独家撰文:具身智能即将为通用机器人补全最后一块拼图

具身智能新纪元。 *本文为稚晖君独家供稿,「甲子光年」经智元机器人授权发布。稚晖君本名彭志辉,先后任职OPPO、华为,现为智元机器人CTO、首席架构师。 在ChatGPT之后,又一个大模型概念火了——具身智能(Embodied AI)。 在学术界,图灵奖得主、上海期智研究院院长姚期…

【数据结构】堆(超详细)

文章目录 前言堆的概念及结构堆的实现堆的向下调整算法(建小堆为例)堆的向上调整算法(建小堆为例)堆的初始化销毁堆堆的插入堆的删除(规定删堆顶的数据)取堆顶元素判断堆是否为空获取堆的个数 完整代码(包括测试代码&a…

解决kali Linux2024无法获取动态IPv4地址(DHCP)解决方案

用root用户启动终端 进入根目录,选择配置文件 cd到根目录下/../etc/network找到interfaces文件 编辑interfaces文件 vi interfaces,编辑interfaces文件 输入如下命令 打开虚拟网络编辑器 选择虚拟机选项卡,编辑,打开虚拟网络编…

【Linux 网络】网络基础(二)(应用层协议:HTTP、HTTPS)-- 详解

我们程序员写的一个个解决我们实际问题,满足我们日常需求的网络程序,都是在应用层。 前面写的套接字接口都是传输层经过对 UDP 和 TCP 数据发送能力的包装,以文件的形式呈现给我们,让我们可以进行应用层编程。换而言之&#xff0c…

50.乐理基础-拍号的类型-混合拍子

混合拍子的定义: 1.由不同的单拍子组合起来的,如图1。 2.因为组合顺序有多种可能,所以次强拍的位置也有多种可能,如图3。 图1:四二拍是单拍子,四三拍也是单拍子,四二拍 与 四三拍就是 不同的单拍…