浅谈容器网络

news2024/11/20 15:27:39

1.什么是容器网络

容器网络是一种新兴的应用程序沙箱机制,用于家庭桌面和网络规模的 企业网络 解决方案,其概念与虚拟机类似。容器内部与主机和所有其他容器隔离的是一个功能齐全的 Linux 环境,具有自己的用户、文件系统、进程和网络堆栈。容器内的所有应用程序都只能访问或修改容器内可用的文件或资源。

可以同时运行多个容器,每个容器都有自己的安装和依赖项。当应用程序的较新版本可能需要升级依赖项,这可能会导致与服务器上运行的其他应用程序依赖项发生冲突时,这特别有用。与虚拟机不同,容器共享主机资源,而不是完全模拟计算机上的所有硬件,这使得容器比虚拟机更小、更快,并减少了开销。特别是在网络规模应用程序的背景下,容器被设计为虚拟机的替代品,作为微服务架构的部署平台。

容器还具有可移植性的特点,例如Docker这个容器引擎,允许开发者将一个容器及其所有依赖项打包在一起。然后可以下载该容器包。下载后,容器可以立即在主机上运行。

容器网络允许容器与其他容器或主机通信以共享资源和数据。

现代容器网络旨在标准化和优化容器数据流,创建隔离区域,允许大量容器以高效、安全的方式进行通信。已经提出了多个标准来管理容器网络,包括容器网络模型(CNM)和容器网络接口(CNI)。

Docker 和 Kubernetes 等流行的容器平台使用以下网络模型:

  • 无 –最简单的网络模式是环回接口,其中容器不与外部网络通信。
  • 网桥 –内部主机网络,允许同一主机上的容器之间进行通信。
  • 主机 –允许容器与主机共享其网络命名空间,从而实现高速网络。
  • 覆盖 –确保连接到两个不同覆盖网络的容器彼此隔离,并且无法通过本地网桥进行通信。
  • 底层 –将主机接口公开给主机上运行的虚拟机或容器。

2.容器网络如何工作

容器网络是一种虚拟化形式,其概念与虚拟机 (VM) 类似,但也有显着差异。首先,容器方法是操作系统虚拟化的一种形式,而虚拟机是硬件虚拟化的一种形式。

在虚拟机管理程序上运行的每个虚拟机都有自己的操作系统、应用程序和库,并且能够封装持久数据、安装新操作系统、使用与主机不同的文件系统或使用不同的内核版本。

相反,容器是镜像的“运行实例”,是短暂的操作系统虚拟化,它会旋转起来执行一些任务,然后被删除和遗忘。由于容器的短暂性,与需要更大地址空间的虚拟机相比,系统用户运行的容器实例要多得多。

为了创建隔离,容器依赖于两个 Linux 内核功能:命名空间和 cgroup。为了让容器拥有自己的系统视图,并将其与其他资源隔离,为每个资源创建一个命名空间,并且不与其余系统共享。然后,控制组 (Cgroup) 用于监视和限制系统资源,如 CPU、内存、磁盘 I/O、网络等。

3.容器网络的好处

容器正在迅速被采用,取代虚拟机作为微服务平台。

容器有几个主要优点:

  • 与现有工作负载一起运行容器化应用程序: 机器可以在同一基础设施上与传统虚拟机一起运行容器化应用程序,从而提供灵活性和速度。
  • 将可移植性与安全性、可见性和管理相结合: 由于容器的固有设计,它可以通过沙箱、主机资源透明度、任务管理和执行环境可移植性来实现更高的安全性。
  • 轻松利用现有的基础设施和规模: 使用现有的 SDDC 可以避免对基础设施进行成本高昂且耗时的重新架构,从而导致孤岛 - 当不同部门在同一组织内维护自己的 IT 基础设施时,就会出现孤岛。由于每个部门的技术配置存在差异,这种“筒仓效应”在实施组织范围内的 IT 策略和升级时会产生问题。重新集成孤岛是一个成本高昂且耗时的过程,可以通过容器网络来避免。
  • 为开发人员提供与 Docker 兼容的接口: 已经熟悉 Docker 的开发人员可以通过与 Docker 兼容的接口在容器中开发应用程序,然后通过自助管理门户或 UI 进行配置。

4.容器网络模型

容器网络模型(CNM)是Docker提出的一个标准。它已被许多项目(例如 libnetwork)采用,并提供与各种产品的集成,包括Project Calico(Calico 开源)、Cisco Contiv、开放虚拟网络 (OVN)、VMware、Weave 和 Kuryr。

