蓝队之云技术

声明!
学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)

一、云架构介绍

 

不管是防御系统还是进攻系统,强大的底层技术基础都是必不可少的。

 

从防御的角度来看,只有了解底层技术,我们才能知道如何构建防御体系。

从进攻的角度讲,了解底层技术才能发现漏洞并开发出漏洞利用的方法。

攻击者和防御者都必须清楚对方的运作方式。

 

以前构建系统的时候,需要购买设备、租用数据中心机柜,然后搭建基础设施。随着处理器的不断进化,虚拟机出现了。它能把一台机器的资源分成多台机器来使用,提高了资源利用率,变得更加灵活可拓展,实现了从裸机基础设施到虚拟化基础设施的转变。接着,容器化技术登场,进一步提高了效率,实现了服务器、网络和存储的虚拟交付。现在,我们把最新一代的基础设施称为“云”,它可不是单一的技术哦,而是众多技术的集合。

 

二、云服务

 

云是一种 IT 基础设施系统,它将资源的创建抽象在容错、地理分布和可扩展的物理基础设施之上。并以服务器的形式按需求交付能力,非常易于使用,可以自动创建服务器、存储、网络等等。云基础架构必须稳定,不能频繁出现中断。地理分布的云基础设施能够提高容错能力,而且云必须能够快速扩展,以满足各种需求。

 

一、云作为 IT 基础设施系统

资源创建的抽象:

云将底层的物理基础设施(如服务器、存储设备、网络设备等)进行抽象化处理。这意味着用户无需关心底层硬件的具体细节和复杂性,只需要关注所需的资源(如计算能力、存储容量、网络带宽等)。

例如,当用户需要一台服务器时,他们不需要了解服务器的具体型号、硬件配置等,只需要在云平台上选择所需的服务器规格(如 CPU 核心数、内存大小、存储容量等),云平台会自动在底层物理基础设施上创建相应的资源。

容错、地理分布和可扩展:

容错:云基础设施通常采用冗余设计和容错机制,以确保在硬件故障、软件错误或其他意外情况下,服务仍然能够持续运行。例如,数据可以在多个存储设备上进行备份,服务器可以组成集群以实现高可用性。

地理分布:云服务提供商通常在不同的地理位置建立数据中心,这样可以提高服务的可靠性和可用性。如果一个地区的数据中心出现故障,用户的服务可以自动切换到其他地区的数据中心,从而减少服务中断的风险。

可扩展:云基础设施可以根据用户的需求进行动态扩展或收缩。当用户的业务增长时,他们可以轻松地增加计算资源、存储容量和网络带宽;当业务需求减少时,他们可以相应地减少资源使用,以降低成本。

 

二、以服务器形式按需求交付能力

易于使用:

云服务提供商通常提供直观的用户界面和 API,使得用户可以方便地创建、管理和使用云资源。用户无需具备专业的 IT 知识和技能,就可以轻松地部署和运行自己的应用程序。

例如,用户可以通过云平台的控制台或命令行工具,在几分钟内创建一台服务器,并安装所需的软件和服务。

自动创建服务器、存储、网络等:

云平台可以自动完成服务器、存储和网络等资源的创建和配置。用户只需要指定所需的资源规格和配置参数,云平台会自动完成剩余的工作。

例如,当用户创建一台服务器时,云平台会自动为其分配 IP 地址、配置网络安全组、创建存储卷等。

 

三、云基础架构的稳定性要求

不能频繁出现中断:

对于企业和用户来说,云服务的稳定性至关重要。频繁的服务中断会导致业务中断、数据丢失和用户不满。因此,云服务提供商必须采取一系列措施来确保云基础架构的稳定性。

例如,云服务提供商可以采用高可靠性的硬件设备、冗余的网络架构、备份和恢复机制等,以减少服务中断的风险。

 

四、地理分布提高容错能力和快速扩展满足需求

地理分布提高容错能力:

如前所述,地理分布的云基础设施可以在一个地区的数据中心出现故障时,自动将服务切换到其他地区的数据中心,从而提高服务的容错能力。

此外,地理分布还可以提高服务的性能和可用性。例如,用户可以选择将数据存储在离自己最近的数据中心,以减少网络延迟和提高数据访问速度。

快速扩展满足各种需求:

随着业务的发展,用户的需求可能会不断变化。云基础设施必须能够快速扩展,以满足用户的各种需求。

例如,当用户的业务量增加时,他们可以快速增加服务器的数量、存储容量和网络带宽,以确保应用程序的性能和可用性。云平台应该能够自动完成这些资源的扩展,而无需用户进行复杂的手动配置。

 

 

有很多公有云服务商,比如 Amazon Web Services(AWS)、Azure、Google(GCP),还有华为云、腾讯云、阿里云等等。组织可以使用 OpenStack 等工具在自己的数据中心搭建私有云,或者一部分业务运行在私有云中,一部分运行在公有云中。

 

公有云和私有云是两种不同的云计算部署模式,它们有以下特点:

 

一、公有云

定义和所有权:

公有云由第三方云服务提供商拥有和运营,面向公众开放,任何企业或个人都可以通过互联网使用其服务。

例如,亚马逊 AWS、微软 Azure、阿里云等都是知名的公有云服务提供商。

特点:

成本效益高:用户无需购买和维护自己的硬件设备和数据中心,只需根据使用量支付费用,降低了前期投资和运营成本。

可扩展性强:公有云提供商通常拥有庞大的资源池,可以根据用户需求快速扩展计算、存储和网络资源。

易于使用:提供直观的用户界面和管理工具,用户可以方便地部署和管理应用程序。

高可用性和可靠性:公有云服务提供商通常采用冗余设计和容错机制,确保服务的高可用性和可靠性。

适用场景:

中小企业:对于资源有限的中小企业来说,公有云是一种经济实惠的选择,可以快速获得所需的 IT 资源,专注于业务发展。

临时项目或测试环境:对于短期的项目或测试环境,公有云可以快速部署,使用完毕后可以轻松释放资源,避免浪费。

互联网应用:对于面向公众的互联网应用,公有云可以提供高可用性和可扩展性,满足大量用户的访问需求。

 

二、私有云

定义和所有权:

私有云由单个企业或组织拥有和运营,部署在企业内部或托管在第三方数据中心。

私有云可以根据企业的特定需求进行定制化设计和部署,提供更高的安全性和控制能力。

特点:

安全性高:由于私有云部署在企业内部或受企业控制的环境中,数据和应用程序的安全性更高,可以更好地满足企业的合规要求。

定制化程度高:企业可以根据自身的业务需求和 IT 架构,定制化私有云的功能和性能,实现更好的资源管理和控制。

资源独占性:企业拥有私有云的全部资源,不会与其他用户共享,确保资源的可用性和性能。

长期投资:建设和维护私有云需要较高的前期投资和持续的运营成本,但可以提供长期的 IT 基础设施支持。

适用场景:

大型企业:对于有严格安全要求和高定制化需求的大型企业来说,私有云是一种更合适的选择,可以更好地满足企业的业务需求。

金融、医疗等行业:这些行业对数据安全和合规性要求极高,私有云可以提供更高的安全性和控制能力。

对性能和可用性有严格要求的应用:对于关键业务应用,私有云可以提供更高的性能和可用性保障,确保业务的连续性。

总之,公有云和私有云各有优缺点,企业应根据自身的业务需求、安全要求和预算等因素,选择适合自己的云计算部署模式。在一些情况下,企业也可以采用混合云模式,结合公有云和私有云的优势,满足不同的业务需求。

 

三、云分类

 

1. 基础设施即服务(IaaS):就像提供建筑材料和工具,让你可以自己搭建房子。

IaaS(Infrastructure as a Service,基础设施即服务)是一种云计算服务模式,它提供了基本的计算、存储和网络资源,让用户能够在这些基础设施上部署和运行自己的应用程序。

 

一、主要特点

虚拟化资源

IaaS 通过虚拟化技术将物理服务器、存储设备和网络设备等基础设施资源进行抽象化,形成虚拟的计算资源、存储资源和网络资源。

用户可以根据自己的需求,灵活地申请和配置这些虚拟资源,而无需关心底层物理设备的具体实现。

按需自助服务

