【记录】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:

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

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

相关文章

【Qt】widget圆角,styleSheet

仅配置widget,不设置其子组件。 #widget{background-color: rgba(255, 255, 255, 100); border-top-left-radius: 20; border-top-right-radius: 20; border-bottom-left-radius: 20; border-bottom-right-radius: 20;}

汇舟问卷:5年专业经验,海外渠道查无需烦恼!

大家好,我是汇舟问卷,拥有五年的行业经验,专注于海外问卷渠道查。 在海外问卷渠道查领域,我们拥有专业的知识和经验。无需为购买大量海外邮箱而烦恼,更无需担忧账号被封禁的风险。我们提供全天候24小时的服务&#xf…

USB-OTG:1、OTG原理介绍

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

Redis实战—验证码登录注册

目录 基于Session Controller层 Service层 ServiceImpl层 ​编辑校验登录状态 ThreadLocal 登录拦截器 添加拦截器到Config Controller层实现 基于Redis ServiceImpl 新增刷新拦截器 添加拦截器到Config 基于Session Controller层 /*** 发送手机验证码*/PostMappi…

如何搭建本地DNS服务器

一、搭建本地DNS服务器 1.初始化设置 systemctl disable --now firewalld.service #关闭防火墙,并开机不自启 setenforce 0 #临时关闭selinux防火墙 vim /etc/selinux/config …

GPU学习记一下线程分组相关

在compute的时候,是要dispatch一个数量的代表分了多少块任务集,dispatch的块内部也是有一个数量的,那么这些值怎么取的呢 内部,N卡32 外面dispatch的数量就是all/32 然后细说这个值 这有一个叫core的东西,就是相当于th…

Autosar架构

蓝框那种叫component,绿框的叫function cluster。 接口 有三种接口,RTE跟SWC之间链接的叫Autosar Interface,RTE跟BSW的Components链接是Standardized Interface,RTE跟BSW的services链接的是Standardized Autosar Interface。 St…

详解xlsxwriter 操作Excel的常用API

我们知道可以通过pandas 对excel 中的数据进行处理分析,但是pandas本身对格式化数据方面提供了很少的支持,如果我们想对pandas进行数据分析后的数据进行格式化相关操作,我们可以使用xlsxwriter,本文就对xlsxwriter的常见excel格式…

场景文本检测识别学习 day09(SSM、S4、Mamba、S6)

SSM(State Space Model) SSM是一个针对连续函数的模型,即输入是连续函数,输出也是连续函数。上图为状态方程和输出方程,其中h(t)是当前时刻的状态,x(t)是当前时刻的输入,h’(t)是下一个时刻的状…

AI绘画做图在线对话二合一源码系统 直接输入文字就可以在线生成视频 带完整的安装包以及搭建教程

系统概述 AI绘画做图在线对话二合一系统是一款集成了AI绘画、在线对话和视频生成功能的综合性软件。用户只需在系统中输入文字描述,系统便能根据描述内容自动生成相应的绘画作品和对话内容,进而将这些元素组合成一部完整的视频。该系统不仅支持多种绘画…

mybatis-plus-ui代码生成器

mybatis-plus-generator-ui 提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity,Mapper,Mapper.xml,Service,Controller等 ,可以自定义模板以及各类输出参数,也可通过SQL查询语句直接生成代码。 使用方法 引入mave…

webpack优化构建速度示例-合理配置loader的include exclude:

实际上,babel-loader 在 Webpack 配置中默认并不包含 exclude 和 include 选项的默认值,通常,为了优化构建性能,开发者会显式地设置 exclude 和 include 选项,以便 babel-loader 只处理必要的文件。 src/index.js impo…