以下是通过实施 CNM 实现的 libnetwork 的主要功能:

  • 网络沙箱 –包含容器网络配置的隔离环境。它作为容器内的网络堆栈工作。
  • 端点 –成对构建的网络接口。它允许您将接口的一端放置在网络沙箱中,另一端放置在指定网络中。它确保端点仅加入一个网络,而多个端点存在于一个网络沙箱中。
  • 网络 –允许相互通信的唯一可识别端点的集合。
  • 用户定义的标签 – CNM 允许您使用标签标志定义标签。这些标签作为元数据在驱动程序和 libnetwork 之间传递。标签使运行时能够通知驱动程序的行为。

 图 1:Libnetwork 提供 Docker 守护进程和网络驱动程序之间的接口。

Libnetwork 是 CNM 规范的规范实现。Libnetwork 提供了 Docker 守护进程和网络驱动程序之间的接口。网络控制器负责将驱动程序与网络配对。每个驱动程序负责管理其拥有的网络,包括向该网络提供的服务,例如 IPAM。每个网络一个驱动程序,多个驱动程序可以与连接到多个网络的容器同时使用。驱动程序被定义为本地驱动程序(内置于 libnetwork 或支持 Docker)或远程驱动程序(第三方插件)。本机驱动程序有 none、bridge、overlay 和 MACvlan。远程驱动程序可以带来任意数量的功能。驱动程序也被定义为具有本地作用域(单主机)或全局作用域(多主机)。

5.容器网络接口

容器网络接口(CNI)是CoreOS提出的标准。它是作为一个最小规范创建的,作为网络插件和容器运行时之间的简单契约。CNI 已被许多项目采用,包括 Apache Mesos、Kubernetes 和 rkt。

以下是 CNI 的主要特征:

  • CNI 使用 JSON 模式来定义 CNI 网络插件所需的输入和输出。
  • CNI 使您能够使用一个容器运行多个插件,该容器连接由不同插件驱动的网络。
  • CNI 在配置 JSON 文件中描述网络,并在调用 CNI 插件后将它们实例化为新的命名空间。
  • CNI 插件可以支持两个命令,用于向网络添加和删除容器网络接口。

图 2:CNI 是向网络添加和删除容器的最小规范。

CNI 是作为一个最小规范创建的,与许多网络供应商工程师一起构建,作为容器运行时和网络插件之间的简单契约。JSON 模式定义了 CNI 网络插件的预期输入和输出。

多个插件可以同时运行,容器加入由不同插件驱动的网络。网络在配置文件中以 JSON 格式进行描述,并在调用 CNI 插件时实例化为新的命名空间。CNI 插件支持两个命令来向网络添加和删除容器网络接口。Add 在创建容器时由容器运行时调用。当删除容器实例时,容器运行时会调用删除。

6.容器网络的类型

目前使用的容器网络有五种类型:它们的特征集中在每个容器的 IP 与每个 Pod 的 IP 模型以及需要网络地址转换 (NAT) 与不需要转换的情况。

  • None: 容器接收网络堆栈;然而,它缺乏外部连接。此模式对于测试容器、为以后的网络连接暂存容器以及分配给不需要外部通信的容器非常有用。
  • Bridge: 在内部主机网络上桥接的容器,并允许与同一主机上的其他容器进行通信。无法从主机外部访问容器。桥接网络是 Docker 容器的默认网络。
  • Host: 此配置允许创建的容器共享主机的网络命名空间,从而授予容器对主机所有网络接口的访问权限。外部网络配置最不复杂,这种类型由于共享网络接口而容易发生端口冲突。
  • Underlay:  Underlay 直接向主机上运行的容器开放主机接口,并且无需端口映射,使其比桥接器更高效。
  • Overlay: 覆盖使用网络隧道在主机之间进行通信,允许容器在托管在不同主机上时就像在同一台计算机上一样。

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

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

相关文章

跨部门协作如何实现高效无障碍?强推这6个协同办公工具!

在现代职场中,跨部门协作变得越来越常见。不同部门之间的协作能力直接影响到工作效率和协同成果。因此,寻找一款能够有效促进跨部门协作的工具是非常重要的。下面向大家推荐6款可以跨部门协作的工具,并从不同的职场场景进行介绍。 1、飞项 …

P1065 [NOIP2006 提高组] 作业调度方案

题目描述 我们现在要利用 m m m 台机器加工 n n n 个工件,每个工件都有 m m m 道工序,每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。 每个工件的每个工序称为一个操作,我们用记号 j-k 表示一个操作&…

C#_GDI+ 绘图编程入门

官网提供相关API GDI 基本图形功能_drawing 高级二维和矢量图形功能_drawing2D GDI 图像处理功能_Imaging GDI 排版功能_text Windows 窗体应用程序提供打印功能_Printing 像素 构成图像的最小单位就是像素;屏幕上显示不管是位图或者矢量图,当描述…

