当前位置: 首页 > news >正文

云安全攻防(四)之 云原生技术

云原生技术

容器技术

容器与虚拟化

虚拟化(Virtualization)和容器(Container)都是系统虚拟化的实现技术,可实现系统资源的”一虚多“共享。容器技术可以理解成一种”轻量的虚拟化“方式,此处的”轻量“主要是相比于虚拟化技术而言的。列如:虚拟化通常在Hypervisor 层实现对硬件资源的虚拟化,Hypervisor为虚拟机提供了虚拟的运行平台,管理虚拟机的操作系统的运行,每个虚拟机都有自己的操作系统、系统库以及应用。而容器并没有Hypervisor 层,每个容器是与主机共享硬件资源和操作系统的。

容器技术在操作系统层面实现了对计算机系统资源的虚拟化,在操作系统中,通过对CPU、内存和文件系统等资源的隔离、划分和控制,实现进程之间的透明的资源使用。

在这里插入图片描述

容器镜像

镜像是容器运行的基础,容器引擎服务可使用不同的镜像启动相应的容器。在容器出错后,它能通过迅速删除容器、启动新的容器来恢复服务,这都需要以容器镜像作为支撑技术的。与虚拟机所用的系统镜像不同,容器镜像不仅没有Linux 系统内核,同时在格式也有很大的区别。虚拟机镜像是将一个完整的系统封装成一个镜像文件,而容器镜像不是一个镜像文件,容器镜像是分层存储的文件系统。需要注意的是,当需要修改镜像内的某个文件时,只会对最上方的读写层进行改动,不会覆盖下层已有文件系统的内容。

容器存储

镜像元数据

在Liunx 系统中Docker的数据默认存放在 /var/lib/docker 中 ,基于不同的系统又有不同的存储驱动和不同的目录结构。我们以OCI标准格式来了解镜像存储的内容,如图所示:

在这里插入图片描述

镜像每一层的 ID是该文件内容的散列校验值,作为该层的唯一标识。获取镜像后,会使用以下方式索引镜像: 首先读取镜像的 manifests 文件,根据 manifests 文件中 config 的 sha256 码,得到镜像 config 文件,遍历 manifests 文件里面的所有层(layer),根据其 sha256 码在本地查找,拼出完整的镜像。

存储驱动

在理想情况下,我们使用挂载卷来存储高读写的目录,很少将数据直接写入容器的可写层。但是,总有一些需要直接写入容器可写层的特殊需求,这时候就需要存储驱动来作为容器和宿主机之间的媒介。Docker 依靠驱动技术来管理镜像与运行它们的容器间的存储和交互。

目前, Docker 支持 overaly2、aufs、fuse-overlayfs、devicemapper、btrfs、zfs、vfs等存储驱动。没有单一的存储驱动可适用所用的应用场景,要根据不同的场景选择合适的存储驱动,这样才能有效提高 Docker 性能

数据卷

通常,有状态的容器都有数据持久化存储的需求。前一节提到过,文件系统的改动都是发生在最上面的可读 写层。在容器的生命周期内,它是持续的,包括容器被停止后。但是,当容器被删除后,该数据层也随之被删除了。因此,Docker 采用数据卷(Volume)的形式向容器提供持久化存储。数据卷是 Docker 容器数据持久化存储 的首选机制。绑定挂载(Bind Mounts)依赖于主机的目录结构,但数据卷是由 Docker 管理。

与绑定挂载相比, 数据卷有以下几个优点:

  • 与绑定挂载相比,数据卷更容易备份或迁移
  • 可以使用 Docker CLI命令或 Docker API 管理数据卷
  • 数据卷在 Linux和 Windows 上均可使用
  • 数据卷可以在多个容器之间更安全地共享
  • 数据卷驱动程序允许在远程主机或云上存储数据卷、加密卷的内容或添加其它功能
  • 新数据卷的内容可以由容器预填充
  • 另外,与使用容器的读写层保存数据相比,数据卷通常是更好的选择。因为使用数据卷存储不会增加容器的大小,并且数据卷是持久化的,不会依赖于容器的生命周期。