用户可以通过网络访问 IaaS 平台,根据自己的需求随时申请、配置和释放计算、存储和网络资源,实现按需自助服务。

这种自助服务模式使得用户能够快速响应业务变化,提高资源利用率和降低成本。

广泛的网络访问

IaaS 服务可以通过互联网或专用网络进行广泛的访问,用户可以在任何地方、任何时间使用这些服务。

这种广泛的网络访问性使得用户能够更加灵活地部署和管理自己的应用程序,提高工作效率。

 

资源池化

IaaS 提供商将大量的物理基础设施资源进行池化管理,形成一个庞大的资源池。

用户可以从这个资源池中申请和使用所需的资源,而无需关心资源的具体位置和物理设备的归属。

资源池化可以提高资源利用率,降低成本,同时也提高了服务的可靠性和可用性。

 

二、服务内容

计算资源

提供虚拟服务器,包括 CPU、内存、操作系统等。

用户可以根据自己的需求选择不同规格的虚拟服务器,以满足应用程序的计算需求。

 

存储资源

提供虚拟存储设备,包括硬盘、固态硬盘、对象存储等。

用户可以根据自己的需求选择不同类型和容量的存储设备,以满足应用程序的数据存储需求。

 

网络资源

提供虚拟网络设备,包括虚拟交换机、虚拟路由器、防火墙等。

用户可以根据自己的需求构建自己的虚拟网络,实现网络隔离、安全控制和流量管理等功能。

 

三、优势

降低成本

用户无需购买和维护自己的物理基础设施,只需根据使用量支付 IaaS 服务费用,降低了前期投资和运营成本。

 

提高灵活性

用户可以根据自己的需求随时申请、配置和释放计算、存储和网络资源,提高了资源的灵活性和可扩展性。

 

提高可靠性和可用性

IaaS 提供商通常采用冗余设计和容错机制,确保服务的可靠性和可用性。用户可以将自己的应用程序部署在 IaaS 平台上,享受高可靠性和可用性的服务。

 

专注于核心业务

用户无需关心底层基础设施的管理和维护,只需专注于自己的核心业务,提高了工作效率和竞争力。

 

四、应用场景

企业信息化建设

企业可以利用 IaaS 服务快速搭建自己的信息化基础设施,包括服务器、存储设备和网络设备等,降低信息化建设成本和周期。

 

软件开发和测试

软件开发人员可以利用 IaaS 服务快速搭建开发和测试环境,提高开发效率和质量。

 

大数据处理

大数据处理需要大量的计算和存储资源,IaaS 服务可以为大数据处理提供灵活、可扩展的基础设施支持。

网站和应用程序托管

网站和应用程序开发者可以将自己的网站和应用程序托管在 IaaS 平台上,享受高可靠性和可用性的服务,降低托管成本。

 

 

  1. 平台即服务(PaaS):类似有了基本框架的房子,你只需进行装修和布置。

PaaS(Platform as a Service,平台即服务)是一种云计算服务模式,它为用户提供了一个完整的开发和运行平台,包括操作系统、编程语言运行环境、数据库、Web 服务器等。

 

一、主要特点

提供开发和运行环境

PaaS 提供了一个集成的开发和运行环境,用户可以在这个环境中进行应用程序的开发、测试、部署和管理。

这个环境通常包括编程语言运行环境、数据库、Web 服务器等,用户可以根据自己的需求选择合适的开发工具和技术。

 

简化应用程序开发和部署

PaaS 提供了一系列的开发工具和服务,如代码托管、自动化构建、测试和部署等,简化了应用程序的开发和部署过程。

用户可以专注于应用程序的业务逻辑开发,而无需关心底层基础设施的管理和维护。

 

支持多种编程语言和框架

PaaS 通常支持多种编程语言和框架,如 Java、Python、Node.js、Ruby on Rails 等,用户可以根据自己的喜好和需求选择合适的开发语言和框架。

 

提供可扩展性和高可用性

PaaS 提供了可扩展的计算和存储资源,用户可以根据自己的需求动态调整资源的使用量。

同时,PaaS 通常提供高可用性的服务,确保应用程序的稳定运行。

 

二、服务内容

开发工具和服务

提供代码托管、版本控制、自动化构建、测试和部署等开发工具和服务,帮助用户提高开发效率和质量。

运行环境

提供编程语言运行环境、数据库、Web 服务器等运行环境,支持用户的应用程序运行。

应用程序管理

提供应用程序的监控、日志管理、故障恢复等管理服务,帮助用户确保应用程序的稳定运行。

 

三、优势

降低开发和部署成本

用户无需购买和维护自己的开发和运行环境,只需使用 PaaS 提供的服务,降低了开发和部署成本。

提高开发效率

PaaS 提供了一系列的开发工具和服务,简化了应用程序的开发和部署过程,提高了开发效率。

提供可扩展性和高可用性

PaaS 提供了可扩展的计算和存储资源,以及高可用性的服务,确保应用程序的稳定运行。

支持多种编程语言和框架

用户可以根据自己的喜好和需求选择合适的开发语言和框架,提高了开发的灵活性。

 

四、应用场景

企业应用开发

企业可以利用 PaaS 快速开发和部署企业级应用程序,如 ERP、CRM、OA 等,提高企业的信息化水平。

移动应用开发

移动应用开发者可以利用 PaaS 快速开发和部署移动应用程序,降低开发成本和周期。

数据分析和处理

数据分析和处理人员可以利用 PaaS 提供的数据分析和处理工具,快速进行数据分析和处理,提高工作效率。

互联网应用开发

互联网应用开发者可以利用 PaaS 快速开发和部署互联网应用程序,如网站、社交网络、电子商务等,提高开发效率和质量。

 

  1. 软件即服务(SaaS):直接给你一个装修好可以直接入住的房子。

SaaS(Software as a Service,软件即服务)是一种通过互联网提供软件服务的创新模式。

一、主要特点

基于互联网交付

SaaS 软件通过互联网进行交付,用户无需在本地安装软件,只需通过浏览器或专用客户端即可访问和使用软件。

这种交付方式使得用户可以随时随地使用软件,不受时间和地点的限制。

 

多租户架构

SaaS 软件通常采用多租户架构,即多个用户共享同一套软件实例和基础设施。

这种架构可以降低软件的开发和维护成本,同时提高软件的可扩展性和可靠性。

 

按需付费

用户通常根据自己的使用情况按需付费,无需购买软件的永久许可证。

这种付费方式可以降低用户的初始投资成本,同时也使得用户可以根据实际需求

灵活调整使用规模。

 

持续更新和维护

SaaS 软件提供商负责软件的持续更新和维护,用户无需担心软件的升级和维护问题。

软件提供商通常会定期推出新的功能和改进,以满足用户的不断变化的需求。

 

二、服务内容

各种应用软件

SaaS 可以提供各种类型的应用软件,如企业资源规划(ERP)、客户关系管理(CRM)、办公自动化(OA)、人力资源管理(HRM)等。

这些软件通常具有丰富的功能和良好的用户体验,可以满足不同用户的需求。

数据存储和管理

SaaS 软件通常提供数据存储和管理功能,用户可以将自己的数据存储在云端,随时随地进行访问和管理。

软件提供商通常会采取多种安全措施,确保用户数据的安全和隐私。

技术支持和服务

SaaS 软件提供商通常会提供技术支持和服务,用户在使用软件过程中遇到问题可以随时联系软件提供商获得帮助。

软件提供商还会定期对软件进行维护和升级,确保软件的稳定性和可靠性。

 

三、优势

降低成本

用户无需购买软件的永久许可证,也无需承担软件的安装、维护和升级成本,降低了总体拥有成本。

同时,用户可以根据实际需求灵活调整使用规模,避免了资源的浪费。

快速部署和使用

用户无需进行复杂的软件安装和配置,只需通过互联网即可快速部署和使用软件,节省了时间和精力。

软件提供商通常会提供简单易用的用户界面和操作指南,使得用户可以快速上手使用软件。

高可靠性和可扩展性

SaaS 软件通常采用多租户架构和云计算技术,具有高可靠性和可扩展性。

软件提供商通常会采取多种安全措施,确保软件的稳定性和可靠性,同时也可以根据用户的需求快速扩展软件的功能和性能。