I2C通信协议

I2C总线接口 I2C(IIC,Inter一Integrated Circuit)总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。 主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址…

1448. 统计二叉树中好节点的数目(C++题解)

1448. 统计二叉树中好节点的数目 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 示例 1: 输入:root [3,1,4,3,nu…

门店数字化系统怎么做?

​如果门店只做线下生意,相信前几年的经历已经充分说明一旦客户不上门、生意就玩完;如果门店只做线上生意,无数平台的血泪教训也表明哪怕砸钱也无法跟大平台抗衡;因此,线上线下深度融合已经成为实体行业的必然趋势&…

解决 ‘bee‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

最近在学习go 中的beego框架,在下载依赖 之后执行bee new projectname 后出现了一个问题: 网上教程说是缺少环境变量,又说什么需要自己收到beego的src文件夹下编译main.go 忙活了半天,最后都以失败告终; 解决方案是: go install github.com/beego/bee/v2master执行bee ve…

【2023全网最全最火教程】WebSocket协议测试实战

当涉及到WebSocket协议测试时,有几个关键方面需要考虑。在本文中,我们将探讨如何使用Python编写WebSocket测试,并使用一些常见的工具和库来简化测试过程。 1、什么是WebSocket协议? WebSocket是一种在客户端和服务器之间提供双向…

爬虫逆向实战(二十一)-- 某某点集登录与获取数据

登录 一、数据接口分析 主页地址:某某点集 1、抓包 通过抓包可以发现登录接口是phonePwdLogin 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现有pwd和sig两个加密参数 请求头是否加密? 无响应是否加密&#x…

Java并发工具类

JDK并发包中常用并发工具类: CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段; Exchanger工具类则提供了在线程间交换数据的一种手段。 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成…

LTK5313功放芯片

LTK5313 是一款内置自适应升压F类音频功率放大芯片,具有AGC防破音功能、AB/D类模式切换、自适应、超低底噪、超低EMI。自适应升压在输出幅度较小时升压电路不工作,功放直接由电源供电,当输出较大时内部自动启动升压电路,功放供电…

每天一道leetcode:542. 01 矩阵(图论中等广度优先遍历)

今日份题目: 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例1 输入:mat [[0,0,0],[0,1,0],[0,0,0]] 输出&#xff…

如何从“监控”到“可观测性”?

什么是可观测性? 可观测性(Observability)是一种通过系统产生的输出数据(如日志、指标和链路追踪)来衡量当前系统运行状态的能力,其源于现代应用系统的复杂性和分布式架构,这些应用系统往往由大…

VUE之jspreadsheet电子excel表格动态高度设置

问题:excel电子表格在不同屏幕大小下横向滚动条会被遮挡 排查原因:由于excel高度固定导致 解决方法:设计页面较多,所以封装公共方法 步骤: 1.使用混入封装动态设置excel高度方法: const mixinJexcel …

达梦数据库分区表介绍

概述 本文将对达梦数据库分区表概念、创建、维护进行介绍。 1.分区表概念 1.1 分区表使用场景 近几年,随着移动支付快速发展,银行交易系统中【移动小微支付场景】使用越来越多,系统中流水账单表数据量巨大,往往上TB。 为了提高…

java八股文面试[JVM]——双亲委派模型

1.当AppClassLoader去加载一个class时,它首先不会自己去尝试加载这个类,而是把类加载请求委托给父加载器ExtClassLoader去完成。 2.当ExtClassLoader去加载一个class时,它首先也不会去尝试加载这个类,而是把类加载请求委托给父加载…

【esp32】GPIO引脚功能使用集合

本文主要介绍 esp32 这块芯片的GPIO 口功能使用以及软硬件设计注意事项 📋 个人简介 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎📝 个人主页:欢迎访问我的 Ethernet_Comm 博客主页…

uniapp 安卓平台签名证书(.keystore)生成

安装JRE环境 下载jre安装包:https://www.oracle.com/java/technologies/downloads/#java8安装jre安装包时,记录安装目录(例:C:\Program Files\Java\jdk-20)打开命令行(cmd),将JRE安装路径添加到系统环境变量 d: se…

Linux操作系统--linux环境搭建(3)

在上一小节中,我们搭建好了虚拟机,那么接下来,我们在虚拟机上安装我们的Linux操作系统。 1.CentOS安装 下面我们开始在我们创建好的虚拟机上安装CentOS操作系统。流程如下所示: (1).Vmware要求如果需要启动一台虚拟机,需要确保你的电脑主机必须要支持虚拟化的技术。如何…

SLS筛选推送链

* | select "client_ip", "url", count(*) as "number" from log group by "client_ip", "url" order by "number" desc