容器网络

单从云计算的发展来看,业界普遍的共识是计算虚拟化和存储虚拟化已经不断突破和成熟,但网络虚拟化的发展仍相对滞后,成为制约云计算发展的一大瓶颈。网络虚拟化、多租户、混合云等特性均不同程度地给云网络地安全建设提出全新的挑战。

容器技术提供了轻量级虚拟化的能力,使实列资源占有大幅降低,提升了分布式计算系统的性能,但分布式容器系统的网络仍是较为复杂的部分。目前容器网络可以简单分为主机网络和集群网络,其中主机网络以 Docker 为列主要分为 None 网络模式、Bridge 网络模式、Host 网络模式和 Container 网络模式。集群网络以 Kubernetes 为列,由于Pod 作为 Kubernetes 应用运行的基本单元,每个Pod 中包含一个或多个相关的容器,这些容器都会运行在同一个主机中,并且共享相同的网络命名空间和相同的Linux 协议栈。因而集群网络基于Pod 主要涉及以下三个通信:同一个Pod内,容器和容器之间的通信;同一个主机内不同Pod之间的通信;跨主机Pod之间的通信。

容器运行时

容器运行时负责管理容器运行的整个生命周期,包括但不限于指定容器镜像格式、构建镜像、上传和拉取镜像、管理镜像、管理容器实例、运行容器等。在容器技术发展早期,Docker 作为容器运行时的标准被广为使用,而后Google、CoreOS、Docker等公司在2015年联合创建了开放容器标准(Open Container Inititiative,OCI),用于推进容器标准化,其主要包含两个标准,分别为容器运行时的标准和容器镜像标准,OCI的容器运行时主要包括runC、Rocket、Kata Containers、gVisor等。再后来随着容器编排技术的不断发展,处于行业翘楚的Kubernetes推出了容器运行时接口(Container Runtime Interface,CRI),用于与容器运行时进行通信,进而操作容器化的应用程序,当前支持的CRI运行时包括Docker、Contained、CRI-O。

容器编排

集群化、弹性和敏捷是容器应用的显著特点,如何有效地对容器集群进行管理,是容器技术落地应用地一个重要方面。集群管理工具(编排工具)能够帮助用户以集群的方式在主机上启动容器,并能够实现相应的网络互联,同时提供负载均衡、可扩展、容错和高可用等保障。目前来看,使用率和关注度比较高的几种容器编排平台主要包括Kubernetes、Apache Mesos、Docker Swarm、OpenShift、Rancher等、目前来看,Kubernetes在容器编排领域占据较大优势。许多公有云厂商也推出了各自的Kubernetes托管云平台,国外公有云厂商主要以Google、Amazon、Microsoft Azure 为主,国内则以阿里、腾讯、华为为主。

微服务

2014年,Matrin Fowler 撰写的 Microservices 使得许多国内的先行者接触到微服务这个概念并将其引入国内,Matrin Fowler对微服务的概念的定义如下:微服务就是将一个完整应用中所有的模块拆分为多个不同的服务,其中每个服务都可以部署、维护和发展,服务之间通常通过RESTful API 通信,这些服务围绕业务能力构建,且每个服务均可使用不同的编程语言和不同的数据存储技术。

2015年,越来越多的人通过各种渠道了解到微服务的概念并有人开始在生产环境中落地,2016年—2017年,微服务被越来越多的人所认可,一大批公司以微服务和容器为核心开始了技术架构的全面革新,于是微服务架构应运而生。

至今为止,微服务发展已经经历了两代,第一代是Dubbo、Spring Cloud 为代表的微服务治理框架,该类框架在微服务发展的前几年一度独领风骚、甚至在部分人群中成为微服务的代名词,但事实上该类框架并不能友好地解决微服务自身带来地一些问题,如微服务地调用依赖、版本迭代、安全性、可观测性等;第二代微服务治理框架为服务网格,他的出现解决了大部分开发人员在使用Spring Cloud 时遇到地不足和痛点。