持续更新和改进

SaaS 软件提供商负责软件的持续更新和改进,用户可以及时获得新的功能和改进,提高软件的使用价值。

软件提供商通常会根据用户的反馈和需求进行优化和改进,使得软件更加符合用户的实际需求。

 

四、应用场景

企业管理软件

企业可以使用 SaaS 模式的 ERP、CRM、OA 等软件,提高企业的管理效率和竞争力。

这些软件通常具有丰富的功能和良好的用户体验,可以满足企业不同部门的需求。

办公软件

用户可以使用 SaaS 模式的办公软件,如文档处理、表格制作、演示文稿等,提高办公效率。

这些软件通常具有在线协作和共享功能,方便用户与团队成员进行协作和沟通。

行业特定软件

不同行业可以使用特定的 SaaS 软件,如医疗行业的电子病历系统、金融行业的风险管理软件等。

这些软件通常具有行业特定的功能和要求,可以满足行业用户的需求。

 

IaaS(基础设施即服务)、PaaS(平台即服务)和 SaaS(软件即服务)是云计算的三种主要服务模式,它们的区别如下:

 

一、服务内容

IaaS:提供基础的计算、存储和网络资源,用户需要自己安装操作系统、中间件、数据库等软件来搭建应用环境。

例如,用户可以在 IaaS 平台上租用虚拟服务器、存储设备和网络带宽,然后自行安装和配置所需的软件。

IaaS 就像是提供了一个空的房子,用户需要自己进行装修和布置才能入住。

PaaS:提供应用程序的开发和运行环境,包括编程语言运行时环境、数据库、Web 服务器等,用户只需专注于应用程序的开发,无需关心底层基础设施的管理。

例如,用户可以在 PaaS 平台上使用特定的编程语言和开发工具来开发应用程序,平台会自动管理底层的服务器、存储和网络资源。

PaaS 相当于提供了一个精装修的房子,用户只需带上自己的家具和生活用品即可入住。

SaaS:提供完整的软件应用程序,用户可以直接通过互联网使用,无需安装和维护软件。

例如,用户可以通过浏览器访问 SaaS 平台上的电子邮件、办公软件、客户关系管理系统等应用程序,无需关心软件的安装、升级和维护。

SaaS 就像是提供了一个酒店房间,用户可以直接入住,享受酒店提供的各种服

务。

 

二、用户控制程度

IaaS:用户对基础设施有较高的控制程度,可以自由选择操作系统、软件配置和网络设置等。

用户需要自己管理和维护操作系统、中间件和数据库等软件,同时也需要负责安全防护和备份等工作。

例如,用户可以在 IaaS 平台上安装自己喜欢的操作系统和数据库管理系统,并进行定制化配置。

PaaS:用户对应用程序的开发和运行环境有一定的控制程度,但对底层基础设施的控制较少。

用户可以选择编程语言、开发框架和数据库等,但平台会自动管理服务器、存储和网络资源。

例如,用户可以在 PaaS 平台上使用特定的编程语言和开发工具来开发应用程序,但无法直接控制底层的服务器硬件。

SaaS:用户对软件应用程序的控制程度最低,只能通过提供商提供的界面和功能来使用软件。

用户无法对软件进行定制化开发,也无法控制底层的基础设施和运行环境。

例如,用户只能使用 SaaS 平台上提供的电子邮件、办公软件等应用程序的功能,无法对软件进行修改和扩展。

 

三、灵活性

IaaS:具有较高的灵活性,用户可以根据自己的需求自由选择和配置基础设施资源。

用户可以随时增加或减少服务器、存储和网络带宽等资源,以满足业务的变化需求。

例如,用户可以在业务高峰期增加服务器数量,提高系统的处理能力;在业务低谷期减少服务器数量,降低成本。

PaaS:灵活性相对较低,用户的开发和运行环境受到平台的限制。

用户只能在平台提供的编程语言、开发框架和数据库等范围内进行选择和开发,无法自由选择其他技术。

例如,用户如果想使用特定的编程语言或开发框架,可能需要选择支持该技术的 PaaS 平台。

SaaS:灵活性最低,用户只能使用提供商提供的软件功能,无法进行定制化开发。

用户无法根据自己的特殊需求对软件进行修改和扩展,只能通过提供商提供的界面和功能来使用软件。

例如,用户如果需要特定的功能或报表,可能需要向提供商提出需求,由提供商进行开发和实现。

 

四、成本

IaaS:成本相对较低,用户只需根据使用的基础设施资源付费,无需购买和维护硬件设备。

用户可以根据自己的需求选择不同规格和配置的服务器、存储和网络带宽等资源,按需付费,降低成本。

例如,用户可以在业务初期选择较低配置的服务器,随着业务的发展逐渐增加资源,避免了一次性投入大量资金购买硬件设备。

PaaS:成本适中,用户除了支付基础设施资源费用外,还需要支付平台的使用费用。

PaaS 平台通常提供了一些开发和运行环境的管理功能,用户可以节省一部分开发和维护成本。

例如,用户可以在 PaaS 平台上快速开发和部署应用程序,无需自己搭建和管理服务器、数据库等基础设施,降低了开发和运维成本。

SaaS:成本相对较高,用户通常需要按照订阅或使用量付费,无需购买和维护硬件设备和软件。

SaaS 提供商通常会提供专业的软件服务和技术支持,用户可以节省大量的开发和维护成本。

例如,用户可以通过订阅 SaaS 平台上的电子邮件、办公软件等应用程序,无需购买和安装软件,也无需自己进行维护和升级,降低了成本。

 

五、适用场景

IaaS:适用于对基础设施有较高控制需求、需要自由定制和扩展的企业或开发者。

例如,大型企业、互联网公司、软件开发团队等可以使用 IaaS 来搭建自己的基础设施,满足业务的特殊需求。

适合需要处理大量数据、进行高性能计算或需要灵活配置网络的应用场景。

PaaS:适用于专注于应用程序开发、希望快速部署和管理应用的企业或开发者。

例如,小型企业、创业公司、移动应用开发者等可以使用 PaaS 来快速开发和部署应用程序,无需关心底层基础设施的管理。

适合需要快速迭代、频繁更新的应用场景,如 Web 应用、移动应用等。

SaaS:适用于对软件功能有需求、希望快速使用和降低成本的企业或个人用户。

例如,中小企业、个人用户、非营利组织等可以使用 SaaS 来满足日常办公、客户关系管理、财务管理等需求。

适合不需要定制化开发、对软件功能要求不高的应用场景,如电子邮件、办公软件、客户关系管理系统等。

 

四、共享责任模型

 

云服务在提供容错和扩展的同时,也在不同层面增加了安全性的模糊性。如果是 AWS 程序漏洞导致大量数据泄露,AWS 不承担责任。但如果 AWS 数据中心物理安全遭到破坏,客户数据被盗取,AWS 就得承担责任。

五、云架构

1. 虚拟化:把一台机器的资源分成多台虚拟机器,多台裸机汇集形成资源集群,隔离资源的使用,灵活且可扩展资源池。它抽象了硬件安装过程,但仍有改进空间,并非专为云而生。技术栈的灵活性和可定制性提升,促使了容器的出现。

 

  1. 容器:容器就像一个个独立的小空间,允许开发人员与堆栈各部分灵活交互,实现按需生成服务,提高网络抽象程度,方便应用迁移扩展,更高效地使用资源。系统管理和网络工程可以外包给其他公司。云是多种技术的集合。

 

一、容器的独立小空间特性

隔离性:容器为应用程序及其依赖项提供了一个独立的运行环境,就像一个个独立的小空间。每个容器都有自己的文件系统、网络配置、进程空间等,与其他容器相互隔离。这意味着一个容器中的应用程序出现问题不会影响到其他容器,提高了系统的稳定性和可靠性。

灵活性:开发人员可以在容器中灵活地配置和调整应用程序的运行环境。例如,可以选择不同的操作系统版本、软件库版本、运行时环境等,以满足不同应用程序的需求。这种灵活性使得开发人员能够更加方便地进行开发、测试和部署。

 

二、与堆栈各部分灵活交互和按需生成服务

