04 混合云:如何突破混合云落地的三大难点?
你好,我是潘野。上一讲我们介绍了IaC的工具选型,着重介绍了两个开源的IaC工具Terraform和Pulumi。
虽然使用这两个工具管理某个云环境,应该是相对容易的,但是如果你的业务环境中既有公有云,又有私有云,或者是有两个及以上的公有云的话,又该怎么做呢?
对于这个问题,你首先想到的可能是,Terraform里多用几个Provider不就实现基于IaC方式的多云管理了吗?
这个想法其实并不全面。如果你的公司跑在不同云上的业务相对独立,没有交集的话,这样确实可行。因为Terraform、Pulumi这样的工具就能快速获取资源,只需要我们写好给不同云使用的Terraform代码即可。不过在真实工作中,情况会更加复杂,学完今天的内容,相信你会对多云管理问题有一个更深入的认识。
混合云方案的必要性
有同学一定会有这样的疑问,各家公有云承诺的SLA,根据服务类型不同,大部分是99.95%到99.99%(这里附上 AWS SLA的详细列表,供你课后查阅),这已经是极高的可用性了。那么从高可用的角度来看,我们还需要使用两种以上的云吗?
我认为仍然有必要。讲一个我的亲身经历,某个业务组要升级AWS RDS数据库实例。在升级过程中,数据库卡在某个状态不响应,此时业务无法点回退。找到AWS Support请求帮助,AWS Support查看了之后立刻向上汇报,并告知后台需要重置此数据库,且需要几层审批。最终在2小时才通过审批,但是此时业务也中断了2小时。
从这例子能够看出。虽然云厂商提供了很高的SLA,但是依然会发生故障。尽管因为云平台的故障而引起的业务中断,云平台会做出相应补偿,但是实际上对公司而言,业务中断损失仍是巨大的。
为了保障业务连续性,降低业务中断、故障的可能性。如果我们把所有业务都依赖于一个云服务供应商,这种风险自然很高。
而混合云的策略,其实就是“把鸡蛋分散在多个篮子里”。也就是使用多种云来分摊风险,提高业务稳定性。这样一来,即使某个云服务供应商出了问题,我们也能迅速切换到其他云服务,保证业务的连续性。
除了高可用的考量,混合云也让我们有更多的选择空间。各家云服务平台的特性、功能存在差异,我们可以根据业务需要灵活选取。比如,Google Cloud在大数据处理、人工智能或者机器学习等特定领域可能拥有更强的优势。Azure与 Microsoft的其他产品有很好的集成,对于使用Microsoft办公系统的公司来说,Azure也几乎是必用的平台。
还有法律法规或者竞业的一些因素。例如中国法律规定的数据不能出境,有可能你需要将服务同时部署在aws.com和aws.cn,也可能因为某个云平台是竞争对手,所以服务不能部署在上面。
另外,不同的云服务平台价格政策也不同,我们可以根据具体的业务预算,选择性价比较高的组合。
简单总结一下,我们在选择多云服务时,需要综合考虑业务的需求、成本、性能、数据安全、合规性等等很多因素。
混合云的落地难点
刚刚我们讨论了混合云方案的必要性,还有需要考虑的因素,接下来,我们再分析一下混合云落地的困难点。无论是这三种模式的混合云中的哪一种,只有Terraform代码都远远不够。这其中有三个技术难点,我们逐一分析。
第一个难点是如何 实现不同云服务间的流量转移。流量转移的难度主要体现在三个方面。
-
兼容性问题。不同云服务提供商往往采用不同的技术标准和规范,因此在进行流量转移时可能会遇到兼容性问题。
-
性能问题。流量转移可能会影响服务的性能,例如云服务商所提供的网络带宽与路由策略不太一样,当需要做跨云传输的时候,数据流量增大或需要实时处理流量中的数据的时候,可能会出现延迟或数据堵塞的问题。
-
成本问题。不同云的收费标准不一样,因此流量转移可能会产生额外的费用,包括流量费用、数据处理费用等,这需要在流量转移前做好预算,充分考虑。
第二个难点,就是屏蔽 所有云环境之间差异。
因为不同云服务提供商技术标准不同,这就导致实现和维持所有云环境的一致性,需要大量的定制化开发和维护工作。此外,当云服务提供商不断更新和优化其技术和服务时,我们也需要相应做出更新和调整,这无疑让管理和运维工作变得更加繁重、复杂。
第三个难点是 数据安全和隐私保护问题。
首先,混合云环境中的数据流动性较高,数据在公有云、私有云和本地数据中心之间频繁移动,这就增加了数据被非法访问或泄露的风险。
其次,混合云涉及多个云服务提供商,不同提供商可能有不同的数据安全和隐私保护标准和策略,这使得统一管理和保护数据变得更加困难。
最后,由于混合云的复杂性,可能存在一些未知的安全漏洞或隐患。这可能被恶意攻击者利用,对数据安全和隐私造成威胁。
解决方案
难点分析完了,我们就来逐一解决。
多云互联
对于难点一,我们需要先建设多云互联环境,这是实现流量转移的前提条件。
多云互联指的是在多个云服务平台之间建立网络连接,使这些平台能够共享数据和资源。这样可以提高数据可用性,增加冗余性,并且提供更大的灵活性。
一般混合云有这么三种模式。
- 单一公有云与私有云混合,公司使用了某一家云平台,同时公司也有自己的机房。
- 多种公有云与私有云混合:公司使用了不止一家的云平台,同时公司也拥有自己的机房。
- 没有私有云,多种公有云混合:公司没有自己的机房,全部的业务都放在云上,并使用了不止一家的云平台。
一般来说,第一种和第二种模式,我们会采用下面这张图上的架构。
这里我用AWS为例为你说明一下实现方案,AWS有一个服务叫做Direct Connect,这个服务用来打通一个本地机房到多个 AWS 的区域的网络,甚至可以打通不同的本地机房和不同的 AWS 区域。通常来说,这需要以下几个步骤:
- 通过AWS管理控制台AWS CLI或AWS Direct Connect API来创建一个新的Direct Connect连接。
- 选择一个AWS Direct Connect位置,通常是离公司数据中心最近的位置。
- 如果数据中心不在AWS Direct Connect位置,还需要与一家AWS指定的合作伙伴来专门建立一条专线,用来打通数据中心和AWS的网络。
- 接下来,在AWS里创建一个或多个虚拟接口,这些虚拟接口会连接到你在AWS上的VPC或服务。
- 最后,配置你的数据中心路由器来使用BGP与AWS通信。
对于第三种模式,我举个例子,AWS与Azure实现内网互通,通常需要建立一个专线网络连接或者使用VPN连接,大概的步骤是这样的:
- 设置VPN连接:在AWS和Azure中都创建一个VPN网关,然后创建一个站点到站点的VPN连接,将两个云的私有网络连接起来。
- 配置路由:在AWS和Azure的路由表中添加路由,让AWS的私有网络可以访问到Azure的私有网络,反之亦然。注意这里AWS和Azure的VPC网络不能重叠。
- 配置安全组和网络安全组:在AWS的安全组和Azure的网络安全组中配置规则,允许两个云的私有网络之间的流量。
- 测试连接:从AWS的一个实例ping Azure的一个实例,确认网络连接已经建立。
这只是一种基本的设置方法,具体的设置可能会根据你的网络结构和业务需求有所不同。
另外,我们还需要注意的是,虽然通过VPN连接可以实现AWS与Azure的内网互通,但是这种方式的网络性能可能会受到VPN的限制。如果希望达到更高的网络性能,你可以考虑使用专线网络连接。
流量管理
可以看到,多云互联提供了一种连接多个云的方式,这让不同云之间流量转移变得更加容易和高效。前面我提到,不同云服务商所提供的网络带宽与路由策略不太一样,在跨云传输的场景里,数据流量增大或需要实时处理流量中的数据时,可能会出现延迟或数据堵塞的问题。所以我们需要对流量进行管理,避免这类情况出现。
我们可能需要用到以下工具。
- 负载均衡器:负载均衡器能够在多个服务器或云环境之间分配网络流量,确保每个应用都能得到所需的带宽。
- 流量管理工具:这类工具可以帮助你监控和管理流量,例如,它们可以帮助你在应用之间分配带宽,或者在出现网络拥塞时重新路由流量。
屏蔽不同云厂商接口的差异
我举个例子来解释下什么时候会遇到云提供商接口的差异。
各个云厂商提供的服务类型大致相同,但是它们的API与用法都有所不同。例如在AWS里,Redis服务叫做Elastic Cache;在Azure里,Redis服务叫Azure Cache。
它们都是Redis,但是最大的不同在于,Azure中在Redis上强制启用用户名和密码,但是AWS中就可以采用匿名访问方式。
那么一旦你的应用使用到了Redis,如果同时部署在AWS和Azure上,那就需要考虑这种不一致的情况。所以为了维持所有云环境之间的一致性,可以采取以下几种策略。
第一,采用标准化的云服务接口和协议。这可以大大减少云服务间的兼容性问题,简化管理和运维工作。例如我们在不同的云上都使用Kubernetes,帮我们屏蔽云服务的API差异。
第二,实施统一的云管理平台。通过集中管理和自动化工具,可以有效管理和维护多个云环境,确保它们的一致性。比如我们可以使用 Terraform + GitOps 的方式来管理不同云环境的配置。
第三,定期进行云环境的审计和检查,通过比较和分析各云环境的配置和状态,可以及时发现和解决一致性问题。这里我们可以利用云平台自带的监控组件,一旦发现有配置变化,便可以报警给我们。
第四,建立专门的团队来负责云环境的一致性,包括定制化开发、管理和运维等工作。这可以保证云环境的一致性并及时应对任何变化和问题。
加密与审计
最后我们来解决第三个难点—— 数据安全和隐私保护。
我们看下AWS的权限模型,AWS采用了基于属性的访问控制(ABAC)的一种授权策略,该策略基于属性来定义权限,尽可能避免使用明文的用户名密码,
ABAC的复杂性就在于此,因为属性无限多,想要根据各种属性来判断权限是否足够,需要涉及到非常多的判断和规则,还要考虑优先级处理问题。
但是AWS IAM仍然做到了易用,这是因为IAM本身更偏向于ABAC实现,但是通过policy, user/user group/role 抽象之后,整个系统的行为非常像 RBAC(Role-Based Access Control),也就是基于角色的访问控制。同时,CloudTrail这个服务能够帮助我们实现操作的审计与追踪。
接下来,我们就结合实例,看看怎么使用AWS的CloudTrail来追踪统计用户行为。
首先,我们登陆到CloudTrail的界面, https://console.aws.amazon.com/cloudtrail/home,在页面左侧点击Lake。
因为CloudTrail会将统计结果存储在S3中,所以我们需要先配置一个事件数据存储 。下图展示了如何配置,你可以参考一下。我们点击配置事件数据存储,定义好存储名称,之后的步骤2和3选择默认选项,只需要一路点击下一个即可。
完成创建事件存储之后,我们就可以按需来查询我们想审计的事件,CloudTrail给用户提供了SQL语句的形式来查询事件。例如我们要调查用户行为,就可以输入如下的SQL语句:
SELECT
eventID, eventName, eventSource, eventTime, userIdentity.arn AS user
FROM
e1f3e0ee-8760-4864-9f4a-6aad6b1a67c5
WHERE
userIdentity.arn LIKE '%<username>%'
AND eventTime > '2024-02-19 00:00:00' AND eventTime < '2024-02-22 00:00:00'
如下图,点击运行按钮。如果一切正常的话,你会看到这个查询被成功执行,并且发送到S3中,你可以在S3中直接查询审计结果。
常用工具
在管理多种公有云时,有许多工具可以帮助我们进行统一管理和优化。最后,我再带你梳理一下多云管理的常用工具。
- Cloud Management Platforms (CMPs):这类平台能够提供一个统一的界面来管理多个云服务供应商,常用的有Scalr和Azure Arc。它们可以帮助企业在多个云环境之间进行资源管理、成本控制和自动化操作。
- Infrastructure as Code (IaC) 工具:在多个云平台上自动化部署和管理资源,常见的工具包括Terraform和Pulumi。通过编写代码,运维人员可以自动化地创建、修改和管理云资源,从而提高效率并减少人为错误。
- 多云监控工具:用于跨多个云平台收集和分析性能数据,常用的有Datadog、New Relic。这些工具可以帮助我们发现并解决问题,优化服务性能。
- 多云安全管理工具:这类工具能够帮助企业管理多个云平台的安全策略和合规性,常用的有Dome9和VMware CloudHealth。
我们在使用这些工具时,重要的是弄清楚每个工具的优点和局限性,并根据业务需求来选择和配置工具。这样才能最大限度地发挥云计算的优势,提高业务的效率和稳定性。
总结
混合云的管理是一个复杂的过程,涉及到多个方面。我们不但要考虑多云之间的差异管理,保证不同云之间数据传输的可靠性与性能,还需要重视云环境中的安全性与合规性。
混合云对业务可靠性的提升是至关重要的。在实施多云管理中我们需要重点关注这三点。
1.首先需要解决云服务间的互通性和兼容性问题,才能实现不同云服务间的无缝对接。
2.为了维持所有云环境之间的一致性,可以采用标准化的云服务接口和协议,并借助一些管理工具实施统一的云管理平台。
3.数据安全和隐私保护问题也不能忽略,需要我们做好加密和审计工作。
思考题
结合上一讲中我们介绍的Terraform,你能否写一段代码,同时在AWS和Azure上分别启动一个虚拟机,并在其中启动一个HTTP服务?
欢迎你在留言区和我交流互动,如果这一讲对你有启发,别忘了分享给身边的朋友。