服务网格

2017年年底,服务网格(Service Mesh)依托其非侵入式特性在微服务技术中崭新头角,作为微服务间通信地基础设施层。服务网格通常通过一些轻量级网络代理实现,这些代理与应用程序一起部署,而无需感知应用程序本身。

在这里插入图片描述

可以看到 Sidecar 运行在服务旁,对服务透明。由于所有通过服务地流量均会经过 Sidecar ,因此 Sidecar 可实现流量控制功能,如服务发现、负载均衡、智能路由、故障注入、熔断器、TLS终止等。服务网格的出现将微服务治理从自身中抽离出来,这种方式极大降低了代码的耦合度,使得微服务治理不在复杂。

Serverless

随着云原生技术的不断发展,应用的部署模式逐渐趋向于“业务逻辑实现与基础设施分离”的设计原则,Serverless(无服务器架构)指的是由开发者实现的服务端逻辑运行在无状态的计算容器中,它由事件触发, 完全被第三方管理,其业务层面的状态则被开发者使用的数据库和存储资源所记录。Serverless使得开发者无需直接处理服务器(无论是物理机,虚拟机,容器等)。无主机的优势会让使用者在服务器维护方面的操作开销大大减少,无需为升级服务器而忧心,无主机还意味着在应用程序中需要监控的度量指标也会不同。这是因为使用的大多数底层服务不会再发布 CPU、内存、磁盘大小等传统度量指标了。这让不再需要再特别关心架构的底层操作细节。Serverless使开发者避免了基础设施管理,如集群配置、漏洞修补、系统维护等。

Serverless通常可分为两种实现方式,即BaaS(Backend as a Service,后端即服务)和FaaS(Functions as a Service,函数即服务),其中 FaaS是Serverless的主要实现方式。简而言之FaaS即开发者编写的一段代码并定义何时以及如何调用该函数,随后该函数在云厂商提供的服务端运行,在此过程中开发者只需要编写并维护一段功能代码。

此外,FaaS本质上是一种事件驱动并由消息触发的服务,事件类型可能是一个HTTP请求,也可能是一次上传或保存操作,事件源与函数的关系如图所示:

在这里插入图片描述

FaaS的典型代表为AWS Lambda,为便于理解,下述为一个简单的Lambda Python处理函数:

import jsondef lambda_handler(event, context):
return {'statusCode': 200,'body': json.dumps('Hello from Lambda!')
}

可以看出,以上代码导入了JSON Python库并定义了一个lambda_handler函数,该函数需接收两个参数,分别为event和context,其中event参数包含此函数收到的事件源信息,参数类型通常是Python的dict类型,也可以是list、str、int、float等类型,而context参数包含此函数相关的运行时上下文信息。

在这里插入图片描述

上图大致展示了传统的服务端应用部署和FaaS应用部署,当应用程序部署在物理机、虚拟机、容器中时,它实际上是一个应用进程,并且由许多不同的函数构成,这些函数之间有着相互关联的操作,一般需要长时间在操作系统中运行;而FaaS通过抽离虚拟机实例、操作系统和应用程序进程改变了传统的部署模式,使开发者只需关注单个函数操作,剩余基础设施管理均由第三方托管平台提供,当有事件触发时函数被执行,开发者为使用的资源付费。

DevOps

开发运营一体化(DevOps)全称为 Development&Operations ,其代表的并非一种具体的实现技术,而是一种方法论,在2009年被提出。DevOps的出现主要是为了打破开发人员与运维人员之间的壁垒和鸿沟,高效地组织团队通过自动化工具相互协作已完成软件生命周期管理,从而更快且频繁地交付高质量、稳定的软件。