堆栈交互:容器可以与整个软件堆栈的各个部分进行灵活交互。在一个复杂的应用程序架构中,可能包括前端应用、后端服务、数据库等多个组件。容器化使得这些组件可以分别部署在不同的容器中,并且可以通过网络进行通信和交互。开发人员可以根据需要选择不同的容器技术和工具,来实现各个组件之间的高效协作。

按需生成服务:容器化技术使得服务的生成更加灵活和高效。开发人员可以根据实际需求,快速创建和部署容器化的服务。例如,在应对突发的业务需求时,可以快速启动多个容器来提供额外的服务能力。这种按需生成服务的能力可以提高系统的可扩展性和响应速度。

 

三、提高网络抽象程度和方便应用迁移扩展

网络抽象:容器化技术通常会提供网络抽象功能,使得容器之间的网络通信更加简单和高效。通过容器网络模型,容器可以在不同的主机上进行部署,并且可以通过虚拟网络进行通信。这种网络抽象程度的提高,使得开发人员无需关心底层网络的具体实现,专注于应用程序的开发和部署。

应用迁移扩展:容器的独立性和可移植性使得应用程序的迁移和扩展更加方便。由于容器包含了应用程序及其依赖项,所以可以在不同的环境中快速部署和运行。无论是在本地开发环境、测试环境还是生产环境,都可以保证应用程序的一致性。同时,容器的可扩展性也使得应用程序可以根据业务需求进行快速扩展,通过增加容器的数量来提高服务能力。

 

四、更高效地使用资源

资源隔离和共享:容器可以对计算资源(如 CPU、内存、磁盘等)进行隔离,确保每个容器都能获得所需的资源。同时,容器之间也可以共享一些资源,如操作系统内核等,提高资源的利用率。与传统的虚拟机相比,容器更加轻量级,占用的资源更少,能够在相同的硬件资源上运行更多的应用程序。

资源调度:容器化平台通常会提供资源调度功能,根据应用程序的需求和资源的使用情况,自动调整容器的资源分配。例如,当一个容器需要更多的 CPU 资源时,可以动态地将其他容器的闲置资源分配给它。这种资源调度机制可以提高系统的资源利用率和性能。

 

五、系统管理和网络工程外包

专业化分工:将系统管理和网络工程外包给其他公司可以实现专业化分工。专业的服务提供商通常具有丰富的经验和专业知识,能够更好地管理和维护云基础设施。企业可以将精力集中在核心业务上,提高业务的竞争力。

降低成本:外包系统管理和网络工程可以降低企业的运营成本。专业的服务提供商通常可以通过规模效应和优化管理,降低服务成本。同时,企业也无需投入大量的人力、物力和财力来建设和维护自己的 IT 基础设施。

 

六、云是多种技术的集合

云是由多种技术组成的集合,包括虚拟化技术、容器化技术、分布式存储技术、网络技术等。这些技术相互协作,共同构建了一个强大的云计算平台。容器化技术是云技术中的重要组成部分,它为云平台提供了更加灵活、高效的应用部署和管理方式。同时,云平台也为容器化技术的发展提供了广阔的应用场景和支持。

 

六、云架构设计

1. 组件选择:确定架构(这很难改),选择绑定或非绑定组件,可以自己开发、用开源的或者购买。云原生组件是为分布式系统设计的,CNCF 认证不是必须的,要安全编码,部分是开源的。

 

一、组件选择

确定架构:

架构的确定非常关键,因为一旦确定,后期进行修改的难度很大。架构决定了系统的整体结构、功能模块的划分以及它们之间的交互方式。在选择架构时,需要充分考虑业务需求、可扩展性、性能、安全性等因素。

例如,对于一个高并发的电商平台,可能会选择微服务架构,将不同的业务功能拆分成独立的服务,以便更好地应对高流量和快速变化的业务需求。

 

选择绑定或非绑定组件:

组件可以分为绑定和非绑定两种类型。绑定组件通常与特定的架构或技术紧密耦合,难以在不同的环境中复用。非绑定组件则更加灵活,可以在不同的架构和技术中使用。

在选择组件时,可以根据项目的需求和特点来决定是使用绑定组件还是非绑定组件。如果项目对特定的技术有强烈的依赖,或者需要与现有的系统进行深度集成,那么绑定组件可能是更好的选择。如果项目需要更高的灵活性和可移植性,那么非绑定组件可能更适合。

 

自己开发、用开源的或者购买:

对于组件的来源,可以有三种选择:自己开发、使用开源组件或者购买商业组件。

自己开发组件可以完全满足项目的特定需求,但需要投入大量的时间和资源。开源组件通常是免费的,并且有庞大的社区支持,可以提供丰富的功能和快速的更新。购买商业组件则可以获得专业的技术支持和质量保证,但成本较高。

在选择组件的来源时,需要综合考虑项目的预算、时间限制、技术要求以及对组件的控制程度等因素。

 

云原生组件的特点:

云原生组件是为分布式系统设计的,能够充分利用云计算的优势,如弹性扩展、高可用性、自动化管理等。这些组件通常采用微服务架构、容器化部署、自动化运维等技术,以实现快速部署、灵活扩展和高效运行。

CNCF(Cloud Native Computing Foundation)认证不是必须的,但经过认证的组件通常具有更高的质量和可靠性。CNCF 认证的组件经过了严格的审查和测试,符合云原生的标准和最佳实践。

部分云原生组件是开源的,这使得它们可以被广泛使用和改进。开源社区的贡献可以为组件带来更多的功能和更好的性能。同时,开源组件也可以降低项目的成本,提高开发效率。

 

安全编码:

在选择和使用组件时,安全编码是非常重要的。组件可能存在安全漏洞,这些漏洞可能会被攻击者利用,导致系统的安全风险。因此,在选择组件时,需要对其进行安全评估,确保其符合安全标准和最佳实践。

同时,在开发过程中,也需要遵循安全编码的原则,如输入验证、输出编码、访问控制等,以防止安全漏洞的出现。

 

  1. 基础设施即代码(IaC):包括引导介质(Packer)、安装系统(Terraform)、自动配置(Ansible)、状态强制(Monit)。

基础设施即代码(IaC)

 

引导介质(Packer):

Packer 是一种用于创建机器镜像的工具。它可以自动化地构建和配置服务器镜像,以便在不同的环境中快速部署。通过 Packer,可以定义服务器的操作系统、软件安装、配置文件等,然后生成一个可重复使用的镜像。

使用 Packer 可以提高基础设施的一致性和可重复性,减少手动配置的错误和时间成本。同时,Packer 还可以与其他工具集成,如 Terraform、Ansible 等,实现更加自动化的基础设施管理。

 

安装系统(Terraform):

Terraform 是一种用于基础设施即代码的工具。它可以通过声明式的配置文件来定义和管理云计算资源,如服务器、存储、网络等。Terraform 支持多种云服务提供商,如 AWS、Azure、Google Cloud 等,可以实现跨云平台的基础设施管理。

使用 Terraform 可以实现基础设施的自动化部署和管理,提高效率和可靠性。通过编写 Terraform 配置文件,可以定义资源的属性、依赖关系、生命周期等,然后 Terraform 会自动执行相应的操作,创建、更新或删除资源。

 

自动配置(Ansible):

Ansible 是一种用于自动化配置管理的工具。它可以通过简单的 YAML 格式的剧本(playbook)来定义服务器的配置任务,如软件安装、服务启动、文件复制等。Ansible 基于 SSH 协议进行通信,无需在服务器上安装代理程序,非常方便和安全。

使用 Ansible 可以实现服务器的快速配置和一致性管理,减少手动配置的错误和时间成本。同时,Ansible 还可以与其他工具集成,如 Terraform、Packer 等,实现更加自动化的基础设施管理。

状态强制(Monit):

 

Monit 是一种用于监控和管理服务器状态的工具。它可以监控服务器的进程、文件系统、网络连接等,当发现问题时自动采取相应的措施,如重启进程、发送通知等。Monit 可以帮助确保服务器的稳定性和可靠性,及时发现和解决问题。

使用 Monit 可以实现服务器的自动化监控和管理,提高系统的可用性和稳定性。同时,Monit 还可以与其他工具集成,如 Ansible、Terraform 等,实现更加自动化的基础设施管理。

 

 

七、集成部署

