目录
十、Capabilities及Kubernetes(k8s)
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章
声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。
一、引言
在现代信息技术快速发展的背景下,云计算已经成为构建和部署应用程序的主流方式。与传统的物理服务器部署相比,云计算提供了更高的灵活性、可扩展性和成本效益。
二、云架构介绍
1. 技术基础的必要性
无论是在防御还是进攻方面,强大的底层技术基础都是必不可少的。了解这些技术可以帮助我们构建更安全的系统,并发现潜在的漏洞。
2. 历史演变
-
物理服务器:早期,构建系统需要购买物理设备,并租用数据中心的机柜来搭建基础设施。
-
虚拟化:随着处理器技术的进步,虚拟化技术出现,允许将一台物理机器的资源分割成多个虚拟机,提高了资源利用率,并使得基础设施更加灵活和可扩展。
-
容器化:容器技术进一步提高了效率,实现了服务器、网络和存储的虚拟交付。
3. 云计算的定义
云计算是将多种技术集合在一起的新一代基础设施。它不仅仅是单一的技术,而是包括了服务器、网络、存储等多个方面的技术集合。
4. 公有云与私有云
-
公有云:如Amazon Web Services(AWS)、Azure、Google Cloud Platform(GCP)等,提供可扩展的云服务。
-
私有云:组织可以使用OpenStack等工具在自己的数据中心搭建私有云,或者将部分业务运行在私有云中,部分运行在公有云中。
5. 共享责任模型
云服务提供商和用户在安全性方面分担责任。例如,云服务提供商负责数据中心的物理安全,但不负责用户程序漏洞导致的数据泄露。
三、云服务
核心特点
-
按需自助服务:用户可以根据需要自动获取计算资源,无需人工干预。
-
广泛的网络访问:服务可以通过网络访问,通常是通过标准的机制。
-
资源池化:提供商的计算资源被池化,以多租户模式服务于多个用户。
-
快速弹性:资源可以迅速扩展和收缩以应对需求变化。
-
计量服务:服务是按使用量付费的,用户只需为实际使用的资源付费。
四、云分类
云服务模型
云服务主要分为三大类,每种都提供了不同级别的控制和管理能力:
-
IaaS(基础设施即服务):
-
提供虚拟化的计算资源。
-
用户可以控制操作系统的选择、存储和网络组件,以及部署和运行应用程序。
-
例子:Amazon EC2、Google Compute Engine、Microsoft Azure VM。
-
-
PaaS(平台即服务):
-
提供一个平台,允许用户开发、运行和管理应用程序,无需构建和维护底层硬件和软件基础设施。
-
用户可以控制部署的应用,但通常不控制底层基础设施。
-
例子:Heroku、Google App Engine、Microsoft Azure App Service。
-
-
SaaS(软件即服务):
-
提供通过互联网访问的应用程序。
-
用户通常无法控制应用程序的运行方式,只能控制自己的数据。
-
例子:Google Workspace、Microsoft Office 365、Salesforce。
-
部署模型
云服务还可以根据部署模型进行分类,主要包括:
-
公有云:
-
服务面向公众或大型行业群体。
-
例子:AWS、Azure、GCP。
-
-
私有云:
-
专为单一组织设计,可以自行管理或由第三方服务提供商管理。
-
例子:OpenStack、VMware vSphere。
-
-
社区云:
-
由几个组织共享,支持共同的业务需求。
-
-
混合云:
-
结合了公有云和私有云的特点,允许数据和应用程序在两者之间移动。
-
-
边缘云:
-
在数据源附近提供云计算能力,减少延迟。
-
五、云架构
云架构概述
云架构是指构建和运行云服务和应用程序的技术架构和设计模式。它涉及到如何在云环境中有效地设计、部署和管理应用程序,以及如何利用云计算的优势来提高系统的可扩展性、可靠性和性能。以下是云架构的一些关键组成部分和考虑因素:
1. 核心组件
-
计算资源:包括虚拟机、容器、函数即服务(FaaS)等,用于运行应用程序。
-
存储资源:如对象存储、块存储和文件存储,用于数据持久化。
-
网络资源:包括虚拟私有云(VPC)、负载均衡器、内容分发网络(CDN)等,用于连接和数据传输。
-
数据库服务:如关系型数据库、NoSQL数据库、内存数据库等,用于数据管理。
-
中间件服务:如消息队列、缓存服务等,用于应用程序组件之间的通信和数据交换。
2. 设计原则
-
模块化:将应用程序分解成独立的模块或服务,以提高灵活性和可维护性。
-
可扩展性:设计时考虑系统的横向(增加更多实例)和纵向(增加实例的资源)扩展能力。
-
弹性和容错:确保系统能够自动恢复和处理故障,例如通过冗余和自动扩展。
-
安全性:从设计阶段就考虑安全问题,包括数据加密、身份验证和授权。
3. 架构模式
-
微服务架构:将应用程序分解成一组小型、独立的服务,每个服务实现特定的业务功能。
-
事件驱动架构:基于事件的异步处理模式,适用于解耦服务和提高响应性。
-
无服务器架构:依赖第三方服务提供商来管理服务器、运行时环境、中间件、数据库等,开发者只需关注代码。
4. 部署模型
-
单体架构:所有组件都部署在一个单元中,适用于小型或简单的应用程序。
-
分布式架构:组件分布在多个服务器或服务上,可以提高可扩展性和可靠性。
-
多云和混合云架构:应用程序和服务分布在多个云提供商或云环境之间,以提高灵活性和灾难恢复能力。
5. 管理工具
-
基础设施即代码(IaC):使用代码来定义和管理基础设施,如Terraform、AWS CloudFormation。
-
配置管理工具:如Ansible、Chef、Puppet,用于自动化配置和管理服务器。
-
监控和日志工具:如Prometheus、Grafana、ELK Stack,用于监控系统性能和日志分析。
6. 持续集成和持续部署(CI/CD)
-
自动化测试和部署:通过自动化测试和部署流程,提高开发效率和减少人为错误。
-
蓝绿部署和滚动更新:用于减少部署时的停机时间和风险。
7. 成本管理
-
资源优化:通过监控和分析工具来优化资源使用,降低成本。
-
按需付费:根据实际使用量来支付,而不是预先购买固定数量的资源。
8.虚拟化
虚拟化技术通过Hypervisor实现虚拟机(VM)与底层硬件的解耦。它允许在单个物理服务器上运行多个虚拟机,每个虚拟机都包含一个完整的操作系统。虚拟化技术的主要优势包括:
-
资源隔离:每个虚拟机都是独立的,拥有自己的操作系统和资源,从而实现了良好的隔离性。
-
灵活性:虚拟机可以在不同物理服务器间迁移,提供了灵活性和可移植性。
-
扩展性:虚拟化技术支持快速创建和删除虚拟机,以适应动态变化的资源需求。
然而,虚拟化也存在一些性能开销,包括CPU和内存的虚拟化开销、IO性能瓶颈等。
9.容器
容器技术是一种轻量级的操作系统虚拟化技术,它将应用程序及其运行依赖环境打包封装到标准化、强移植的镜像中。容器的主要特点包括:
-
轻量级:容器仅包含应用运行所需的代码和依赖,不包括完整的操作系统,因此体积小,启动速度快。
-
资源共享:多个容器可以共享同一操作系统的内核,这使得它们比虚拟机更加高效。
-
隔离性:容器提供了一定程度的隔离,使得多个容器可以在同一主机上并行运行而互不干扰。
-
快速部署和启动:容器可以在几秒钟内启动,相比于传统的虚拟机来说,启动时间更短。
-
高可伸缩性:容器架构支持自动化的横向扩展,可以根据需求动态地增加或减少容器实例。
容器技术如Docker和Kubernetes已成为云原生应用开发的重要工具。Docker作为容器引擎,负责创建和运行容器,而Kubernetes则负责容器的资源调度和编排。
六、云设计模式
云设计模式是指在云计算环境中构建解决方案时采用的最佳实践和设计原则。以下是一些关键的云设计模式:
-
微服务架构:将应用程序分解为一组小型、独立的服务,每个服务实现特定的业务功能,易于扩展和维护。
-
事件驱动架构:基于事件的异步处理模式,适用于解耦服务和提高响应性。
-
无服务器架构:依赖第三方服务提供商来管理服务器、运行时环境、中间件、数据库等,开发者只需关注代码。
微服务架构
微服务架构是一种将应用程序作为一套小服务开发的方法,每个服务运行在其独立的进程中,并通过轻量级的通信机制(通常是HTTP RESTful API)进行交互。这些服务围绕特定的业务能力构建,可以独立地部署、扩展和更新。
优点
-
敏捷性:微服务架构提高了敏捷性,使得企业能够快速响应业务需求。
-
用户体验:通过快速迭代和部署,提升用户体验,减少用户流失。
-
成本效益:降低增加产品、客户或业务方案的成本。
缺点
-
系统部署依赖:服务间的依赖可能导致部署复杂性。
-
服务间通信成本:分布式系统中服务间通信可能增加延迟和复杂性。
-
数据一致性:在微服务架构中保持数据一致性是一个挑战。
-
系统集成测试:测试变得更加复杂,需要考虑服务间的交互。
-
重复工作:可能存在重复代码和功能。
-
性能监控:需要更复杂的监控系统来跟踪服务的性能。
零信任架构
零信任架构(ZTA)是一种网络安全规划,它基于零信任概念,包括其组件关系、工作流规划与访问策略。零信任的核心思想是,默认情况下不信任网络内部和外部的任何人、设备、系统和应用,而是应该基于认证、授权和加密技术重构访问控制的信任基础,并且这种授权和信任不是静态的,它需要基于对访问主体的信任评估进行动态调整。
特点
-
全面身份化:对所有访问主体进行身份化,包括人员、设备等。
-
应用级控制:业务访问需要尽可能工作在应用层而不是网络层。
-
安全可闭环:信任等级基于访问主体的属性、行为和访问上下文进行评估,并且基于信任等级对访问权限进行动态的、近实时的、自动的调整。
-
业务强聚合:零信任架构需要结合实际的业务场景和安全现状进行设计。
-
多场景覆盖:零信任架构需要适应不同的业务场景和安全需求。
应用场景
零信任架构在自动化开发运维(DevOps)场景、API安全防护场景、多数据中心跨域场景和物联网场景中有广泛的应用。特别是在微服务架构下,零信任安全可以对API级的访问和调用进行鉴权和访问控制,减少API攻击和滥用。
微服务架构与零信任架构的结合
微服务架构与零信任架构可以相互补充、融合使用。微服务提供了敏捷的开发和部署能力,而零信任架构则提供了细粒度的安全控制和动态的信任评估,两者结合可以构建一个既灵活又安全的系统。在微服务架构中实施零信任,可以确保每个服务都是安全的,并且服务间的通信是经过严格认证和授权的。
七、安全控制
云架构的安全控制涉及到保护云环境中的数据和资源。以下是一些关键的安全控制措施:
-
访问控制:通过身份认证和访问管理(IAM)来控制用户对资源的访问。
-
数据加密:在数据传输和存储过程中使用加密技术,保护数据不被未授权访问。
-
API安全:包括API网关的防暴力破解机制和API流量控制,确保API的高可用性和连续性。
八、在Ubuntu上生成cent os7容器
安装Docker
-
如果没有安装,可以使用以下命令安装:“sudo apt-get update”,这个命令让系统检查有没有新软件。“sudo apt-get install docker.io”,安装 Docker。
-
检查是否安装成功
docker -v
启用Docker
sudo service docker start
可以使用 sudo docker ps
命令来验证 Docker 是否正常启动。
sudo docker ps
Docker配置中国镜像源
-
首先,需要找到
daemon.json
文件。在 Linux 系统中,该文件通常位于/etc/docker/
目录下。如果没有这个文件,可以创建一个。 -
重启 Docker 服务:完成配置后,需要重启 Docker 服务使配置生效。在 Ubuntu 或 Debian 系统中,可以使用命令sudo service docker restart;在 CentOS 或 RHEL 系统中,可以使用sudo systemctl restart docker
Docker中安装CentOS 7
-
拉取CentOS 7的官方Docker镜像:
sudo docker pull centos:7
-
运行一个基于CentOS 7镜像的容器:
sudo docker run -it --name my_centos7 centos:7 /bin/bash
-
sudo:以超级用户(root)权限执行后面的命令,因为Docker需要管理员权限来操作。
-
docker run:Docker命令用于运行一个新的容器。
-
-it:这是两个参数的组合,-i 表示交互式操作,-t 分配一个伪终端。
-
--name my_centos7:为新创建的容器指定一个名称,这里是my_centos7。
-
centos:7:指定要使用的Docker镜像,这里是CentOS 7的官方镜像。
-
/bin/bash:在容器内运行的命令,这里是启动bash shell。
创建Apache容器后台运行
-
docker container run -d --rm -p 8080:80 httpd
-
用curl命令检查搭建是否成功
curl localhost:8080
docker常用命令
-
安装 Docker:
-
Ubuntu 上安装 Docker:
sudo apt-get update sudo apt-get install docker.io
-
-
检查 Docker 版本:
docker --version
-
启动 Docker 服务:
sudo service docker start
-
拉取 Docker 镜像:
docker pull [仓库名]/[镜像名]:[标签] # 示例:拉取最新的 Ubuntu 镜像 docker pull ubuntu:latest
-
运行 Docker 容器:
docker run [选项] [镜像名] [命令] # 示例:运行一个 Ubuntu 容器并进入交互模式 docker run -it ubuntu /bin/bash
-
列出当前所有运行的容器:
docker ps
-
列出所有容器(包括未运行的):
docker ps -a
-
停止容器:
docker stop [容器ID或名称]
-
启动已停止的容器:
docker start [容器ID或名称]
-
强制停止容器:
docker kill [容器ID或名称]
-
删除容器:
docker rm [容器ID或名称]
-
删除所有停止的容器:
docker container prune
-
查看容器日志:
docker logs [容器ID或名称]
-
进入运行中的容器:
docker exec -it [容器ID或名称] /bin/bash
-
端口映射:
docker run -p [宿主机端口]:[容器端口] [镜像名] # 示例:将容器的80端口映射到宿主机的8080端口 docker run -p 8080:80 nginx
-
数据卷的使用:
docker run -v [宿主机目录]:[容器目录] [镜像名] # 示例:将宿主机的/data挂载到容器的/app目录 docker run -v /data:/app ubuntu
-
构建镜像:
docker build -t [镜像名]:[tag] [路径] # 示例:构建当前目录下的Dockerfile docker build -t myapp:v1 .
-
推送镜像到仓库:
docker push [仓库名]/[镜像名]:[标签]
-
拉取镜像:
docker pull [仓库名]/[镜像名]:[标签]
-
查看 Docker 镜像:
docker images
-
删除 Docker 镜像:
docker rmi [镜像ID或名称]
-
清理无用镜像、容器、卷和网络:
docker system prune
九、容器与云及容器的真相
容器技术在云计算中扮演着重要的角色,提供了一种轻量级的虚拟化技术,用于将应用程序及其所有依赖项打包在一起,以便在不同的计算环境中进行移植和运行。容器与云的结合,使得应用部署更加灵活和高效。容器并不是一个单一的技术,而是一系列阻止进程访问其他进程和资源的特性组合,这些特性发生在内核级别,可以控制容器的限制级别。容器技术的发展经历了从chroot到命名空间和cgroup的演变。
十、Capabilities及Kubernetes(k8s)
在Linux中,Capabilities是一种机制,允许非特权进程执行特定的系统级任务,而无需授予其完全的root访问权限。例如,CAP_NET_ADMIN允许进程执行网络管理任务。Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。Kubernetes能够在多个服务器上高效地运行容器,确保应用的高可用性和可扩展性。Kubernetes的设计架构包括多个master节点和多个work节点,通过整合资源,提供了一套便于应用部署的方案及实现,极大减少了系统运维的工作量。
十一、git
Git的介绍
Git的主要特点包括:
-
分布式架构:每个开发者的本地都保存有完整的代码历史,而不仅仅是差异。
-
非线性开发:支持快速切换不同开发分支。
-
完整性保护和传输安全:通过SHA-1散列算法保证代码完整性,支持SSL传输。
-
数据的完整性:确保代码历史记录的完整性,防止数据丢失。
-
支持离线操作:大部分操作不需要网络连接,可以本地完成。
-
灵活的工作流程:支持多种工作流程,如集中式工作流、功能分支工作流等。
Git的安装
Windows系统
-
访问Git官方网站:Git - Downloading Package。
-
下载适用于Windows的安装程序。
-
运行安装程序,并按照提示完成安装。
macOS系统
-
使用Homebrew(如果已安装):在终端运行brew install git。
-
或者访问Git官方网站下载安装程序并安装。
Linux系统(以Ubuntu为例)
-
打开终端。
-
运行以下命令:
sudo apt-get update sudo apt-get install git
Git的使用示例
初始化仓库
在项目目录中运行以下命令来初始化Git仓库:
git init
添加文件
将文件添加到Git的暂存区:
git add <文件名>
提交更改
将暂存区的文件提交到仓库,并附上说明:
git commit -m "提交说明"
查看状态
查看仓库的状态:
git status
查看历史记录
查看提交的历史记录:
git log
克隆仓库
从远程仓库克隆项目到本地:
git clone <远程仓库地址>
创建和切换分支
创建一个新分支并切换到该分支:
git checkout -b <分支名>
合并分支
将一个分支合并到当前分支:
git merge <源分支名>
拉取远程仓库的更新
从远程仓库拉取最新的代码:
git pull
推送代码到远程仓库
将本地的代码推送到远程仓库:
git push
标签:二十分钟,容器,架构,一文,镜像,服务,搞懂,Docker,docker From: https://blog.csdn.net/2401_86628519/article/details/143831462