云原生倡导敏捷、容错、自动化的特点,使得DevOps 成为云原生基础不可或缺地一环,究其根本原因,我们可以将其分为以下几点:

云原生提供DevOps基础设施

容器与编排技术提供了云原生的标准运行环境及基础架构。DevOps的和核心点在于软件的持续集成、持续交付,而容器作为云原生应用的标准发布,促进了DevOps在云原生环境下的流行,与此同时,基于容器的PaaS平台,如 Kubernetes ,可进一步为DevOps 的落地提供土壤。

微服务架构加速DevOps的应用

微服务架构实现了云原生应用固有的特点,即无状态性、弹性扩展、高内聚、低耦合。在此此架构下,试想在生产环境中,由于一个庞大的应用被拆分为几十个上百个服务,每个服务的开发、构建、部署过程必然遵循快速发布的原则,因而在敏捷性、自动化工具链上对流程提出了较高的要求。在此基础上,DevOps 的自动化、协作、敏捷的文化将会在很大程度上加速微服务的开发效率、降低沟通成本、提升部署效率。

DevOps 赋能服务网格

服务网格是一套微服务治理框架,主要实现各个微服务间的网络通信,虽然服务网格技术本身与DevOps关系不大,但由于其建立在微服务架构下,因而也须与 DevOps 相融合,这样才能实现微服务的持续集成和交付。

DevOps 加速 Serverless 应用迁移

Serverless 为云原生应用的最终形态,即服务端托管云厂商,开发者只需要维护好一段函数代码即可,这一新型云计算模式背后秉承的理念实际与DevOps是相互契合的。DevOps 遵循消除 开发者与运维人员之间的壁垒,而Serverless 架构的责任划分原则使得开发者人员和运维人员不在有界限。

相关文章:

云安全攻防(四)之 云原生技术

云原生技术 容器技术 容器与虚拟化 虚拟化(Virtualization)和容器(Container)都是系统虚拟化的实现技术,可实现系统资源的”一虚多“共享。容器技术可以理解成一种”轻量的虚拟化“方式,此处的”轻量“主…...

线上通过Nginx部署前端工程,并且配置SSL

介绍、为了更好的帮助大家学习,减少歧义,IP地址我就不隐藏了,公司也是我自己的公司。你们就别来攻击了。 下面给出步骤: 一、前期准备工作 通过在目标服务器上安装宝塔面板、安装redis、mysql、nginx、jdk环境等 1、 2、前端工程通过npm run build 打…...

直播预告 | 开源运维工具使用现状以及可持续产品的思考

运维平台自上世纪90年代开始进入中国市场,曾形成以传统四大外企:IBM、BMC、CA、HP为代表的头部厂商,还有一众从网管起家的国内厂商。2010年前后,出现了以Zabbix、Nagios、Cacti为代表的开源工具,后来又陆续出现了Prome…...

GPT带我学-设计模式-工厂模式

1 你好,请问你知道设计模式的工厂模式吗 当然知道,工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,而不需要暴露对象创建的逻辑细节。工厂模式通过使用工厂类来创建对象,从而将对象的实例化逻辑与客户端代…...

Docker 安装 Tomcat

目录 一、查看 tomcat 版本 二、拉取 Tomcat Docker 镜像 三、创建 Tomcat 容器 四、访问 Tomcat 五、停止和启动容器 一、查看 tomcat 版本 访问 tomcat 镜像库地址:https://hub.docker.com/_/tomcat,可以通过 Tags 查看其他版本的 tomcat; 二、拉…...

seata注册到nacos(docker)

1、安装:docker run --name seata-server2 -p 8091:8091 -p 7091:7091 seataio/seata-server:1.5.1 复制seata-server2到服务器,然后过河拆桥 2、创建挂载目录 mkdir -p /ssy/seata_docker 3、将容器 resources文件挂载到宿主机 docker cp seata-server2…...

ffmpeg综合应用示例(五)——多路视频合并(Linux版本)