使用持续集成和持续交付(CICD)管道来构建环境,包括测试、测量和扫描代码更改的自动化测试和部署(GitOps)。要做到有弹性可靠,即任何单点故障都有故障转移或其他机制,让业务能持续提供(这叫冗余)。全球负载均衡(GSLB,比如智能 DNS、GTM)能解决客户单访问的单点故障隐患。还要平衡控制,控制保护系统免受漏洞和内部攻击的组件,应平衡控制和可用性。

 

八、云设计模式

 

云架构设计不必从头开始,采用已检验的设计模式是最佳选择。

 

1. 微服务架构:为松散耦合、模块化服务而设计,微服务协同工作完成整体服务。每个服务都可以独立修改代码和重用,提高系统整体弹性和容错。大多数云利用微服务架构,云原生应用被构建充当微服务,便于水平扩展。安全优势是每个微服务应用强化、隔离,单一服务漏洞对整体系统影响小。缺点是调试更复杂,需要跨不同服务跟踪事务;性能可能有短板。

 

  1. 零信任架构:对资源的每个请求都需要验证来源已授权,然后授权短期访问(用令牌)。实现零信任架构的一种常见方法是 Open ID Connect(OIDC)联盟访问。授权处于活动状态时可以访问任何联合内服务。密码重置是针对零信任架构的常见攻击方式。

 

一、零信任架构的核心原则

每个请求都需验证来源已授权:

在零信任架构中,不再默认信任任何内部或外部的网络流量和用户。无论是来自企业内部网络还是外部网络的请求,对资源的每个访问请求都必须经过严格的身份验证和授权检查。

这意味着即使是在企业内部网络中的用户,想要访问特定资源时,也不能仅仅因为其在内部网络就被自动授予访问权限,而必须提供有效的身份凭证并经过授权流程。

 

授权短期访问(用令牌):

一旦请求通过了身份验证和授权,系统会颁发一个短期有效的访问令牌。这个令牌的有效期通常较短,可能只有几分钟或几小时。

短期令牌的目的是减少潜在的安全风险。如果令牌被泄露或被盗用,其有效期的短暂性可以降低攻击者利用它进行长期恶意访问的可能性。同时,每次请求都需要重新获取令牌,也增加了安全性。

 

二、Open ID Connect(OIDC)联盟访问实现零信任架构

OIDC 简介:

Open ID Connect 是一种基于 OAuth 2.0 协议的身份验证和授权框架。它允许用户使用一个身份提供商(IdP)进行身份验证,然后可以在不同的服务提供商(SP)之间进行单点登录(SSO)。

在零信任架构中,OIDC 可以用于实现对资源的访问控制。用户通过身份提供商进行身份验证后,获得一个 OIDC 令牌,该令牌可以用于向各个服务提供商请求资源。

 

联盟访问:

OIDC 联盟访问是指多个服务提供商之间建立信任关系,形成一个联盟。在这个联盟中,用户可以使用同一个身份提供商进行身份验证,然后可以访问联盟内的任何服务提供商的资源。

例如,企业 A、B 和 C 建立了一个 OIDC 联盟。用户在企业 A 的身份提供商进行身份验证后,获得一个 OIDC 令牌。这个令牌可以用于访问企业 B 和 C 的服务,只要这些服务在联盟内并且用户被授权访问。

 

授权处于活动状态时可以访问任何联合内服务:

当用户的 OIDC 令牌处于有效状态(即授权处于活动状态)时,他们可以访问联盟内的任何服务。这是因为联盟内的服务提供商信任身份提供商颁发的令牌,并根据令牌中的信息来确定用户的身份和权限。

这种方式实现了零信任架构中的动态授权,即根据用户的身份和当前的上下文环境来决定是否授予访问权限。如果用户的权限发生变化或者令牌过期,他们将需要重新进行身份验证和授权才能继续访问资源。

 

三、密码重置是常见攻击方式

攻击原理:

在零信任架构中,密码重置是一种常见的攻击方式。攻击者可能会尝试通过各种手段获取用户的登录凭证,然后利用密码重置功能来重置用户的密码,从而获得对资源的非法访问权限。

例如,攻击者可能会通过网络钓鱼、社会工程学等方法获取用户的用户名和密码。然后,他们可以尝试使用密码重置功能,通过回答预先设置的安全问题或提供其他身份验证信息来重置用户的密码。

防范措施:

为了防范密码重置攻击,零信任架构通常会采取一些安全措施。例如,加强对密码重置功能的安全控制,要求用户提供多种身份验证信息,如短信验证码、安全令牌等。同时,也可以对密码重置请求进行监控和审计,及时发现异常行为并采取相应的措施。

此外,还可以通过教育用户提高安全意识,避免泄露个人信息和登录凭证,以及定期更改密码等方式来降低密码重置攻击的风险。

 

 

九、安全控制

1. 网络控制:传统架构用防火墙实现网络控制,云环境网络抽象为 SDN、SD-WAN。SDN 可以对不同的接口(如 API 或 GUI)设置网络规则。通过 mTLS 不仅能加密流量,还能对客户端进行身份验证,有证书才能访问微服务。不正确的访问管理可导致权限提升,甚至破坏整个基础设施。现代访问管理系统多使用令牌进行访问控制,提供对服务的短时访问权。JWT 通常用于访问云端资源,伪造和破解密码是常见攻击手段。另一种类型的权限控制机制是强制访问控制 MAC。

 

一、传统架构与云环境的网络控制

传统架构的网络控制:

在传统架构中,防火墙是实现网络控制的主要手段。防火墙通过设置规则来控制网络流量的进出,例如允许或阻止特定的 IP 地址、端口号或协议。

防火墙可以在网络边界上提供一定程度的安全保护,防止未经授权的访问和攻击。然而,传统防火墙在面对复杂的云环境和动态的网络需求时可能存在一些局限性。

云环境的网络抽象:

在云环境中,网络被抽象为软件定义网络(SDN)和软件定义广域网(SD-WAN)。

SDN 通过将网络控制平面与数据平面分离,实现了对网络流量的灵活控制和管理。

SD-WAN 则专注于优化广域网连接,提供更好的性能、可靠性和安全性。这些技术使得云环境中的网络更加灵活、可扩展和易于管理。

 

二、SDN 的网络规则设置

不同接口的规则设置:

SDN 可以通过不同的接口,如应用程序编程接口(API)或图形用户界面(GUI),来设置网络规则。这使得管理员可以更加方便地配置和管理网络,而无需直接操作底层的网络设备。

例如,通过 API,开发人员可以自动化地配置网络规则,以适应不同的应用需求。通过 GUI,管理员可以直观地查看和修改网络拓扑和规则。

 

三、mTLS 的作用

加密流量和身份验证:

相互传输层安全(mTLS)不仅可以加密网络流量,还可以对客户端进行身份验证。在 mTLS 中,客户端和服务器都需要提供证书,只有证书验证通过后才能建立连接。

这种方式提供了更高的安全性,确保只有授权的客户端才能访问微服务。同时,加密流量可以防止数据在传输过程中被窃取或篡改。

 

四、不正确的访问管理风险

权限提升和基础设施破坏:

不正确的访问管理可能导致权限提升攻击,即攻击者利用漏洞或错误配置获取更高的权限。这可能使攻击者能够访问敏感数据、修改系统配置或破坏整个基础设施。

例如,如果一个用户被错误地授予了管理员权限,攻击者可能会利用这个用户的账号进行恶意操作。因此,正确的访问管理对于保护网络和系统的安全至关重要。

 

五、现代访问管理系统

令牌进行访问控制:

现代访问管理系统通常使用令牌进行访问控制。令牌是一种临时的授权凭证,它可以提供对服务的短时访问权。

当用户请求访问服务时,系统会颁发一个令牌,用户在令牌的有效期内可以使用该令牌访问服务。这种方式可以减少密码泄露的风险,并且可以更灵活地控制访问权限。

 

六、JWT 在访问云端资源中的应用及攻击手段

JWT 用于访问云端资源:

JSON Web Token(JWT)通常用于访问云端资源。JWT 是一种基于 JSON 的开放标准,用于在各方之间安全地传输声明。

