声明
学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章
笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负
云计算基础概念
一、云计算的定义
云计算是一种资源交付和使用模式,指通过网络获得应用所需的资源(硬件、平台、软件)。提供资源的网络被称为云。云中的资源在使用者看来是可以无限扩展的,并且可以随时获取,这种特性经常被比喻为像水电一样使用硬件资源,按需购买和使用1。广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务2。
二、云计算的实现
云计算常涉及通过互联网来提供动态易扩展而且经常是虚拟化、分布式计算、并行计算、效用计算、网络存储技术、虚拟化、负载均衡等传统和网络技术发展融合的产物2。
三、云计算的组件
(一)云端储存
这是云计算的组件之一1。
四、云计算的服务模式
(一)基础设施即服务(IaaS)
消费者通过Internet可以从完善的计算机基础设施获得服务2。
(二)平台即服务(PaaS)
PaaS的出现可以加快SaaS的发展,尤其是加快SaaS应用的开发速度2。
(三)软件即服务(SaaS)
这是最上层面向终端用户应用的服务,软件和数据可存储在数据中心2。
云计算搭建VS传统搭建
一、传统搭建应用程序的步骤
- 购买硬件设备:根据应用程序的需求,购买相应的服务器、存储设备和网络设备。
- 安装操作系统:在服务器上安装操作系统,如Windows Server、Linux等。
- 安装数据库管理系统:根据应用程序的需求,安装相应的数据库管理系统,如MySQL、Oracle等。
- 安装中间件:根据应用程序的需求,安装相应的中间件,如Web服务器、应用服务器等。
- 开发和部署应用程序:使用编程语言和开发工具编写应用程序代码,并将其部署到服务器上。
- 测试和优化:对应用程序进行全面的测试,确保其性能和稳定性。根据测试结果进行优化,提高应用程序的效率。
- 维护和更新:定期检查和维护硬件设备和软件系统,及时更新补丁和升级软件,确保系统的安全性和稳定性。
二、传统搭建应用程序的优势和劣势
优势
- 完全控制:开发者拥有对硬件和软件资源的完全控制权,可以根据需要进行定制和优化。
- 高安全性:由于数据和应用程序都在本地运行,相对来说更加安全,不容易受到外部攻击。
- 低延迟:由于数据和应用程序都在本地运行,网络延迟相对较低。
劣势
- 高成本:购买和维护硬件设备和软件系统需要投入大量的资金和人力资源。
- 扩展性差:当应用程序的用户数量增加时,需要购买更多的硬件设备来扩展容量,这可能会导致资源浪费和成本增加。
- 灵活性差:由于硬件和软件资源都是固定的,难以根据应用程序的需求进行灵活调整。
三、传统搭建应用程序与云计算的对比
- 成本:传统搭建应用程序需要购买和维护硬件设备和软件系统,而云计算则采用按需付费的模式,可以降低初始投资和运营成本。
- 扩展性:云计算可以根据应用程序的需求进行灵活扩展,而传统搭建应用程序则需要购买更多的硬件设备来扩展容量。
- 灵活性:云计算可以根据应用程序的需求进行灵活调整,而传统搭建应用程序则难以实现这种灵活性。
- 安全性:云计算提供商通常会提供多层次的安全保障措施,而传统搭建应用程序则需要开发者自行负责安全问题。
- 维护和管理:云计算提供商通常会负责硬件和软件系统的维护和管理,而传统搭建应用程序则需要开发者自行负责这些问题。
云服务厂家:提供包括云服务器、云数据库、云存储、云安全等服务
阿里云 | 阿里云-计算,为了无法计算的价值 |
腾讯云 | 腾讯云 产业智变·云启未来 - 腾讯 |
华为云 | 共建智能世界云底座-华为云 |
天翼云 | 中国电信-天翼云,云网融合,安全可信,专享定制 |
金山云 | https://www.kingsoftcloud.com/ |
百度云 | 百度智能云-云智一体深入产业 |
京东云 | 京东云 |
UCloud | UCloud优刻得-首家公有云科创板上市公司 |
青云 | 第一家混合云上市公司 | 青云QingCloud |
世纪互联 | Bibi & Baba - Coming Soon |
一,云架构介绍
云架构是指利用云计算技术构建的IT基础设施架构。它通过虚拟化、分布式计算等技术,将计算资源、存储资源、网络资源等整合在一起,并通过互联网向用户提供服务。云架构具有高度的灵活性、可扩展性和可靠性,能够根据业务需求的变化快速调整资源,提供持续的服务保障。
- 底层技术支撑网络空间安全防御与进攻的实现:
就防御角度而言,了解了底层技术才能构建防御体系;就进攻而言,了解底层技术才能发现漏洞进而开发出漏洞利用方法。
- 云架构历史沿革
从传统系统构建开始,随着处理的升级迭代,虚拟机出现了,其实现了将一台机器的资源拆分成多台机器使用,实现了裸机基础设施到虚拟机基础设施的转变;容器技术的出场,实现了服务器,网络和存储的虚拟交付。选择这一切基础设施被称为“云”,它是众多种技术的集合
二,云服务
云作为一种 IT 基础设施系统,它将资源的创建抽象在容错、地理分布和可扩展的物理基础设施之上。并以服务器的形式按需求交付能力,非常易于使用,可以自动创建服务器、存储、网络等等。云基础架构必须稳定,不能频繁出现中断。地理分布的云基础设施能够提高容错能力,而且云必须能够快速扩展,以满足各种需求
云计算的部署模型主要包括以下几种:
- 公有云:由第三方云服务提供商提供,面向所有用户开放。用户可以通过互联网访问这些云服务。
- 私有云:由企业内部或第三方托管,专门为特定组织或用户提供。私有云通常用于处理敏感数据或满足特定的合规要求。
- 混合云:结合了公有云和私有云的优点,通过统一的管理和协调,实现资源的最优配置和利用。
- 社区云:为特定社区或行业提供服务,满足特定行业的合规要求和业务需求。
一、OpenStack的基本概念
- 开源项目:OpenStack是一个开源项目,任何人都可以访问其源代码,并对其进行修改和分发。这种开放性使得OpenStack能够吸引全球开发者和企业的参与,共同推动其发展。
- 云计算平台:OpenStack提供了一个云计算平台,用于构建和管理公共云和私有云。它通过虚拟化技术将物理硬件资源抽象成共享资源池,并通过互联网按需分配给用户。
- 模块化架构:OpenStack采用了模块化架构,由多个独立的组件组成。这些组件可以相互协作,提供计算、存储、网络等资源的管理。用户可以根据需要选择和组合不同的组件,以满足特定的业务需求。
二、OpenStack的主要组件
- Nova(计算):负责提供计算资源,包括虚拟机的创建、管理和删除。Nova是OpenStack的核心组件之一,提供了丰富的API接口,方便用户对计算资源进行操作。
- Swift(对象存储):提供对象存储服务,允许用户存储和检索对象(如文件)。Swift适用于一次写入、多次读取的场景,具有高可用性和可扩展性。
- Cinder(块存储):提供块存储服务,允许用户创建和管理持久存储卷。Cinder支持多种存储后端,包括本地存储、网络存储和云存储。
- Neutron(网络):提供网络连接服务,允许用户创建和管理虚拟网络。Neutron支持多种网络技术和协议,包括VLAN、GRE、 VXLAN等。
- Keystone(身份认证):提供身份认证和授权服务,确保只有授权用户才能访问和使用OpenStack资源。Keystone支持多种身份认证方式,包括用户名和密码、OAuth、LDAP等。
- Glance(镜像服务):提供虚拟机镜像的存储、查询和检索服务。Glance允许用户上传和共享镜像,并为虚拟机提供启动镜像。
三、OpenStack的应用场景
- 构建私有云:企业可以使用OpenStack构建自己的私有云,以提高资源利用率和业务灵活性。私有云通常用于处理敏感数据或满足特定的合规要求。
- 构建公共云:云服务提供商可以使用OpenStack构建公共云,向外部用户提供计算、存储和网络资源的租赁服务。公共云通常用于提供弹性的计算资源,满足不同用户的需求。
- 混合云部署:企业可以使用OpenStack构建混合云,将私有云和公共云的优势结合起来。混合云通常用于实现资源的最优配置和利用,满足不同业务场景的需求。
三,云分类
1. 基础设施即服务(IaaS):就像提供建筑材料和工具,让你可以自己搭建房子。
2. 平台即服务(PaaS):类似有了基本框架的房子,你只需进行装修和布置。
3. 软件即服务(SaaS):直接给你一个装修好可以直接入住的房子。
四,责任共享模型概述
责任共享模型是云计算生态系统中的一种协商一致的框架,界定了云服务提供商(CSP)和客户之间的义务。该模型将责任分配为:CSP负责云服务的底层基础设施和安全,而客户负责在其之上部署和管理应用程序及数据。这种分担有助于优化云计算的效率和成本效益,同时确保数据的安全和隐私受到保护
云服务在提供容错和扩展的同时,也在不同层面增加了安全性的模糊性。如果是 AWS 程序漏洞导致大量数据泄露,AWS 不承担责任。但如果 AWS 数据中心物理安全遭到破坏,客户数据被盗取,AWS 就得承担责任。
五、云架构
云架构是指云计算系统的结构和设计,它定义了如何组织和管理计算资源以提供云服务。云架构通常分为几个关键层次,每个层次都有其特定的功能和责任。以下是云架构的主要组成部分:
1. 服务层(SaaS, PaaS, IaaS)
a. 软件即服务(SaaS)
- 定义:SaaS层将应用程序作为服务提供给用户,通常通过Web浏览器访问。
- 功能:提供现成的应用程序,用户无需关心底层基础设施。
- 优势:易于使用,无需安装和维护软件,按需付费。
b. 平台即服务(PaaS)
- 定义:PaaS层提供开发和部署应用程序所需的平台和服务。
- 功能:提供操作系统、中间件、数据库和开发工具。
- 优势:简化了应用程序的开发和部署过程,用户只需关注应用程序本身。
c. 基础设施即服务(IaaS)
- 定义:IaaS层提供基础的计算资源,如虚拟机、存储和网络。
- 功能:提供虚拟化的计算资源,用户可以自由选择和配置这些资源。
- 优势:高度灵活,用户可以根据需求动态调整资源。
2. 管理层
a. 云管理层的功能
- 安全性:确保云环境的安全,包括数据保护、身份验证和访问控制。
- 监控和日志:实时监控云资源的使用情况,并记录日志以便审计和故障排除。
- 自动化:通过自动化工具和脚本简化云资源的管理和部署。
- 计费和计量:跟踪资源使用情况并生成账单,确保用户按使用量付费。
b. 云管理层的优势
- 高效管理:通过集中化的管理平台,简化了云资源的管理。
- 提高可靠性:通过监控和自动化,提高了系统的可靠性和可用性。
- 成本优化:通过精确的计费和资源管理,帮助用户优化成本。
3. 物理层
a. 数据中心
- 定义:数据中心是云服务的物理基础,包含服务器、存储设备和网络设备。
- 功能:提供计算、存储和网络资源,并确保这些资源的高可用性和安全性。
- 优势:通过冗余和备份机制,提高系统的可靠性和灾难恢复能力。
b. 网络基础设施
- 定义:网络基础设施包括路由器、交换机和防火墙等设备。
- 功能:提供网络连接和数据传输,并确保网络安全。
- 优势:通过高效的网络架构,提高数据传输的速度和可靠性。
4. 安全层
a. 安全策略和措施
- 定义:安全层包括所有用于保护云环境的策略和措施。
- 功能:防止未经授权的访问、数据泄露和网络攻击。
- 优势:通过多层次的安全措施,确保云环境的安全性和合规性。
六、云架构设计
云架构设计是指在云计算环境中,设计和构建系统架构以满足业务和技术需求。云架构设计的目标是创建一个高效、可靠、安全且可扩展的系统架构。以下是一些关键的云架构设计原则和步骤:
1. 架构设计流程
根据搜索结果1,云架构设计通常包括以下几个阶段:
a. 需求分析阶段
- 输入:用户需求和痛点。
- 输出:需求分析表。
- 功能:分析用户需求,确定系统需要解决的问题。
b. 架构设计阶段
- 输入:需求分析表。
- 输出:架构设计方案。
- 功能:根据需求分析表,匹配合适的设计模式,形成完整的架构设计方案。
c. 评估改进阶段
- 输入:已完成的架构设计方案。
- 输出:经过评估和改进的架构设计方案。
- 功能:对架构设计方案进行评估,参考良好的架构设计原则进行改进。
d. 交付实施阶段
- 输入:经过评估改进的架构设计方案。
- 输出:在云平台中搭建的环境和部署的业务。
- 功能:根据架构设计方案在云平台中搭建环境、部署业务,提供符合架构设计的云端环境。
e. 持续运营阶段
- 输入:解决方案和当前业务运行状况。
- 输出:改进措施和重构改进的方案。
- 功能:持续巡检、分析、评估,输出改进措施,进行重构改进,并根据新需求提供方案。
2. 架构设计原则
云架构设计需要遵循一定的原则,这些原则代表了架构设计中需要考虑的不同角度。根据搜索结果1,架构设计的六大原则包括:
原则 | 描述 |
合理部署 | 确保资源的合理分配和使用,避免过度或不足的资源配置。 |
业务持续 | 确保业务的连续性,即使在故障或维护期间也能提供服务。 |
弹性扩展 | 系统能够根据需求动态扩展或缩减资源,以应对负载变化。 |
性能效率 | 系统需要具备高性能和高效率,以提供快速响应和低延迟。 |
安全合规 | 系统需要符合安全标准和法规,保护数据和隐私。 |
持续运营 | 系统需要具备持续运营的能力,包括监控、维护和优化。 |
3. 云原生架构设计
云原生架构是一种利用云计算技术构建和运行应用程序的方法。根据搜索结果2,阿里巴巴提出了云原生架构设计方法——ACNA(Alibaba Cloud Native Architecting),该方法结合了企业的核心关注点、企业组织与IT文化、工程实施能力等多个方面。
a. ACNA的作用与目的
- 提升研发团队的能力:实现成本、进度计划、功能和质量等目标。
- 指导研发团队控制研发和运维过程:优化IT组织结构并打造更加高效的软件工程流程机制。
- 引导研发团队:在确定云原生架构的成熟度以及定位云原生化方面关键问题的过程中选择改进策略。
b. ACNA的实现步骤
- 确定企业当前所处的云原生架构成熟度级别。
- 了解会对改进生产质量和优化过程起关键作用的因素。
- 将工作重点集中在有限的几个关键目标上:从而有效达到优化现有研发流程的效果,进而持续改进产品。
4. 云安全架构设计
云安全架构设计是云架构设计的重要组成部分。根据搜索结果3,云安全架构设计涉及以下几个方面:
- 信息治理:治理云中的数据,确保数据的机密性、完整性和可用性。
- 保护管理平台和管理结构:包括Web控制台和API。
- 基础设施安全:包括网络、负载安全和混合云安全考虑。
- 虚拟化及容器技术:确保虚拟化管理系统、容器和软件定义的网络的安全性。
- 事件响应、通告和补救:适当的和充分的事件检测、响应、通告和补救。
- 保护在云上运行或在云中开发的应用软件。
- 数据安全和加密:实施数据的安全和加密控制,并保证可扩展的密钥管理。
- 身份、授权和访问管理:管理身份和利用目录服务来提供访问控制。
七,云服务集成部署
使用持续集成和持续交付(CICD)管道来构建环境,包括测试、测量和扫描代码更改的自动化测试和部署(GitOps)。要做到有弹性可靠,即任何单点故障都有故障转移或其他机制,让业务能持续提供(这叫冗余)。全球负载均衡(GSLB,比如智能 DNS、GTM)能解决客户单访问的单点故障隐患。还要平衡控制,控制保护系统免受漏洞和内部攻击的组件,应平衡控制和可用性。
八、云设计模式
云架构设计不必从头开始,采用已检验的设计模式是最佳选择。
1. 微服务架构模式
微服务架构是一种设计模式,其中应用程序由一组小型、独立的服务组成,每个服务都负责特定的功能,并通过API进行通信。这种模式可以实现服务之间的独立性,打破紧密耦合的组件。
2. Serverless架构模式
Serverless架构允许开发人员专注于编写业务逻辑,而不必担心服务器管理和运维。在这种模式下,计算资源是按需分配的,开发者只需要为实际使用的资源付费。
3. 计算存储分离模式
在这种模式下,计算和存储被分别进行管理和扩展,以提高系统的弹性和效率。
4. 可观测性架构模式
为了有效地监控和调试复杂的分布式系统,需要实施日志记录、度量指标和分布式跟踪等可观测性工具。
5. 事件驱动架构模式
事件驱动架构通过异步消息传递来解耦服务之间的交互,使得系统更加灵活和响应迅速。
6. 网关架构模式
网关作为系统对外的单一入口点,可以处理身份验证、路由请求、限流、安全策略等职责。
7. 混沌工程模式
混沌工程通过对生产环境引入可控的故障,以评估系统在压力条件下的行为和可靠性。
8. 边车/副车模式
边车/副车模式用于将主要应用程序的一些外围功能或附加功能抽象为独立的微服务。这种模式可以实现服务之间的独立性,打破紧密耦合的组件。
9. 大使模式
大使模式经常用于扩展现有服务的网络功能,特别是对于那些过于古老或复杂且无法修改的服务。大使服务可以被视为与客户端共存的一个进程外代理。
10. 散点/聚集模式
这种模式用于并行处理大规模数据集,要点是有一个聚合器,汇总来自不同服务的响应并提供报价。
九、安全控制
1网络控制:传统架构用防火墙实现网络控制,云环境网络抽象为 SDN、SD WAN。SDN 可以对不同的接口(如 API 或 GUI)设置网络规则。通过 mTLS 不仅能加密流量,还能对客户端进行身份验证,有证书才能访问微服务。不正确的访问管理可导致权限提升,甚至破坏整个基础设施。现代访问管理系统多使用令牌进行访问控制,提供对服务的短时访问权。JWT 通常用于访问云端资源,伪造和破解密码是常见攻击手段。另一种类型的权限控制机制是强制访问控制 MAC。
身份管理:企业通常用 AD、LDAP 进行身份管理。AWS IAM 是身份和访问管理的公共云服务。Google 联盟认证 OIDC 经常用于 2FA。云身份提供者(IdP)作为真实身份来源,是更安全的解决方案,比如 Azure AD。
1. 身份认证与授权
身份认证与授权是云计算安全控制的关键要素。通过使用强大的身份验证机制,如多因素身份验证和单一登录(SSO),可以限制用户访问权限,并确保只有经过身份认证的用户才能访问敏感数据和资源。
2. 数据加密
数据加密是保护云计算中数据安全性的重要措施。云服务提供商通常会使用加密算法来加密数据,使其在传输和存储过程中得到保护。同时,对于敏感数据,还可以实施端到端加密,确保只有授权的用户能够解密和访问数据。
3. 网络安全防护
云计算服务必须采取有效的网络安全防护措施来防止入侵和恶意攻击。这包括防火墙、入侵检测系统(IDS)、入侵防御系统(IPS)等。通过监控和过滤网络流量,可以防止恶意攻击者访问和损害云环境。
4. 监控与响应机制
云计算环境应建立有效的监控系统来检测潜在的恶意活动,并实施相应的响应机制。这包括实时监控网络流量、日志记录、异常检测等,以及建立紧急响应计划,及时应对安全事件和恶意攻击。
5. 虚拟化安全
虚拟化技术是云计算的核心技术之一,它可以让多台物理服务器共享同一硬件资源。为了防范虚拟化安全风险,云服务提供商应该采用专门的虚拟化安全产品,例如虚拟机隔离、虚拟机监控等工具。
6. 合规性和监管
由于云计算涉及到跨国数据传输和存储,因此必须遵守不同的法律法规和行业标准。同时,也需要对云计算平台进行严格的监管以确保其安全性。
十、容器与云
虚拟化中每个 VM 需要运行自己的操作系统,大大增加了总体开销。容器化是更现代的架构,容器共享内核与硬件,更快、更小、更高效。容器是对虚拟化的补充,而非取代。容器的系统开销更小,可以进一步分离应用组件,比如搜索、登录、查询、订单功能分开。容器使用映像作为模板生成,映像相当于计算机硬盘。容器使用不同发行版文件加载内核,运行容器。
容器是什么?
容器是一种轻量级的虚拟化技术,它允许开发者将应用程序及其所有依赖项打包在一起,形成一个独立的单元。这个单元可以在任何支持容器运行的环境中部署和运行。容器的优点在于其高效性、可移植性和灵活性。
云计算是什么?
云计算是一种通过互联网提供的计算服务,包括服务器、存储、数据库、网络、软件等。用户可以按需使用这些资源,而无需购买和维护自己的硬件设备。云计算的主要优点在于其弹性和成本效益。
容器在云计算中的应用
容器技术在云计算中的应用非常广泛。以下是一些主要的应用场景:
- 微服务架构:容器非常适合用于实现微服务架构,每个微服务可以打包成一个独立的容器,便于管理和部署。
- DevOps和CI/CD:容器与持续集成/持续交付(CI/CD)管道结合,可以实现自动化测试和部署,提高开发效率。
- 弹性伸缩:云计算平台可以根据需求自动调整容器的数量,实现资源的弹性伸缩。
- 跨云兼容性:容器的可移植性使得应用程序可以在不同的云平台之间迁移,增加了灵活性和冗余性。
容器编排工具
在云计算环境中,管理大量的容器可能会变得复杂。为此,容器编排工具如Kubernetes、Docker Swarm和Apache Mesos被广泛应用。这些工具可以帮助自动化容器的部署、扩展和管理,简化了云计算环境中的操作
实验一:docker
Docker是一种开源的容器化平台,它可以让开发者将应用程序及其依赖项打包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上。Docker容器是完全使用沙箱机制的,相互之间不会有任何接口。Docker技术在云计算中的应用非常广泛,它可以简化应用部署和管理,提高开发效率,降低运维成本,并提高系统的可扩展性和弹性。此外,Docker还支持基于微服务架构的应用开发,使得开发者可以更容易地对各个微服务进行独立开发、测试和部署。
1,在 Ubuntu 上生成 CentOS 7 容器,可以使用 Docker 这个流行的容器化工具。步骤如下:
更新软件源 apt-get update
安装Docker apt-get install docker.io
2,首先就要做加速器
国内能用的Docker镜像源【2024最新持续更新】-CSDN博客
修改docker的配置文件
重启docker服务使配置生效
systemctl daemon-reload
sudo systemctl restart docker
可以看到配置生效
3,拉取 CentOS 7 的官方 Docker 镜像:docker pull centos:7
4,运行一个基于CentOS7镜像的容器
docker run -it --name zzz centos:7 /bin/bash
5,使用docker搭建http+Apache服务
首先下载httpd的镜像
创建 Apache 容器后台运行:
docker container run -d --rm -p 8080:80 httpd
通过访问192.168.23.137:8080证明搭建服务成功
7,docker常用命令演示
1,查看所有容器 docker container ls
2,进入特定容器 docker exec -it <container_id> /bin/bash
docker exec 是 Docker 命令,用于在运行的容器中执行命令。
-it 选项表示以交互模式运行命令,并分配一个伪终端。
<container_id> 是容器的 ID 或名称,可以通过 docker ps 命令查看。
/bin/bash 是要在容器中执行的命令,这里是指启动一个 Bash shell。
命令exit用于退出这个容器bash shell
3,停止容器 dochker container stop <container_id>
4,挂载宿主机目录运行容器
docker container run -d --rm -p 8080:80 -v /home/user/webroot/:/usr/local/apache2/htdocs/ httpd
- -d: 以分离模式(后台运行)启动容器。
- --rm: 容器退出后自动删除容器。
- -p 8080:80: 将主机的8080端口映射到容器的80端口。
- -v /home/user/webroot/:/usr/local/apache2/htdocs/: 将主机的/home/user/webroot/目录挂载到容器的/usr/local/apache2/htdocs/目录。
- httpd: 使用httpd镜像来创建容器。
功能描述
该命令的作用是启动一个Apache HTTP服务器容器,并将主机的/home/user/webroot/目录挂载到容器的/usr/local/apache2/htdocs/目录,这样容器内的Apache服务器将从这个目录提供网页内容。同时,主机的8080端口会被映射到容器的80端口,使得用户可以通过访问主机的8080端口来访问Apache服务器。容器在退出后会自动删除。
5,侦听宿主机 80 端口运行容器
docker container run -d --rm --network host -v /home/user/webroot/:/usr/local/apache2/htdocs/ httpd
--network host: 使用主机的网络命名空间,容器将共享主机的网络接口。
6,列出所有正在运行的容器 docker ps
7,查看特定容器的进程信息 docker top <container_name_or_id>
实验二,Podman
Podman是一种开源的容器管理工具,它提供了与Docker类似的功能,但有一些关键的区别和优势。Podman由Red Hat主导开发,不需要守护进程(daemon),并且可以在没有root权限的情况下运行。这些特性使得Podman在某些场景下比Docker更加安全和轻量。
主要特点
- 无守护进程: Podman不需要守护进程,这减少了潜在的安全漏洞。
- Rootless模式: Podman可以在没有root权限的情况下运行,进一步提高了安全性。
- 与Docker兼容: Podman使用与Docker相同的镜像格式,并且其命令行工具与Docker非常相似,使得从Docker迁移到Podman相对容易。
- 集成Kubernetes: Podman可以直接运行Kubernetes Pods,而不仅仅是单个容器。
使用场景
Podman适用于各种容器管理场景,包括但不限于:
- 开发环境: 开发人员可以使用Podman快速搭建和管理开发环境。
- 生产环境: 在生产环境中,Podman可以用于部署和运行应用程序,提供良好的隔离性和资源管理能力。
- CI/CD管道: Podman可以集成到CI/CD管道中,用于构建、测试和部署容器化应用。
基本操作
以下是一些常见的Podman命令,它们与Docker命令非常相似:
- podman run: 创建并启动一个容器。
- podman start: 启动一个已停止的容器。
- podman stop: 停止一个正在运行的容器。
- podman ps: 列出所有正在运行的容器。
- podman rm: 删除一个或多个容器。
- podman pull: 从镜像仓库拉取镜像。
- podman push: 将镜像推送到镜像仓库。
高级特性
- 构建镜像: 使用Podmanfile(类似于Dockerfile)来构建自定义镜像。
- 管理网络: 创建和管理容器网络。
- 数据卷: 管理持久化数据卷,以便在容器之间共享数据。
安全与性能
由于Podman不需要守护进程,并且支持Rootless模式,它在安全性方面有显著的优势。此外,Podman的轻量级设计也有助于提高性能和减少资源消耗。
1,在ubuntu-24.0.1上安装配置podman
Podman入门全指南:安装、配置与运行容器-CSDN博客
更新软件包 apt-get updata
安装软件包 apt-get -y install podman
验证安装成功 podman --version
配置存储
Podman 使用存储配置文件来管理容器和镜像的存储设置。存储配置文件通常位于 /etc/containers/storage.conf。
修改存储驱动:
Podman 默认使用 overlay 存储驱动,但您可以根据需要更改其他存储驱动,例如 vfs,尤其是在不支持 overlay 的旧内核上。
编辑/etc/containers/storage.conf 文件,并找到 [storage] 部分,修改 driver 选项;
配置镜像大小限制:
设置新建容器的最大存储空间。在 storage.conf 文件中,添加或修改 size 选项
配置网络
编辑一个podman-network.conflist 的文件,并配置一个桥接网络:
vim /etc/cni/net.d/podman-network.conflist
{
"cniVersion": "0.4.0",
"name": "podman",
"plugins": [
{
"type": "bridge",
"bridge": "cni-podman0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"ranges": [
[{"subnet": "10.88.0.0/16"}]
],
"routes": [{"dst": "0.0.0.0/0"}]
}
},
{
"type": "portmap",
"capabilities": {"portMappings": true}
}
]
}
重启podman以应用网络配置 systrmctl restart podman
管理镜像仓库设置
Podman 的镜像仓库配置位于 /etc/containers/registries.conf。
配置镜像仓库:
在此文件中指定和修改镜像仓库,包括镜像的搜索顺序和镜像拉取策略。
打开 registries.conf 并配置:
registries.search 定义搜索镜像时查询的仓库列表。
registries.insecure 列出了允许通过非 HTTPS 连接访问的仓库(通常不推荐)。
registries.block 可以阻止访问特定的仓库。
这个时候再查看服务运行状态 systemctl status podman.service
解决方法就是selinux配置为disabled,这个服务会阻止podman的一些服务
podman常用命令演示
运行容器sudo podman run -d --r-m --network host httpd
创建空 pod podman pod create --name wha
在 pod 中运行容器 podman run -d --pod wha httpd
在 pod 中运行可找东西的工具并互动
podman run -pod wha -it alpine/curl /bin/asho
十一,容器的真相
Linux 没有单一被称为“容器”的特性。实际上,“容器”是阻止进程访问其他进程和资源的特性组合,发生在内核级别,可以控制其限制级别。
容器的历史:
- 197x 年代引入 chroot,可以指示进程的新根目录,但不完美。命名空间可实现每个进程分离网络、进程和其他命名空间。
- 1999 年 FreeBSD 发布 Jails,在 chroot 之上提供更多限制(Linux 不支持)。
- 2002 年引入命名空间,分离内核资源。
- 2006 年谷歌引入进程容器,后被称为 cgroup,可限制特定进程的内存和 CPU 资源。结合 cgroup 和命名空间发布了 Linux 容器(LXC)项目。
Linux 中有八种用户命名空间:挂载、进程 ID、网络、进程间通信、UTS、用户 ID、控制组、时间、syslog。
容器技术在现代软件开发和运维中扮演着至关重要的角色。为了深入理解容器的真相,我们需要从多个角度来探讨这一主题。
容器的基本概念
容器是一种轻量级的虚拟化技术,它允许开发者将应用程序及其依赖项打包在一起,形成一个独立的单元。这个单元可以在不同的环境中运行,而不必担心环境差异带来的问题。
容器与虚拟机的区别
容器与传统的虚拟机(VM)有一些关键的区别:
- 资源效率: 容器共享主机的操作系统内核,因此比虚拟机更加轻量和高效。
- 启动速度: 容器启动速度通常比虚拟机快得多,因为它们不需要引导完整的操作系统。
- 隔离性: 容器提供了进程级别的隔离,而虚拟机则提供了完整的操作系统级别的隔离。
容器的主要用途
容器技术广泛应用于以下几个领域:
- 持续集成和持续交付(CI/CD): 容器使得应用程序的构建、测试和部署过程更加自动化和高效。
- 微服务架构: 容器非常适合用于实现微服务架构,每个服务可以独立开发、部署和扩展。
- 跨平台部署: 容器确保应用程序可以在不同的环境中一致运行,从而简化了跨平台部署的复杂性。
容器技术的挑战
尽管容器技术带来了许多好处,但也面临一些挑战:
- 安全性: 容器共享主机的操作系统内核,这意味着如果主机被攻破,所有容器都可能受到影响。
- 存储管理: 容器通常是短暂的,如何有效地管理和持久化数据是一个需要解决的问题。
- 网络复杂性: 在大规模的容器集群中,管理网络通信和确保网络安全是一项复杂的任务。
容器技术的未来展望
随着云计算和边缘计算的快速发展,容器技术将继续演进。未来,我们可以预见以下几个趋势:
- 更高的自动化水平: 容器编排工具(如Kubernetes)将进一步发展,提供更高水平的自动化和智能化管理。
- 增强的安全性: 新的安全技术和策略将被引入,以提高容器的安全性和隔离性。
- 更广泛的生态系统: 容器技术将与更多的开发工具、监控系统和部署平台集成,形成一个更加完善的生态系统。
十二,Capabilities
在Linux操作系统中,Capabilities机制被引入以实现对root权限的细粒度控制。这种机制将原本与root用户(UID=0)关联的特权细分为多个独立的功能组,每个功能组都可以独立启用或禁用。Capabilities作为线程(在Linux中,进程和线程并没有本质区别)的属性存在,其目的是为了在执行特权操作时,能够根据线程的Effective集合来决定是否允许执行这些操作。
Docker 默认不使用用户命名空间。为防止特权内核调用,它使用内核 capabilities 和 seccomp 配置文件限制访问。Linux 有特权或非特权进程。非特权进程有正确权限可写入系统文件,特权进程几乎无所不能。当非特权用户只需要特殊权限时,可使用 Capabilities。Linux 将一些系统级任务分组为 40 多个类别,称为 Capabilities。
常见 Capabilities:
- CAP_CHOWN:允许进程修改文件所有者。
- CAP_NET_ADMIN:对网络配置执行管理任务。
- CAP_NET_BIND_SERVICE:允许绑定低于 1024 的端口。
- CAP_NET_RAW:允许使用 RAW 套接字。
- CAP_SYS_ADMIN:“根”权限(危险),启用过多功能集。
- CAP_SYS_BOOT:允许重新启动主机。
- CAP_SYS_MODULE:允许加载和卸载内核模块。
- CAP_SYS_TIME:允许进程设置系统时钟。
- CAP_SYS_CHROOT:允许使用 chroot。
- CAP_AUDIT_WRITE:允许写入内核审计日志。
提升工具权限有隐患,可能被恶意用户利用,破坏系统、窃取敏感信息或完全控制整个系统
十三、Kubernetes(k8s)
Kubernetes 通常简称为 K8s,是一个开源的容器编排平台,最初由Google开发,现在由云原生计算基金会(CNCF)维护。
它可以自动化部署、扩展和管理容器化应用程序,在多个服务器上高效运行容器,确保应用的高可用性和可扩展性。Kubernetes已经成为现代云计算和DevOps实践中不可或缺的一部分。
十四、Kubernetes 的核心概念
核心概念
- Pods:
- Kubernetes中最小的可部署单元。
- 包含一个或多个紧密相关的容器,共享网络命名空间和存储卷。
- Nodes:
- Kubernetes集群中的工作节点,负责运行Pods。
- Deployments:
- 用于定义Pods和副本数量的高级控制器。
- 支持滚动更新和回滚。
- Services:
- 定义了一组Pods的访问方式,并提供负载均衡。
- ReplicaSets:
- 确保指定数量的Pod副本始终在运行。
- Namespaces:
- 提供了一种机制来分隔集群中的资源。
- Labels和Selectors:
- 用于标记和选择资源对象。
- ConfigMaps和Secrets:
- 用于存储配置数据和敏感信息。
资源管理
- YAML配置文件:
- 使用YAML格式定义Kubernetes资源,如Deployments和Services。
- 包含apiVersion、kind、metadata和spec等字段。
- kubectl命令:
- Kubernetes的命令行工具,用于与集群交互。
- 常用命令包括kubectl get、kubectl create、kubectl delete等。
高级特性
- 水平扩展与滚动更新:
- 通过修改Deployment的副本数量,实现应用程序的水平扩展。
- 支持无中断的滚动更新和回滚。
- 服务发现与负载均衡:
- 通过Service资源实现服务发现和负载均衡。
- 支持多种类型的Service,如ClusterIP、NodePort和LoadBalancer。
- 高可用性:
- 通过多节点集群、Master节点的高可用配置以及自动故障转移实现高可用性。
- 监控与日志:
- 提供丰富的监控和日志功能,如Heapster、Prometheus和Grafana等监控工具,以及Fluentd、ELK等日志收集和分析工具。
- Ingress:
- 管理外部访问到集群服务的HTTP和HTTPS路由。
实战应用
- 搭建多节点集群:
- 在生产环境中,通常需要搭建多节点的Kubernetes集群以确保高可用性和负载均衡。
- 部署应用程序:
- 使用YAML配置文件定义Deployment和Service,并通过kubectl命令将其部署到Kubernetes集群中。
- 监控与故障排除:
- 利用Kubernetes提供的监控和日志功能,对集群进行实时监控和故障排除。
十五、安装 Kubernetes
Kubernetes安装方法及使用教程(史上最全,不全不要钱系列)-CSDN博客
一、安装前准备
(一)环境要求
- 操作系统:CentOS7.x - 86_x64 版本较为常用1。
- 硬件配置:内存至少2GB,CPU至少2核1。
- 集群内机器间要能相互通信,并且可以访问外网(因为需要拉取镜像)1。
- 禁止swap分区:
- 临时关闭:执行 swapoff -a 命令1。
- 永久关闭:编辑 /etc/fstab 文件,将与swap相关的行注释掉,例如使用命令 sed -ri 's/.*swap.*/#&/' /etc/fstab 1。
(二)其他准备工作
- 关闭防火墙:
- 停止防火墙服务:systemctl stop firewalld 。
- 禁止防火墙开机自启:systemctl disable firewalld 1。
- 关闭SELinux:
- 编辑配置文件 /etc/selinux/config,将 enforcing 改为 disabled :sed -i 's/enforcing/disabled/' /etc/selinux/config 。
- 也可临时设置为宽容模式:setenforce 0 1。
- 主机名设置:在 /etc/hosts 文件中添加集群内各主机的主机名与IP对应
- 设置网桥参数:
- 创建 /etc/sysctl.d/k8s.conf 文件,内容如下:
net.bridge.bridge - nf - call - ip6tables = 1
net.bridge.bridge - nf - call - iptables = 1
- 使配置生效:`sysctl --system` [1]()。
- 时间同步:安装 ntpdate 并同步时间,例如执行 yum install ntpdate -y && ntpdate time.windows.com 1。
二、安装方式及步骤
(一)minikube方式(适合本地试用或日常开发)
- 安装minikube
- minikube可以在个人计算机(Windows,macOS和Linux PC)上运行一个单节点Kubernetes集群。在对应的操作系统上下载并安装minikube工具,具体安装步骤可参考minikube官方文档。
- 使用minikube启动Kubernetes集群
- 安装完成后,在命令行执行 minikube start 命令即可启动一个单节点的Kubernetes集群。
(二)kubeadm方式
- 安装kubeadm
- 首先确保系统已经安装了 yum 包管理器。
- 添加Kubernetes的yum源(如果之前没有添加的话)。
- 执行命令 yum install -y kubeadm 进行安装1。
- 初始化Kubernetes集群(在Master节点上操作)
- 执行 kubeadm init 命令,该命令会初始化Kubernetes的Master节点。例如:
kubeadm init \
--apiserver - advertise - address = 192.168.0.100 \
--pod - network - cidr = 10.244.0.0/16
- 初始化成功后,按照提示设置 kubectl 命令的使用权限,例如执行类似 mkdir -p $HOME/.kube && cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && chown $(id -u):$(id -g) $HOME/.kube/config 的命令。
- 将节点加入集群(在Worker节点上操作)
- 在Master节点初始化完成后,会得到一个类似 kubeadm join 的命令,在每个Worker节点上执行该命令即可将节点加入到Kubernetes集群中。
(三)yum安装方式(yum源中的k8s版本可能较老,不常用)
- 分别安装Kubernetes的各个组件
- 通过 yum 命令逐个安装Kubernetes的组件,例如 yum install -y kubelet kube - proxy kubernetes - master 等组件(具体根据实际需求安装相关组件)2。
- 配置各个组件
- 对于每个组件,都需要进行相应的配置,如修改配置文件中的参数,例如修改 apiserver 的配置文件 /etc/kubernetes/apiserver 中的参数,像 KUBE_API_ADDRESS、KUBE_ETCD_SERVERS 等参数的设置,具体可参考官方文档或相关教程2。
- 配置完成后启动各个组件服务,如执行 systemctl start kube - apiserver kube - schedulerkube - controller - manager 等命令启动Master组件服务,执行 systemctl start kubelet kube - proxy 启动Worker节点相关服务2。
(四)购买公有云平台服务(如阿里云)
- 注册并登录公有云平台账号
- 选择合适的公有云平台(如阿里云),注册账号并登录到平台控制台。
- 选择Kubernetes服务并购买
- 在平台控制台中找到Kubernetes相关服务(一般在容器服务或云原生服务等板块下),按照平台提示选择配置(如集群规模、节点规格等)并购买服务。
- 购买完成后,平台会自动创建和配置好Kubernetes集群,用户可以直接使用。
十六、部署应用到 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是一种分布式版本控制系统,最初由Linus Torvalds开发,用于管理Linux内核的开发。它允许多个开发者同时工作,而不会相互干扰,并且能够跟踪每个版本的变化。Git的设计初衷是为了更好地管理Linux内核开发,但现在它已经被广泛应用于各种软件开发项目。
主要功能
- 版本控制:Git可以记录每一次代码变动,允许开发者回滚到之前的版本,或者在不同的版本之间切换。
- 分支管理:Git支持创建多个分支,开发者可以在不同的分支上独立开发,最后再合并到主分支。
- 分布式协作:Git的分布式特性使得每个开发者都可以拥有完整的代码仓库,即使在没有网络连接的情况下也能进行开发和提交。
- 冲突解决:当多个开发者对同一段代码进行修改时,Git能够自动合并这些修改,并在必要时提示开发者手动解决冲突。
实现原理
Git的核心是一个包含所有文件版本的对象数据库。每个文件都有一个唯一的哈希值,Git通过这些哈希值来追踪文件的变化。每次提交都会生成一个新的“commit”对象,记录下当前所有文件的状态和哈希值。这些commit对象通过指向它们的父对象来形成一个树状结构,从而记录下整个项目的开发历史。
使用场景
Git适用于各种规模的软件开发项目,无论是个人项目还是大型团队合作,Git都能提供强大的支持。特别是在开源软件开发中,Git几乎是不可或缺的工具
二十一,安装Git
1,CentOS/RHEL下载软件包:
yum install -y epel-release
yum install -y git
2,配置git用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
二十二,Git安全措施
1. 访问控制
Git可以通过访问控制机制来管理用户对仓库的访问权限。例如,可以设置只读权限和读写权限,确保只有授权的用户能够进行代码提交和修改操作。
2. 身份认证
Git支持多种身份认证机制,如基于用户名密码的认证、基于SSH的公钥认证等。在使用Git时,可以设置强密码,并且定期更换密码。同时,也可以对公钥进行管理,保证只有授权的用户能够访问仓库。
3. 传输安全
Git支持通过SSH和HTTPS等协议进行传输。通过使用加密通信协议,可以保证传输过程中的数据安全。此外,还可以使用TLS/SSL证书来加密传输内容,进一步确保传输的安全性。
4. 数据完整性
Git使用SHA-1哈希算法对每次提交进行唯一标识,确保数据的完整性和防篡改性。如果有人篡改了仓库的数据,Git可以通过哈希校验来检测到变化,并且提供相应的恢复机制。
5. 备份与恢复
定期对Git仓库进行备份,以防止数据丢失或损坏。同时,还可以使用Git自带的版本控制功能来恢复历史版本,以防止意外修改带来的影响。
6. 代码审查
通过进行代码审查,可以发现潜在的安全问题和漏洞,并及时修复。代码审查可以由团队内的其他成员或专门的安全人员来进行,以确保代码的质量和安全性。
GIT实验:常用命令演示
- 初始化仓库:
- git init:在当前目录下初始化一个新的Git仓库。
- 克隆仓库:
- git clone <repository_url>:从指定的URL克隆一个远程仓库到本地。
- 查看状态:
- git status:查看当前仓库的状态,包括哪些文件已修改、哪些文件已暂存等。
- 添加文件到暂存区:
- git add <file_name>:将指定的文件添加到暂存区。
- git add .:将当前目录下所有修改过的文件添加到暂存区。
- 提交更改:
- git commit -m "Commit message":将暂存区的文件提交到本地仓库,并附上一条提交信息。
- 查看提交历史:
- git log:查看所有的提交记录。
- git log --oneline:以简洁的方式查看提交记录。
- 切换分支:
- git checkout <branch_name>:切换到指定的分支。
- git checkout -b <new_branch_name>:创建并切换到一个新的分支。
- 合并分支:
- git merge <branch_name>:将指定分支的修改合并到当前分支。
- 解决冲突:
- 当合并分支时出现冲突,可以手动编辑冲突文件,然后使用git add <file_name>和git commit来解决冲突。
- 推送更改到远程仓库:
- git push origin <branch_name>:将本地分支的修改推送到远程仓库的指定分支。
- 拉取远程仓库的更改:
- git pull origin <branch_name>:从远程仓库拉取指定分支的最新修改并合并到当前分支。
- 查看差异:
- git diff:查看工作区和暂存区之间的差异。
- git diff HEAD -- <file_name>:查看工作区和版本库里面最新版本的区别。
- 重置仓库:
- git reset --hard <commit_id>:将仓库重置到指定的提交ID,丢弃之后的所有修改。
- 删除分支:
- git branch -d <branch_name>:删除本地指定的分支。
- git push origin --delete <branch_name>:删除远程指定的分支