本文的目的为方便Linux下编译运行多路视频合成Demo 原文:ffmpeg综合应用示例(五)——多路视频合并 Ubuntu 20.04 ffmpeg version ffmpeg-4.4-x86_64 编译 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/home/workspace/dengzr/linux-x64/lib…...

Node.js-http模块服务端请求与响应操作,请求报文与响应报文

简单案例创建HTTP服务端: // 导入 http 模块 const http require("http"); // 创建服务对象 const server http.createServer((request, response) > {// 设置编码格式,解决中文乱码问题response.setHeader("content-type", &…...

除了PS,还有那些软件可以打开PSD文件

设计师在交接文件时,会看到各种格式的扩展文件,不同的格式需要不同的软件来运行。大多数人都听说过流行的文件格式PSD,因为它是最常用的图片格式之一,还有JPG、PNG等。然而,与JPG和PNG不同的是,PSD格式文件…...

uniapp h5支付宝支付后端返回Form表单,前端如何处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1.调取接口拿到后端返回的form表单 前言 uniapp h5 支付宝支付,后端返回一串form表单,前端如何拿到支付串并且调用支付 1.调取接口拿到…...

【华秋干货铺】PCB布线技巧升级:高速信号篇

如下表所示,接口信号能工作在8Gbps及以上速率,由于速率很高,PCB布线设计要求会更严格,在前几篇关于PCB布线内容的基础上,还需要根据本篇内容的要求来进行PCB布线设计。 高速信号布线时尽量少打孔换层,换层优…...

c#:ObservableCollection<T>的用法

1.说明: ObservableCollection:表示一个动态数据收集,该集合在添加或删除项或刷新整个列表时提供通知。 2.使用: 首先声明一个类 public ObservableCollection ProItems;//具体情况具体写对应的信息 表格DataGrid案例&#xff…...

Linux 端口号占用如何处理(使用命令处理)

查看被占用端口号 sudo netstat -tlnp 端口号 示例: sudo netstat -tlnp 3380杀死进程 sudo kill 进程Id sudo kill 11032...

ubuntu git操作记录设置ssh key

用到的命令: 安装git sudo apt-get install git配置git用户和邮箱 git config --global user.name “用户名” git config --global user.email “邮箱地址”安装ssh sudo apt-get install ssh然后查看安装状态: ps -e | grep sshd4. 查看有无ssh k…...

SystemVerilog数组参数传递及引用方法总结

一、将常数数组传递给task/function 如下面的程序,将一个常数数组传递给function module my_array_test();function array_test(int array[4]);foreach(array[i]) begin$display("array[%0d] %0d", i, array[i]);endendfunctioninitial beginarray_tes…...

Shell脚本学习-While循环1

当型循环和直到型循环: 循环语句常用于重复执行一条指令或一组指令,直到条件不满足时停止。 在企业实际应用中,常用于守护进程或者持续运行的程序。 while语法结构: while 条件 do指令... done while循环语句对后面的条件表达…...

docker for Windows, WSL2 ,Hyper-v的关系

Hyper-v Hyper-V是由微软开发的一种虚拟化技术和虚拟机管理器。它允许在Windows操作系统上创建和运行多个虚拟机实例,每个虚拟机可以运行独立的操作系统和应用程序。属于硬件虚拟化。 WSL2 WSL2在技术上与WSL有很大的不同。在WSL2中,Windows 10引入了…...

SAS-数据集SQL水平合并

一、SQL水平合并基本语法 sql的合并有两步,step1:进行笛卡尔乘积运算,第一个表的每一行合并第二个表的每一行,即表a有3行,表b有3行,则合并后3*39行。笛卡尔过程包含源数据的所有列,相同列名会合…...

企业既要用u盘又要防止u盘泄密怎么办?

企业在日常生产生活过程中,使用u盘交换数据是最企业最常用也是最便携的方式,但是在使用u盘的同时,也给企业的数据保密工作带来了很大的挑战,往往很多情况下企业的是通过u盘进行数据泄漏的。很多企业采用一刀切的方式,直…...

