云计算&docker基础

打印 上一主题 下一主题

主题 975|帖子 975|积分 2925

什么是云计算?

云计算是一种通过互联网按需提供计算资源(如服务器、存储、数据库、网络和软件)的模子。这些资源可根据需求动态扩展或缩减,用户只需为实际使用的部门付费。

云计算历史演变


  • 传统基础办法

    • 须要购买物理服务器,租赁数据中央机柜。
    • 基础办法扩展本钱高,配置和管理复杂。

  • 虚拟化

    • 把一台物理服务器的资源分割成多个虚拟机,提高硬件利用率。
    • 多台裸机通过虚拟化组成资源集群,支持更灵活的摆设。

  • 容器化

    • 提供轻量级隔离,支持更快的应用摆设和迁移。
    • 更高效地利用资源,实现快速交付和灵活扩展。

  • 云计算

    • 整合多种技术,包括虚拟化、容器化和自动化,形成弹性、分布式的资源池。
    • 可以快速摆设应用,无需管理底层硬件。

云服务

   云服务的核心上风在于通过抽象和自动化,大幅度低落了用户管理复杂 IT 基础办法的难度,同时提供了高可靠性和弹性扩展能力。
  

  • 云服务特点

    • 弹性扩展:按需调整计算资源,满足动态负载需求。
    • 资源共享:通过多租户模式共享计算资源。
    • 自动化管理:使用基础办法即代码(IaC)实现资源管理的自动化。
    • 服务按需:用户只需付出实际使用的资源费用。
    • 环球化摆设:支持跨地域的分布式摆设,提拔服务可用性和可靠性。

  • 云服务提供商

    • Amazon Web Services(AWS)、Azure、Google(GCP),另有华为云、腾讯云、阿里云


云服务模子与责任共享

  

  • IaaS(基础办法即服务):裸机的物理服务器

    • 提供虚拟机、存储、网络等底层资源。
    • 用户负责操作体系、应用程序和数据的管理。
    • 类比:提供建筑材料(砖、木料)和工具(锤子、螺丝刀),让你本身动手搭建房子。

  • PaaS(平台即服务):安装了服务器面板的服务器

    • 提供开辟情况和工具,用户专注于应用开辟。
    • 不须要管理底层操作体系和服务器。
    • 类比:提供了一个已经搭建好框架的房子,用户只须要装修和布置(安装家具)。

  • SaaS(软件即服务):搭建好的在线服务,例如邮件服务。

    • 提供可直接使用的软件应用,用户无需管理基础办法。
    • 类比:无需自界说基础办法宁静台的用户,直接使用应用完成工作。




  • 云服务提供商的责任

    • 云服务商负责管理 物理基础办法 的安全性,比如:

      • 数据中央的电力、硬件维护、冷却。
      • 数据中央的物理安全(防止未经授权的职员打仗设备)。

    • 例子:如果 AWS 的数据中央遭受火灾,导致服务器损毁,AWS 需承担责任。

  • 用户的责任

    • 用户负责管理 应用程序层面数据层面 的安全性,比如:

      • 应用程序毛病修复。
      • 数据加密和访问权限设置。

    • 例子:如果用户未加密数据,或者应用程序代码存在毛病,导致敏感信息泄露,这是用户的责任。

云架构

云架构是设计和摆设云计算服务的技术框架。它包含多个技术组件,确保云服务的可靠性、扩展性和安全性。
容器允许开辟职员与堆栈各部门举行灵活交互,实现按需生成服务和网络抽象程度不断提高,方便应用迁移扩展,更加高效使用资源
虚拟化的概念(并非为云而生)


  • 资源抽象

    • 将物理硬件(如 CPU、内存、存储和网络)虚拟化为多个逻辑资虚拟设备
    • 用户看到的是虚拟资源,而非底层物理设备。

  • 隔离性

    • 每个虚拟资源相互独立运行,确保一个虚拟机的问题不会影响其他虚拟机或主机。

  • 资源分配

    • 虚拟化技术可以动态调整虚拟资源的分配,例如根据需求增减虚拟机的 CPU 或内存。

容器的概念


  • 轻量级

    • 容器共享宿主操作体系的内核,因此比虚拟机更高效,占用更少的资源。

  • 独立性

    • 每个容器都是独立的小空间,彼此之间隔离运行,不会相互干扰。

  • 可移植性

    • 容器包含应用程序及其依赖项,可以在开辟、测试和生产情况之间无缝迁移。

  • 快速启动

    • 容器的启动速率通常比虚拟机更快,适合按需生成服务。

  • 高效资源利用

    • 容器通过共享内核减少开销,提高了资源利用服从。