在访问云端资源时,用户可以使用 JWT 来证明自己的身份和权限。云端服务可以验证 JWT 的有效性,并根据其中的声明来决定是否授予访问权限。

伪造和破解密码是常见攻击手段:

对于使用 JWT 或其他访问控制机制的系统,伪造和破解密码是常见的攻击手段。攻击者可能会尝试通过各种方法获取用户的密码,然后使用该密码进行未经授权的访问。

为了防范这种攻击,系统需要采取强密码策略、多因素身份验证等安全措施,以增加密码的安全性。

 

七、强制访问控制(MAC)

另一种权限控制机制:

强制访问控制(MAC)是另一种类型的权限控制机制。MAC 基于安全标签和访问规则,严格限制主体对客体的访问。

在 MAC 中,系统管理员根据安全策略为主体和客体分配安全标签,只有当主体的安全标签满足客体的访问规则时,主体才能访问客体。

MAC 通常用于对安全性要求较高的系统,如军事、政府和金融领域。

2. 身份管理:企业通常用 AD、LDAP 进行身份管理。AWS IAM 是身份和访问管理的公共云服务。Google 联盟认证 OIDC 经常用于 2FA。云身份提供者(IdP)作为真实身份来源,是更安全的解决方案,比如 Azure AD。

 

十、容器与云

 

虚拟化中每个 VM 需要运行自己的操作系统,大大增加了总体开销。容器化是更现代的架构,容器共享内核与硬件,更快、更小、更高效。容器是对虚拟化的补充,而非取代。容器的系统开销更小,可以进一步分离应用组件,比如搜索、登录、查询、订单功能分开。容器使用映像作为模板生成,映像相当于计算机硬盘。容器使用不同发行版文件加载内核,运行容器。

 

在 Ubuntu 上生成 CentOS 7 容器,可以使用 Docker 这个流行的容器化工具。

步骤如下:

 - 确保安装了 Docker。

如果没有安装,可以使用以下命令安装:“sudo apt-get update”

这个命令让系统检查有没有新软件。“sudo apt-get install docker.io”安装 Docker。

 - 拉取 CentOS 7 的官方 Docker 镜像:“sudo docker pull centos:7”。

sud

 - 运行一个基于 CentOS 7 镜像的容器:“sudo docker run -it --name my_centos7 centos:7 /bin/bash”。

 

 

 

创建 Apache 容器后台运行:“docker container run -d --rm -p 8080:80 httpd”。

 

常用命令:

 - “docker container ls”:查看所有容器。

 

 - “docker exec -it <容器名称或容器ID> /bin/bash”:进入特定容器。

 

 

 - “docker container stop <容器名称或容器ID>”:停止容器。

 

 

 - “dock container run -d --rm -p 8080:80 -v /home/user/webroot/:/usr/local/apache2/htdocs/ httpd”:挂载宿主机目录运行容器。

这个命令会创建一个新的 httpd(Apache HTTP Server)容器,并具有以下特性:

-d:以分离模式(后台运行)启动容器。

--rm:当容器停止时,自动删除容器。

-p 8080:80:将主机的 8080 端口映射到容器内的 80 端口,这样可以通过访问主机的 8080 端口来访问容器内的 Apache 服务。

-v /home/user/webroot/:/usr/local/apache2/htdocs/:将本地的 /home/user/webroot/ 目录挂载到容器内的 /usr/local/apache2/htdocs/ 目录。这意味着你可以在本地的这个目录中放置网页文件,容器内的 Apache 服务器会从挂载的目录中提供这些文件。

httpd:指定要使用的镜像为 httpd(Apache HTTP Server 镜像)。

 

 

 - “docker container run -d --rm -p 80:80 httpd”:侦听宿主机 80 端口运行容器。

 

 - “docker ps”:列出所有正在运行的容器。

执行该命令后,会显示容器的 ID、镜像名称、运行的命令、创建时间、状态以及端口映射等信息

 

 

 - “docker top <container_name_or_id>”:查看特定容器的进程信息。

执行该命令后,会显示容器内正在运行的进程信息,包括进程的 PID、用户、时间、命令等。

 

 

 

Podman 是 Docker 的替代产品,无守护进程。

Ub18.04无相应的软件源,需要先安装

 

 

 

 

 

 

 - “sudo podman run -d --rm --network host httpd”:运行容器。

这个命令的作用是使用 Podman 以分离模式(后台运行)创建一个基于 httpd 镜像的容器,当容器停止时自动删除(--rm),并使用主机的网络模式(--network host)。

 

 - “podman pod create --name wha”:创建空 pod。

 

 - “podman run -d --pod wha httpd”:在 pod 中运行容器。

 

 - “podman run -pod wha -it alpine/curl /bin/asho”:在 pod 中运行可找东西的工具并互动。

 

大部分容器化过程都采用开放容器计划(OCI)标准,所以 Podman 和 Docker 可互操作。

 

十一、容器的真相

 

Linux 没有单一被称为“容器”的特性。实际上,“容器”是阻止进程访问其他进程和资源的特性组合,发生在内核级别,可以控制其限制级别。

 

容器的历史:

 - 197x 年代引入 chroot,可以指示进程的新根目录,但不完美。命名空间可实现每个进程分离网络、进程和其他命名空间。

 - 1999 年 FreeBSD 发布 Jails,在 chroot 之上提供更多限制(Linux 不支持)。

 - 2002 年引入命名空间,分离内核资源。

 - 2006 年谷歌引入进程容器,后被称为 cgroup,可限制特定进程的内存和 CPU 资源。结合 cgroup 和命名空间发布了 Linux 容器(LXC)项目。

 

Linux 中有八种用户命名空间:挂载、进程 ID、网络、进程间通信、UTS、用户 ID、控制组、时间、syslog。

 

十二、Capabilities

Docker 默认不使用用户命名空间。为防止特权内核调用,它使用内核 capabilities 和 seccomp 配置文件限制访问。Linux 有特权或非特权进程。非特权进程有正确权限可写入系统文件,特权进程几乎无所不能。当非特权用户只需要特殊权限时,可使用 Capabilities。Linux 将一些系统级任务分组为 40 多个类别,称为 Capabilities。

 

常见 Capabilities:

CAP_CHOWN:

允许进程修改文件的所有者。通常情况下,只有超级用户(root)才能修改文件所有者,赋予这个能力后,特定进程可以在一定范围内执行此操作,可用于一些特殊的文件管理场景,但如果被恶意利用可能导致文件所有权被不当更改。

CAP_NET_ADMIN:

赋予进程执行网络配置管理任务的权限,比如配置网络接口、设置 IP 路由表、管理网络防火墙规则等。这对于网络管理员工具或需要进行复杂网络配置的应用可能是必要的,但也可能被恶意程序利用来破坏网络安全设置。

CAP_NET_BIND_SERVICE:

允许进程绑定到系统保留的低于 1024 的端口号。在传统的 Unix/Linux 系统中,只有具有 root 权限的进程才能绑定到这些特权端口,这个能力可以让特定的非 root 进程也能执行此操作,常用于一些特定的服务器应用,但如果被恶意程序滥用可能导致安全风险。

CAP_NET_RAW:

允许使用原始套接字(RAW sockets)。原始套接字可以让进程直接访问网络层数据包,用于实现一些底层网络协议分析工具或特定的网络应用,但也可能被用于恶意的网络攻击。

CAP_SYS_ADMIN:

这是一个非常强大的能力,类似于传统的 “根” 权限,它启用了过多的功能集,包括但不限于挂载文件系统、修改系统配置、管理进程等。由于其强大的权限,使用时需要非常谨慎,因为一旦被恶意利用可能对系统造成严重破坏。

CAP_SYS_BOOT:

允许进程重新启动主机。这是一个高风险的能力,只有在特定的系统管理场景下才应该被赋予,否则可能被恶意程序用来恶意重启系统,导致服务中断和数据丢失。

CAP_SYS_MODULE:

允许进程加载和卸载内核模块。内核模块可以扩展系统的功能,但也可能引入安全风险,如果恶意程序加载恶意内核模块,可能会破坏系统的稳定性和安全性。

CAP_SYS_TIME:

允许进程设置系统时钟。通常只有系统管理员或特定的时间同步服务才需要这个权限,恶意程序如果获得此能力可能会篡改系统时间,导致各种依赖准确时间的应用出现问题。