汉明距离,两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。

题记: 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。 示例 1: 输入:x 1, y 4 输出:2 解释: 1 (0 0 0 1) 4 (0 1 0 0…...

Android 之 使用 Camera 拍照

本节引言 本节给大家带来的是Android中Camera的使用,简单点说就是拍照咯,无非两种: 1.调用系统自带相机拍照,然后获取拍照后的图片 2.要么自己写个拍照页面 本节我们来写两个简单的例子体验下上面的这两种情况~ 1.调用系统自带…...

盘点7月Sui生态发展,了解Sui的近期成长历程!

自5月Sui主网上线三个月以来,7月是Sui网络进行最多次重要更新的一个月,Sui网络和生态正呈指数形式不断向上发展。为吸引更多的项目或开发者加入生态构建以及活跃用户参与生态,Sui基金会推出了Builder House、黑客松、Bullshark Quests、NFT再…...

6.物联网操作系统信号量

一。信号量的概念与应用 信号量定义 FreeRTOS信号量介绍 FreeRTOS信号量工作原理 1.信号量的定义 多任务环境下使用,用来协调多个任务正确合理使用临界资源。 2.FreeRTOS信号量介绍 Semaphore包括Binary,Count,Mutex; Mutex包…...

《向量数据库指南》——使用Milvus Cloud操作员安装Milvus Cloud独立版

Milvus cloud操作员HelmDocker Compose Milvus cloud Operator是一种解决方案,帮助您在目标Kubernetes(K8s)集群上部署和管理完整的Milvus cloud服务堆栈。该堆栈包含所有Milvus cloud组件和相关依赖项,如etcd、Pulsar和MinIO。本主题介绍如何使用Milvus cloud Operator安…...

Redis的基础知识

目录 一、什么是Redis 二、关于Redis的一些基本知识 (1)set命令 (2)get命令 三、Redis中的一些常用命令 (1)keys (2)exists (3)type (4…...

Sorting Layer与Order in Layer

就像是两个数相比,比如34与26,Sorting Layer决定的是十位,而Order in Layer决定的是个位,如果Sorting Layer的级别比较高,则可以忽略Order in Layer的比较,当比较的二者的Sorting Layer级别相同&#xff0c…...

动手学深度学习—卷积神经网络(原理解释+代码详解)

目录 1. 从全连接层到卷积层2. 图像卷积2.1 互相关运算2.2 卷积层2.3 图像中目标的边缘检测2.4 学习卷积核2.5 特征映射和感受野 3. 填充和步幅3.1 填充3.2 步幅 4. 多输入多输出通道4.1 多输入通道4.2 多输出通道4.3 11卷积核 5. 汇聚层5.1 最大汇聚层和平均汇聚层5.2 填充和步…...

环球数科、BUFFALO面试(部分)

环球数科 系统复杂且需求迭代频繁,如何维护微服务之间的接口调用关系? API接口在设计的时候需要大量的需求文档,而且文档也需要不断维护。如何高效维护API文档就很重要了。以下是一些常见的API管理工具:Swagger:Swag…...

RabbitMQ快速入门

文章目录 1、RabbitMQ的概述1.1、什么是消息队列?1.2、为什么要使用消息队列?1.3、RabbitMQ的特点: 2、RabbitMQ的安装2.1 下载与安装2.2 常用命令 3、RabbitMQ消息发送和接受3.1 消息发送和接受机制3.2 AMQP的消息路由3.3 Exchange(交换机)的…...

使用Git在GitHub上部署静态页面

在GitHub中,我们可以将自己的静态页面部署到GitHub中,它会给我们提供一个地址使得我们的页面变成一个真正的网站,可以供用户访问。 一、在GitHub下创建仓库 二、将项目部署到GitHub上 1. 初始化Git仓库 2. 提交代码 3. 关联远程仓库 在Gi…...