云架构设计

   云计算的核心,决定了体系的可用性、扩展性、安全性、可维护性。
  

  • 确定架构

    • 架构决定了体系的整体逻辑和资源构造方式。一旦架构确定,后期的修改本钱会非常高。
    • 组件选择

      • 绑定组件:供应商锁定组件,集成度高但可能限制自由度。
      • 非绑定组件:开源或跨平台组件,灵活性高但需更多管理工作。
      • 选择方式:自研、开源、开源商业


  • 云原生组件

    • 专门为分布式体系设计的模块化工具和技术,充实利用云计算的灵活性、弹性和可扩展性。
    • 组件选择:开源(本钱低可定制)、商业化(技术支持)、
    • 兼容性和标准化:部门组件需获得 CNCF认证,确保最佳实践支持。
    • 安全性:选择具有安全编码,部门是开源的。

  • 基础办法即代码(IaC)

    • 引导介质工具Packer:创建同等的虚拟机镜像或容器镜像,作为基础体系的模板。
    • 安装体系工具Terraform:声明式界说和管理基础办法资源。
    • 自动配置工具Ansible:通过编写 YAML 文件自动化配置服务器和摆设应用。
    • 状态强制工具Monit:及时监控服务状态并强制维护其运行状态。

   [!NOTE] 集成摆设概述
使用持续集成和持续交付(CICD)管道来构建情况 包括测试、测量和扫描代码更改的自动化测试和摆设(GitOps)。类似于github action
    [!NOTE] 弹性可靠
指在遇到不同范例的故障时,通过自动化的故障恢复机制保持服务的稳固性和可用性。弹性指的根据负载需求自动扩展和收缩,以应对流量变革。
    [!NOTE] 平衡控制
确保体系安全和合规性的条件下,最大限度地减少对体系性能、灵活性和可用性的影响。
  云设计模式

微服务架构

   松散耦合、模块化服务而设计,微服务协同工作以完成整体服务每个服务都可以独立修改代码和重用,提高体系整体弹性和容错
  

  • 长处:

    • 弹性和容错性、灵活的扩展性、技术栈多样性、加快开辟速率

  • 缺点

    • 调试和监控复杂、跨服务事务管理困难、性能问题、摆设和管理复杂

  • 总体而言,微服务架构适合复杂、须要高度灵活性和可扩展性的体系,但它也增加了管理、调试和性能上的挑衅。
零信任架构

   对资源的每个请求都须要验证来源已授权,然后授权短期访问(令牌)实现ZTA的一种常见方法是OpenIDConnect(OIDC)同盟访问
  

  • 授权处于活动状态时可以访问任何连合内服务
  • 密码重置是针对ZTA的常见攻击方式
安全控制

网络控制



  • 传统架构与防火墙
    在传统网络架构中,防火墙用于实现网络流量的监控和控制,确保安全性。
  • 云情况中的网络抽象
    在云情况中,网络控制接纳 SDN(软件界说网络)和 SD-WAN(软件界说广域网)举行抽象和集中管理。SDN能够通过不同接口(如API或GUI)设置和管理网络规则。
  • mTLS加密与身份验证
    通过 mTLS(双向TLS),不仅能加密流量,还能验证客户端身份,确保只有持有有效证书的客户端才能访问微服务。
  • 访问管理与权限提拔风险
    不正确的访问管理可能导致权限提拔,甚至可能破坏整个基础办法。因此,正确的权限控制是至关重要的。
  • 令牌与短时访问权
    现代访问管理体系普遍使用 令牌(如JWT)来举行访问控制,为用户提供短时的访问权限。
  • JWT与常见攻击手段
    JWT(JSON Web Token)广泛用于访问云端资源,但伪造和破解密码是常见的攻击手段,必须采取相应的安全措施。
  • 强制访问控制(MAC)
    另一种权限控制机制是 强制访问控制(MAC),该机制通过体系计谋强制界说用户的访问权限,而非由资源全部者管理。
身份管理



  • 传统身份管理:AD 和 LDAP
    企业通常使用 Active Directory (AD)轻量目录访问协议 (LDAP) 来举行身份管理。这些技术用于构造内部的用户认证、授权和管理,确保只有合法用户能够访问资源。
  • AWS IAM(身份与访问管理)
    AWS IAM 是亚马逊云服务提供的身份和访问管理服务,允许用户控制和管理在 AWS 上的访问权限,确保只有授权的用户和服务能够访问特定的资源。
  • Google 同盟认证与 OIDC
    Google 同盟认证(Google Federation)结合 OpenID Connect (OIDC) 协议,通常用于 双因素认证(2FA),提供额外的安全性,确保只有通过双重身份验证的用户能够访问敏感资源。
  • 云身份提供者(IdP)
    云身份提供者(IdP)是管理和验证用户身份的服务。Azure AD(Azure Active Directory)是一个范例的云身份提供者,它为企业提供集中化的身份管理,支持更安全的身份认证和访问控制,是一种更安全的解决方案,尤其在云情况中应用广泛。
