# 云计算

  • 2006 年,亚马逊公司推出云服务 EC2、S3 ,开启了云计算时代,此后出现了许多提供云服务的公司。
    • 在传统模式下,用户想部署一个 Web 网站时,需要自己购买服务器裸机,然后安装操作系统、Web 服务器、依赖软件。
    • 在云计算时代,用户可以直接使用云服务商提供的 Web、数据库等服务器,省掉一些亲自动手的工作量。

# 服务模式

云计算的服务模式包括:

  • IaaS :基础设施即服务(Infrastructure as a Service),云端提供一些基础设施供用户使用,比如服务器裸机。
  • Paas :平台即服务(Platform as a Service),云端提供平台资源供用户使用,比如 Linux 服务器、硬盘。
  • SaaS :软件即服务(Software as a Service),云端提供一些软件供用户使用,比如给开发者提供已部署的 MySQL、Nginx ,给普通用户提供电商网站。
  • BaaS :后端即服务(Backend as a Service),云端提供一些后端服务供用户使用,比如数据库、对象存储。
  • FaaS :函数即服务(Function as a Service),云端直接运行用户编写的代码,不需要用户构建、部署。
    • 比如云端提供一些部署在容器中的前端模板项目、Python 模板项目,允许用户修改其中的代码。

# 相关概念

  • VPS(Virtual Private Servers ,虚拟专用服务器)
    • :又称为虚拟机。可以在一台物理服务器上通过 Hypervisor 技术运行多个虚拟服务器,分配给多个用户私自使用。
  • CVM(Cloud Virtual Machine ,云虚拟机)
    • :指云平台提供的 VPS 。
    • 有的云平台将它称为 ECS(Elastic Compute Service ,弹性计算服务器)。
  • VPC(Virtual Private Cloud ,虚拟私有云)
    • :云平台上一种小的逻辑分区,管理一组 VPS ,专门供某个用户或企业使用,像一个 Paas 层的私有云。
  • VDC(Virtual Data Center ,虚拟数据中心)
    • :云平台上一种大的逻辑分区,管理一组 VPS、CPU、内存、硬盘等资源,像一个 IaaS 层的私有云。
  • OpenStack
    • :一个开源的云平台框架,采用 Python 开发,常用于搭建云平台并管理服务器等资源,提供 IaaS 服务。
  • CNCF(Cloud Native Computing Foundation,云原生计算基金会)
    • 2015 年,Linux 基金会下属的 CNCF 基金会成立,旨在推动云原生技术的发展。
    • 负责管理 containerd、k8s、CoreDNS、etcd、Prometheus 等项目。
  • 云原生(Cloud Native)
    • :一种系统架构,旨在充分利用云平台的优势。
    • 比如为了利用 k8s 的优势,要把传统服务改造成容器化部署,最好实现无状态。
    • 特点:
      • 容器化部署
      • 微服务架构
      • 服务网格
      • 不可变基础设施:尽量不修改程序的运行环境,而是根据虚拟机镜像、容器镜像创建运行环境。这样控制运行环境,容易复制、迁移、升级、回滚。
      • 声明式 API :比如用户可通过 YAML 文件声明 k8s 对象的期望状态,k8s 会自动达到期望状态,不需要用户指导过程。
  • Serverless
    • :一种设计模式,又称为无服务器架构。是让软件开发人员专注于代码开发,不必关注在服务器上如何构建、部署、运维。
    • 云计算的 BaaS 和 FaaS 都属于 Serverless 。
    • 例如微信小程序实现了 Serverless ,开发者写好代码之后就可以直接发布。

# VPC 组网

  • 一个 VPC 中包含的各个 VPS ,默认位于同一个局域网,可以使用内网 IP 相互通信。

    • 不同 VPC 之间网络隔离,需要添加路由表才能相互通信。
    • 一个 VPC 中还可以划分多个子网,但这些子网之间并没有网络隔离。
  • 安全组:相当于防火墙规则,用于控制主机的出入流量。

    • 主机的出入流量先受到主机上 firewalld 防火墙的控制,再受到云平台安全组的控制。
    • 可以给一个或多个 VPS 绑定一个或多个安全组。

VPC 内部的主机与外部通信的方法:

  • 可以给 VPC 添加 NAT 网关,让 VPC 能与公网通信。此时网络包的流向为:VPC 主机 → NAT 网关 → 公网主机 。
  • 可以给 VPC 添加 VPN ,让 VPC 能与本地网络通信。此时网络包的流向为:VPC 主机 → VPC 网关 → 公网中转 → VPN 服务器 → 公网中转 → 本地网关 → 本地主机 。
  • 可以给 VPC 中的一个主机绑定外部某个网络的 IP ,使其能够与该网络的主机通信。这个 IP 在不用的时候可以解绑,因此称为 "弹性 IP" 。
    • 例如,使用弹性公网 IP ,就可以让 VPC 中的主机与公网通信。
    • 一个弹性 IP 只能让 VPC 中的一个主机与外部通信,而一个 NAT 网关可以让 VPC 中的所有主机与外部通信。
    • 如果将一个弹性公网 IP 给 NAT 网关使用,就可以让 VPC 中的所有主机都能访问公网。

下图是腾讯云的网络架构:

  • CVM 部署在 region1 的 VPC 中,不具备公网 IP ,不能主动与公网通信,对外网不可见。

  • 当公网中的主机主动访问集群时,要将请求发送到 LBS 的公网 IP 地址、80 端口。

    • LBS 会将从 80 端口收到的流量转发给 VPC 中的几个 CVM——将数据包的目的 IP、目的端口改为某台 CVM 的内网 IP、端口。CVM 收到该包之后,会把它转发到相应的容器端口。
    • 当 CVM 处理完请求之后,会将回复的数据包通过 LBS 返回给公网的主机。
  • 当 CVM 主动访问公网时,要将请求发送到 NAT 网关,由 NAT 网关进行代理。

  • 当 CVM1 主动访问同一个 VPC 内的另一个 CVM2 时,需要先配置从 CVM1 到 CVM2 的路由表。

  • 当 CVM1 主动访问另一个 VPC 内的 CVM 时,需要先通过 "对等连接" 功能将两个 VPC 的网络连通,然后配置两个 VPC 之间的路由表。

  • 在腾讯云购买一个 VPS 之后,如果需要连通公网,有两种计费模式:

    • 按带宽计费 :限制公网出带宽的最大值,即 VPS 发向公网的流量。
      • 公网入带宽与公网出带宽相等,但至少会分配 10 Mbps ,因为能共享机房的入带宽。
    • 按流量计费 :每隔 1 小时,按使用的公网出流量计费,而公网入流量不计费。
  • VPC 本身是一层虚拟网络,只能模拟 OSI 网络层及以上的功能,不能模拟数据链路层、物理层的大部分功能,在这方面不如物理机房。

    • 公有云平台一般不支持传播 ARP、BGP 消息。用户需要调用公有云的 API ,才能分配自定义 IP 、修改路由规则。
    • 有的公有云平台将所有 VPS 的 IP 地址都固定解析到网关的 Mac 地址,由网关转发流量。