CAP_SYS_CHROOT:

允许进程使用 chroot 系统调用更改进程的根目录。这可以用于限制进程的文件系统访问范围,但如果被恶意利用可能用于逃避安全限制。

CAP_AUDIT_WRITE:

允许进程写入内核审计日志。这对于一些安全审计工具是必要的,但也可能被恶意程序用来篡改审计日志以掩盖其活动。

提升工具权限有隐患,可能被恶意用户利用,破坏系统、窃取敏感信息或完全控制整个系统。

 

 

 

十三、Kubernetes(k8s)

Kubernetes 通常简称为 K8s,是一个开源的容器编排平台。它可以自动化部署、扩展和管理容器化应用程序,在多个服务器上高效运行容器,确保应用的高可用性和可扩展性。

主要特点和功能包括:

容器编排:可以自动调度和管理容器在集群中的部署、运行和扩展。它确保容器按照所需的数量和资源要求在合适的节点上运行。

高可用性:通过复制和自动故障转移来确保应用程序的高可用性。如果一个容器或节点出现故障,Kubernetes 可以自动重新调度容器到其他健康的节点上。

服务发现和负载均衡:Kubernetes 可以为容器化应用提供服务发现机制,使得不同的容器能够相互找到对方。同时,它还提供了内置的负载均衡功能,将请求分发到多个容器实例上。

资源管理:有效地管理集群中的计算、存储和网络资源,确保容器能够获得所需的资源,同时避免资源浪费。

滚动更新和回滚:支持对应用程序进行零停机的滚动更新,并且在出现问题时可以方便地回滚到之前的版本。

可扩展性:可以轻松地扩展集群的规模,添加更多的节点来满足不断增长的应用需求。

Kubernetes 通常由一个主节点(控制平面)和多个工作节点组成。主节点负责管理整个集群的状态和调度决策,而工作节点则负责运行容器。

它广泛应用于各种规模的企业和组织中,帮助他们更高效地管理和运行容器化的应用程序,提高应用的可靠性、可扩展性和运维效率。

 

十四、Kubernetes 的核心概念

1. Pod:是 Kubernetes 中最小的可部署单元,可包含一个或多个容器,这些容器共享网络命名空间和存储卷,一起被调度和管理。

2. Deployment:用于管理 Pod 的副本数量和更新策略,确保应用始终保持指定数量的副本在运行,可实现滚动更新等功能。

3. Service:定义一组 Pod 的访问方式,提供稳定的 IP 地址和端口,让外部可以访问到一组 Pod。

4. Node:是 Kubernetes 中的工作节点,可以是物理服务器或虚拟机。每个 Node 上运行着 Kubelet 和容器运行时,负责管理容器的生命周期。

详解:

1. Pod:

在 Kubernetes 中,Pod 是最小的部署单元。

容器组合:一个 Pod 可以包含一个或多个紧密相关的容器。这些容器通常协同工作以实现一个特定的应用功能。例如,一个 Web 应用可能由一个运行 Web 服务器的容器和一个运行数据库的容器组成,它们可以被部署在同一个 Pod 中。

共享资源:Pod 中的容器共享网络命名空间,这意味着它们可以通过 localhost 相互通信。它们还可以共享存储卷,这使得多个容器可以访问相同的文件系统。这种共享使得容器之间的协作更加容易和高效。

调度和管理:Pod 作为一个整体被 Kubernetes 调度到合适的节点上运行。Kubernetes 会确保 Pod 中的容器在节点上正常运行,并在出现故障时进行自动恢复。

2. Deployment:

Deployment 主要用于管理应用的部署和更新。

副本数量管理:可以指定应用的副本数量,Deployment 会确保始终有指定数量的 Pod 在运行。如果某个 Pod 出现故障,Deployment 会自动创建一个新的 Pod 来替换它,以保持副本数量的稳定。例如,如果设置副本数量为 3,Deployment 会确保始终有三个 Pod 在运行。

更新策略:支持滚动更新等功能。在进行应用更新时,Deployment 可以逐步替换旧版本的 Pod 为新版本的 Pod,而不是一次性全部替换,从而实现零停机更新。滚动更新可以控制每次更新的 Pod 数量,确保应用在更新过程中仍然能够提供服务。

版本管理:可以方便地回滚到之前的版本。如果更新后出现问题,可以快速将应用恢复到之前的稳定版本。

3. Service:

Service 用于定义如何访问一组 Pod。

访问抽象:Service 为一组具有相同功能的 Pod 提供了一个稳定的访问方式。它定义了一个虚拟 IP 地址和端口,外部可以通过这个 IP 地址和端口访问到这组 Pod,而无需关心具体哪个 Pod 在响应请求。

负载均衡:Service 会自动将请求分发到后端的多个 Pod 上,实现负载均衡。这样可以提高应用的可用性和性能,避免单个 Pod 成为性能瓶颈。

服务发现:在 Kubernetes 集群中,Service 使得不同的组件能够方便地发现和访问其他服务。通过 Service 的名称和命名空间,可以轻松地找到对应的服务并进行通信。

4. Node:

Node 是 Kubernetes 集群中的工作节点。

物理或虚拟机:Node 可以是物理服务器,也可以是虚拟机。它们提供了计算、存储和网络资源,用于运行容器化应用。

Kubelet 和容器运行时:每个 Node 上运行着 Kubelet,它是 Kubernetes 在节点上的代理,负责管理节点上的容器生命周期。Kubelet 会与 Kubernetes 控制平面通信,接收任务并执行,如创建、删除和监控容器。同时,Node 上还需要安装容器运行时(如 Docker、Containerd 等),用于实际运行容器。

资源管理:Node 负责管理分配给它的资源,并向控制平面报告资源使用情况。Kubernetes 会根据资源需求和节点的可用资源,将 Pod 调度到合适的 Node 上运行。

 

 

十五、安装 Kubernetes

1. 安装 Minikube(用于本地开发的 Kubernetes 环境):下载安装包,根据操作系统选择合适版本,按照安装向导进行操作。

 

2. 启动 Minikube:打开终端,运行“minikube start”命令。

 

十六、部署应用到 Kubernetes

1. 创建一个 Deployment:“kubectl create deployment nginx --image=nginx”,部署 Nginx 服务器。

2. 查看 Deployment:“kubectl get deployments”。

3. 创建一个 Service:“kubectl expose deployment nginx --port=80 --type=NodePort”,让外部访问 Nginx 服务器。

4. 查看 Service:“kubectl get services”。

 

十七、访问应用

在 Service 信息中找到 NodePort 的端口号,使用“<Minikube IP>:<NodePort>”在浏览器中访问 Nginx 服务器。

 

十八、扩展应用

1. 扩展 Deployment 的副本数量:“kubectl scale deployment nginx --replicas=3”。

2. 查看副本数量:“kubectl get deployments”。

 

十九、更新应用

1. 更新 Deployment 的镜像:“kubectl set image deployment/nginx nginx=new-image:version”。

2. 查看更新进度:“kubectl rollout status deployment/nginx”。

 

二十、Git

Git 是一个分布式版本控制系统,用于跟踪文件的变化,方便团队协作开发软件项目。可以记录文件的历史版本,允许开发者在不同版本之间切换,并且可以合并多个开发者的修改。

 

二十一、安装 Git

在不同操作系统上安装方法不同:

 - Windows:从 Git 官方网站下载安装程序进行安装。

 - macOS:使用 Homebrew 等包管理器安装 Git。

 - Linux:通过系统的包管理器安装 Git,如在 Ubuntu 上使用“sudo apt-get install git”。

 

二十二、Git 的安全措施

1. 保护 Git 仓库很重要,因为它通常包含项目的源代码和敏感信息。

2. 使用强密码,为 Git 远程仓库设置强密码,避免简单或常用密码。

3. 限制访问权限,只授予必要人员访问权限,可使用 Git 提供的权限管理功能或第三方工具。

4. 避免提交敏感信息,若不小心提交,可使用“git rm --cached <文件名>”从暂存区删除,然后“git commit --amend”修改上一次提交。创建“.gitignore”文件,列出不需要被跟踪的文件和目录。

