云计算基础

news/2025/2/23 0:48:25/文章来源:https://www.cnblogs.com/leyinsec/p/18567310

免责声明

学习视频来自 B 站up主泷羽sec,如涉及侵权马上删除文章。

笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。

B站地址:https://space.bilibili.com/350329294

云计算基础

在过去,搭建一个应用程序可真是个大工程。得去购买服务器,租赁机房,进行安装、上架,还得拧螺丝、接网线。但如今,情况大不相同啦。现在很多基础设施都已经云化了。我们可以直接找像阿里云、腾讯云这样的云服务器厂家,购买一些云服务器,短短几分钟就能申请下来。基于这些云服务器,我们可以轻松地进行各种各样的应用部署。

一、云架构介绍

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

从防御的角度来看,只有了解底层技术,我们才能知道如何构建防御体系。从进攻的角度讲,了解底层技术才能发现漏洞并开发出漏洞利用的方法。所以呢,攻击者和防御者都必须清楚对方的运作方式。

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

二、云服务

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

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

三、云分类

  1. 基础设施即服务(IaaS):就像提供建筑材料和工具,让你可以自己搭建房子。
  2. 平台即服务(PaaS):类似有了基本框架的房子,你只需进行装修和布置。
  3. 软件即服务(SaaS):直接给你一个装修好可以直接入住的房子。

四、共享责任模型

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

五、云架构

  1. 虚拟化:把一台机器的资源分成多台虚拟机器,多台裸机汇集形成资源集群,隔离资源的使用,灵活且可扩展资源池。它抽象了硬件安装过程,但仍有改进空间,并非专为云而生。技术栈的灵活性和可定制性提升,促使了容器的出现。
  2. 容器:容器就像一个个独立的小空间,允许开发人员与堆栈各部分灵活交互,实现按需生成服务,提高网络抽象程度,方便应用迁移扩展,更高效地使用资源。系统管理和网络工程可以外包给其他公司。云是多种技术的集合。

六、云架构设计

  1. 组件选择:确定架构(这很难改),选择绑定或非绑定组件,可以自己开发、用开源的或者购买。云原生组件是为分布式系统设计的,CNCF 认证不是必须的,要安全编码,部分是开源的。
  2. 基础设施即代码(IaC):包括引导介质(Packer)、安装系统(Terraform)、自动配置(Ansible)、状态强制(Monit)。

七、集成部署

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

八、云设计模式

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

  1. 微服务架构:为松散耦合、模块化服务而设计,微服务协同工作完成整体服务。每个服务都可以独立修改代码和重用,提高系统整体弹性和容错。大多数云利用微服务架构,云原生应用被构建充当微服务,便于水平扩展。安全优势是每个微服务应用强化、隔离,单一服务漏洞对整体系统影响小。缺点是调试更复杂,需要跨不同服务跟踪事务;性能可能有短板。
  2. 零信任架构:对资源的每个请求都需要验证来源已授权,然后授权短期访问(用令牌)。实现零信任架构的一种常见方法是 Open ID Connect(OIDC)联盟访问。授权处于活动状态时可以访问任何联合内服务。密码重置是针对零信任架构的常见攻击方式。

九、安全控制

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

# 进入到etc/docker目录
cd etc/docker
# 创建 daemon.json文件
touch daemon.json
# 修改权限为777
chmod 777 daemon.json
# 输入镜像名
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}
EOF
# 载入daemon
sudo systemctl daemon-reload
# 重启doker
sudo systemctl restart docker

运行一个基于 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 exe -it 899 /bin/bash:进入特定容器。
docker container stop 899:停止容器。
docker container run -d --rm -p 8080:80 -v /home/user/webroot/:/usr/local/apache2/htdocs/ httpd:挂载宿主机目录运行容器。
docker container run -d --rm --network host -v /home/user/webroot/:/usr/local/apache2/htdocs/ httd:侦听宿主机 80 端口运行容器。
 docker ps:列出所有正在运行的容器。

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

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

sudo podman run -d --r-m --network host httpd:运行容器。
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:允许进程修改文件所有者。
 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,是一个开源的容器编排平台。它可以自动化部署、扩展和管理容器化应用程序,在多个服务器上高效运行容器,确保应用的高可用性和可扩展性。

十四、Kubernetes 的核心概念

  1. Pod:是 Kubernetes 中最小的可部署单元,可包含一个或多个容器,这些容器共享网络命名空间和存储卷,一起被调度和管理。
  2. Deployment:用于管理 Pod 的副本数量和更新策略,确保应用始终保持指定数量的副本在运行,可实现滚动更新等功能。
  3. Service:定义一组 Pod 的访问方式,提供稳定的 IP 地址和端口,让外部可以访问到一组 Pod。
  4. Node:是 Kubernetes 中的工作节点,可以是物理服务器或虚拟机。每个 Node 上运行着 Kubelet 和容器运行时,负责管理容器的生命周期。