容器与云

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



  • 前段时间docker国内源关闭了,导致原先docker的安装脚本无法使用,使用开源项目的安装脚本安装docker和docker compose

  • 验证docker安装情况
  1. docker -v
  2. docker compose version
复制代码


  • 拉取镜像测试
  1. #原先已经拉取了
  2. docker pull centos:7
复制代码


  • 创建容器并进入bash
  1. #运行centos:7的容器并命名my_centos7,进入他的bash。
  2. docker run -it --name my_centos7 centos:7 /bin/bash
复制代码


  • 拉取一个httpd容器并运行
  1. #拉取http容器将容器80端口映射到8080端口上
  2. docker container run -d --rm -p 8080:80 httpd
复制代码



  • 可以访问端口查看


  • 查看正在运行的容器
  1. docker container ls
  2. #另一个命令效果一样,加个-a列举全部容器
  3. docker ps
复制代码


  • 查看特定的容器信息
  1. docker top <container>
复制代码


  • 进入容器的bash
  1. docker exec -it <container_id_or_name> /bin/bash
  2. #稍微留意一下这个/bin/bash,指的是这个路径下的命令,有些可能不是这个路径
  3. #也可以使用name:great_engelbart进入
复制代码


  • 克制容器
  1. docker container stop <container_id_or_name>
  2. #下面方式也一样
  3. docker stop <container_id_or_name>
复制代码


  • 挂载到主机目录
  1. docker run -d -p 8080:80 -v /home/user/webroot/:/usr/local/apache2/htdocs/ httpd
  2. #container加和不加效果一样,-d后台运行,-p映射端口,-v将主机目录:挂载的容器目录 拉取的容器名
复制代码


  • Podman
  1. Podman是 Docker 的替代产品,无守护进程。
  2. - “sudo podman run -d --r-m --network host httpd”:运行容器。
  3. - “podman pod create --name wha”:创建空 pod。
  4. - “podman run -d --pod wha httpd”:在 pod 中运行容器。
  5. - “podman run -pod wha -it alpine/curl /bin/asho”:在 pod 中运行可找东西的工具并互动。
  6. 大部分容器化过程都采用开放容器计划(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 的核心概念


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


  • 创建一个 Deployment摆设 Nginx 服务器:
    kubectl create deployment nginx --image=ngin
  • 查看 Deployment:
    kubectl get deployments
  • 创建一个 Service让外部访问 Nginx 服务器。:
    kubectl expose deployment nginx --port=80 --type=NodePort
  • 查看 Service:
    kubectl get services
访问应用

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


  • 扩展 Deployment 的副本数目kubectl scale deployment nginx --replicas=3
  • 查看副本数目:kubectl get deployments。
更新应用


  • 更新 Deployment 的镜像:kubectl set image deployment/nginx nginx=new-image:version
  • 查看更新进度:kubectl rollout status deployment/nginx
Git的安全措施



  • 掩护 Git 堆栈很重要,因为它通常包含项目的源代码和敏感信息。
  • 使用强密码,为 Git 远程堆栈设置强密码,制止简单或常用密码。
  • 限制访问权限,只授予须要职员访问权限,可使用 Git 提供的权限管理功能或第三方工具。
  • 制止提交敏感信息,若不小心提交,可使用git rm --cached <文件名>从暂存区删除,然后git commit --amend修改上一次提交。创建.gitignore文件,列出不须要被跟踪的文件和目录。
  • 确保与 Git 远程堆栈的通讯是加密的,可以使用 SSH 或 HTTPS 协议举行通讯。
  • 定期举行安全审计,检查 Git 堆栈的安全性,包括权限设置、敏感信息泄露等,可使用第三方工具。
  • 定期备份 Git 堆栈,防止数据丢失,可以使用 Git 的备份工具或复制到其他存储设备中。
  • 克隆堆栈:git clone <远程堆栈地点>。
  • 处理冲突:当多个开辟者同时修改同一个文件时,可能会出现冲突,在合并分支时须要手动解决冲突,然后提交更改。
  • 创建分支:git branch <分支名>。
  • 切换分支:git checkout <分支名>。
  • 合并分支:在一个分支上完成工作后,可将其合并到另一个分支。先切换到目标分支,然后使用git merge <源分支名>下令举行合并。
  • 初始化堆栈:git init。
  • 添加文件:git add <文件名>”或“git add.。
  • 提交更改:git commit -m “提交阐明”。
  • 查看状态:git status。
  • 查看历史记载:git log。
声明!
学习视频来自B站up主 泷羽sec 有爱好的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习互换,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则结果自负!!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表