5. 确保与 Git 远程仓库的通信是加密的,可以使用 SSH 或 HTTPS 协议进行通信。

 

6. 定期进行安全审计,检查 Git 仓库的安全性,包括权限设置、敏感信息泄露等,可使用第三方工具。

7. 定期备份 Git 仓库,防止数据丢失,可以使用 Git 的备份工具或复制到其他存储设备中。

 

8. 克隆仓库:“git clone <远程仓库地址>”。

9. 处理冲突:当多个开发者同时修改同一个文件时,可能会出现冲突,在合并分支时需要手动解决冲突,然后提交更改。

 

10. 创建分支:“git branch <分支名>”。

11. 切换分支:“git checkout <分支名>”。

12. 合并分支:在一个分支上完成工作后,可将其合并到另一个分支。先切换到目标分支,然后使用“git merge <源分支名>”命令进行合并。

 

13. 初始化仓库:“git init”。

14. 添加文件:“git add <文件名>”或“git add.”。

15. 提交更改:“git commit -m "提交说明"”。

16. 查看状态:“git status”。

17. 查看历史记录:“git log”。

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

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

相关文章

【老白学 Java】Warship v2.0(七)

Warship v2.0&#xff08;七&#xff09; 文章来源&#xff1a;《Head First Java》修炼感悟。 上一篇文章中&#xff0c;Warship v2.0 项目最后一个类的完成&#xff0c;意味着整个项目也即将结束。 本篇文章的主要内容是编译、调试所有代码&#xff0c;以及进行代码整理。 如…

Elasticearch索引mapping写入、查看、修改

作者&#xff1a;京东物流 陈晓娟 一、ES Elasticsearch是一个流行的开源搜索引擎&#xff0c;它可以将大量数据快速存储和检索。Elasticsearch还提供了强大的实时分析和聚合查询功能&#xff0c;数据模式更加灵活。它不需要预先定义固定的数据结构&#xff0c;可以随时添加或修…

基于matlab程序实现人脸识别

1.人脸识别流程 1.1.1基本原理 基于YCbCr颜色空间的肤色模型进行肤色分割。在YCbCr色彩空间内对肤色进行了建模发现&#xff0c;肤色聚类区域在Cb—Cr子平面上的投影将缩减&#xff0c;与中心区域显著不同。采用这种方法的图像分割已经能够较为精确的将人脸和非人脸分割开来。…

家校通小程序实战教程04教师管理

目录 1 创建数据源2 搭建管理后台3 搭建查询条件4 功能测试总结 我们上一篇介绍了如何将学生加入班级&#xff0c;学生加入之后就需要教师加入了。教师分为任课老师和班主任&#xff0c;班主任相当于一个班级的管理员&#xff0c;日常可以发布各种任务&#xff0c;发布接龙&…

【力扣】541.反转字符串2

问题描述 思路解析 每当字符达到2*k的时候&#xff0c;判断&#xff0c;同时若剩余字符>k,只对前k个进行判断&#xff08;这是重点&#xff09;因为字符串是不可变变量&#xff0c;所以将其转化为字符串数组&#xff0c;最后才将结果重新转变为字符串 字符串->字符数组 …

【vue-router】Vue-router如何实现路由懒加载

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

hdlbits系列verilog解答(Exams/m2014 q4a)-86

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本节学习如何下图中的锁存器电路。 注意图中电路是锁存器,因此quartus会警告说推导出一个锁存器。 模块声明 module top_module ( input d, input ena, output q); 思路: 锁存器是一种对脉冲电平敏感的存储…

成都睿明智科技有限公司抖音电商服务的新引擎

在这个短视频风起云涌的时代&#xff0c;抖音不仅成为了人们休闲娱乐的首选&#xff0c;更是商家们竞相角逐的电商新蓝海。在这片充满机遇与挑战的海域中&#xff0c;成都睿明智科技有限公司如同一艘装备精良的航船&#xff0c;引领着众多企业向抖音电商的深水区进发。今天&…

leetcode:637二叉树的层平均值

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[3.00000,14.50000,11.00000] 解释&#xff1a;第 0 层的平均值为 …

Java多线程介绍及使用指南

“多线程”&#xff1a;并发 要介绍线程&#xff0c;首先要区分开程序、进程和线程这三者的区别。 程序&#xff1a;具有一定功能的代码的集合&#xff0c;但是是静态的&#xff0c;没有启动运行 进程&#xff1a;启动运行的程序【资源的分配单位】 线程&#xff1a;进程中的…

独家|京东调整职级序列体系

原有的M、P、T、S主序列将正式合并为新的专业主序列P。 作者|文昌龙 编辑|杨舟 据「市象」独家获悉&#xff0c;京东已在近日在内部宣布对职级序列体系进行调整&#xff0c;将原有的M、P、T、S主序列正式合并为新的专业主序列P&#xff0c;合并后的职级体系将沿用原有专业序…

mysql 存储结构的进化之路

文章目录 前言一、线性结构二、二叉树&#xff08;BST&#xff09;三、平衡二叉树&#xff08;AVL&#xff09;四、多路平衡查找树&#xff08;B Tree&#xff09;五、加强版多路平衡查找树&#xff08;B Tree&#xff09;总结 前言 树形结构是一种具有层次关系的数据结构&…

RHCE作业五-shell脚本

一要求&#xff1a; 通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 2.判断服务是否安装 ​ 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&#xff1b;重启服务 ​ 没有安装&#xff1b;安装对应的软件包 3.测试 判断服务…

Java基础之控制语句:开启编程逻辑之门

一、Java控制语句概述 Java 中的控制语句主要分为选择结构、循环结构和跳转语句三大类&#xff0c;它们在程序中起着至关重要的作用&#xff0c;能够决定程序的执行流程。 选择结构用于根据不同的条件执行不同的代码路径&#xff0c;主要包括 if 语句和 switch 语句。if 语句有…

CSS新特性(11)

一.计算盒子宽度calc函数&#xff0c;可以用加减乘除来计算 -*/ 让父盒子永远比子盒子小30像素 二.CSS3过渡transition搭配hover一起使用 该盒子宽度可以从200px到400px,谁做变化给谁加 不仅要写宽还要写高利用逗号&#xff0c;多个属性一起写都用逗号 既想要宽度变又想要高度…

MacOS 配置github密钥

MacOS 配置github密钥 1. 生成GitHub的SSH密钥对 ssh-keygen -t ed25519 -C "xxxxxxx.com" -f ~/.ssh/id_ed25519_github 其中 xxxxxxxxxxx.com 是注册github、gitee和gitlab的绑定账号的邮箱 -t ed25519:生成密钥的算法为ed25519&#xff08;ed25519比rsa速度快&…

linux cenos redis 单机部署

编译安装redis&#xff08;Centos&#xff09; 编译安装前先安装编译基础环境&#xff1a; yum install -y gcc gcc-c yum install -y readline-devel yum install -y zlib-devel yum -y install pcre yum -y install pcre-devel yum -y install openssl yum -y instal…

TI毫米波雷达(七)——high accurary示例分析(二)

概述 之前分析了IWR6843上的高精度测距程序框架&#xff0c;虽然可以看到大致的系统运行过程&#xff0c;但是总有一种“混乱”的感觉。TI为了展现ARM与DSP协作能力将如此“简单”的一个功能分布在多处理器上&#xff0c;结合BIOS以及semaphore、event、mailbox等机制&#xff…

鸿蒙修饰符

文章目录 一、引言1.1 什么是修饰符1.2 修饰符在鸿蒙开发中的重要性1.3 修饰符的作用机制 二、UI装饰类修饰符2.1 Styles修饰符2.1.1 基本概念和使用场景2.1.2 使用示例2.1.3 最佳实践 2.2 Extend修饰符2.2.1 基本概念2.2.2 使用示例2.2.3 Extend vs Styles 对比2.2.4 使用建议…

架构-微服务-服务配置

文章目录 前言一、配置中心介绍1. 什么是配置中心2. 解决方案 二、Nacos Config入门三、Nacos Config深入1. 配置动态刷新2. 配置共享 四、nacos服务配置的核心概念 前言 服务配置--Nacos Config‌ 微服务架构下关于配置文件的一些问题&#xff1a; 配置文件相对分散。在一个…