十五、安装 Kubernetes

  1. 安装 Minikube(用于本地开发的 Kubernetes 环境):下载安装包,根据操作系统选择合适版本,按照安装向导进行操作。
  2. 启动 Minikube:打开终端,运行minikube start命令。

十六、部署应用到 Kubernetes

创建一个 Deployment:kubectl create deployment nginx --image=nginx,部署 Nginx 服务器。
查看 Deployment:kubectl get deployments。
创建一个 Service:kubectl expose deployment nginx --port=80 --type=NodePort,让外部访问 Nginx 服务器。
查看 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.hqwc.cn/news/840802.html

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

相关文章

matlab: 检查程序运行效率

profile onqiu_ji_fenprofile viewer

LeetCode 1837[K进制表示下的各位数字总和]

LeetCode 1837[K进制表示下的各位数字总和]题目 链接 LeetCode 1837[K进制表示下的各位数字总和] 详情实例提示题解 思路 进制转换,遍历求和 代码 class Solution { public:int sumBase(int n, int k) {int iSum = 0;while (n > 0){iSum += n % k;n = n / k;}return iSum;}…

【PHP漏洞】PHPMyAdmin写shell的几种方式

phpMyAdmin是一个以PHP为基础,以web方式架构在服务器上的MySQL的数据库管理工具。让管理者可以通过Web接口来管理MySQL数据库。 查看phpmyadmin版本: /phpMyAdmin/README在高版本中无法写入一句话 mysql新特性secure_file_priv会对读写文件产生影响,该参数用来限制导入导出查…

rebuttal 摘录(3)

link: https://www.iikx.com/news/article/8915.html小过原创心得: 如果分数低,就当锻炼自己rebuttal的能力了;你想,分数低你还能回复那么多(至少你自己觉得挺有道理的),那么以后遇到分数高的,不是手到擒来吗?哈哈哈哈https://www.cnblogs.com/marsggbo/p/14278583.ht…

jmeter之操作数据库

一、下载jdbc 驱动,安装jdbc驱动2、将驱动存放在4个路径下 (1)C:\Program Files\Java\jre1.8.0_60\lib (2)第二个存放的包 C:\Program Files\Java\jre1.8.0_60\lib\ext (3)第三个存放的包(4)存放第四个包 E:\dcs\two\jmeter(14)\apache-jmeter-3.3\lib\ext 2、在测试…

不仅仅是Excel,这些工具让协作更简单!

在现代办公中,团队协作和信息共享变得愈发重要。随着Excel多人协同编辑功能的普及,工作效率和团队协作水平有了显著提升。通过多人同时编辑同一文档,无论是数据分析、财务报表,还是项目计划,团队成员都能实时看到彼此的修改,避免了版本冲突和重复劳动,提高了工作效率。除…

617. 合并二叉树 Golang实现

题目描述: 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不…

FUSE 透传

Android 12 支持 FUSE 透传功能,此功能可以最大限度地降低 FUSE 开销,从而实现可媲美直接访问下层文件系统的性能。android12-5.4、android12-5.10 和 android-mainline(仅限测试)内核支持 FUSE 透传功能,这意味着是否支持此功能取决于设备使用的内核和设备搭载的 Android…

易基因:转录因子Pax5在多西紫杉醇耐药性神经内分泌样前列腺癌中的表观调控作用|Cell Death Dis

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 前列腺癌患者在接受雄激素受体信号抑制剂(ARSI)治疗后,可能会出现耐药性,导致治疗诱导的神经内分泌样前列腺癌(therapy-induced neuroendocrine-like prostate cancer,t-NEPC)发生。t-NEPC是一种高侵袭性…

反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理

Debug 的时候,都遇到过手速太快,直接跳过了自己想调试的方法、代码的时候吧…… 一旦跳过,可能就得重新执行一遍,准备数据、重新启动可能几分钟就过去了。好在IDE 们都很强大,还给你后悔的机会,可以直接删除某个 Stack Frame,直接返回到之前的状态,确切的说是返回到之前…

记录一次RPC服务有损上线的分析过程

1. 问题背景 某应用在启动完提供JSF服务后,短时间内出现了大量的空指针异常。 分析日志,发现是服务依赖的藏经阁配置数据未加载完成导致。即所谓的有损上线或者是直接发布,当应用启动时,service还没加载完,就开始对外提供服务,导致失败调用。 关键代码如下 数据的初始化加…