混合云落地难点与gitops

135 阅读4分钟

一般混合云有三种模式:

1.单一公有云与私有云混合 2.多种公有云与私有云混合 3.没有私有云,多种公有云混合

一般来说,第一种和第二种模式,我们会采用下面这张图的架构:

image.png

这里用AWS为例说明一下实现方案,AWS有一个服务叫做Direct Connect,这个服务用来打通一个本地机房到多个AWS的区域网络,甚至可以打通不同机房的不同AWS区域

1.通过 AWS 管理控制台 AWS CLI 或 AWS Direct Connect API 来创建一个新的 Direct Connect 连接。 2.选择一个 AWS Direct Connect 位置,通常是离公司数据中心最近的位置。 3.如果数据中心不在 AWS Direct Connect 位置,还需要与一家 AWS 指定的合作伙伴来专门建立一条专线,用来打通数据中心和 AWS 的网络。 4.接下来,在 AWS 里创建一个或多个虚拟接口,这些虚拟接口会连接到你在 AWS 上的 VPC 或服务。最后,配置你的数据中心路由器来使用 BGP 与 AWS 通信。

接下来要解决混合云的常见问题:

  1. 屏蔽不同云厂商的接口差异: 采用标准化云服务接口和协议,可以大大减少云服务之间的兼容性问题,例如我们都在不同云上使用Kubernetes,帮我们屏蔽云服务的API差异。
  2. 通过集中管理和自动化工具,可以有效管理和维护多个云环境,比如我们可以使用Terraform+Gitops的方式来管理不同云环境的配置
  3. 数据安全与隐私保护: AWS采用属性访问控制 ABAC的一种授权策略,该策略基于属性来定义权限, ABAC的复杂性就在于,因为属性无限多,想要根据各种属性来判断权限是否足够,需要设计到非常多的判断和规则

但是AWS IAM 仍然做到了易用,这是因为IAM本身更偏向于ABAC实现,但是通过policy,user/user group/role 抽象之后,整个系统非常象RBAC(Role-based Access control),同时,CloudTrail这个服务能够帮我实现操作的审计与追踪。

GitOps 之 CI/CD 现在我们可以选择的持续部署和持续集成工具有很多,比较老牌的有jenkin,Github与自带的Github Action,还有Kubernetes 社区推出的Tekon等工具

一般来说,持续集成的工具都会有Webhook 与代码仓库Github或者Gitlab集成。在GitOps中,当Git仓库中有新的更改,Git仓库可以通过Webhook 通知CI/CD 工具 再由CI/CD 工具拉取新的代码更改并启动构建和部署流y。

GitOps 之安全问题

我们在管理基础设施的时候,难免要遇到一些认证场景问题,比如容器的私有镜像仓库 但我们不能直接将用户名和密码直接写入命令中,我么遇到这种情况我们该怎么解决呢

第一种做法,使用开源安全工具:git-crypt 对 Git 仓库中的文件进行加密和解密。Git-crypt 工作原理是在提交时自动加密文件,并在 git checkout 时自动解密文件。这种方式无缝地集成到 Git 中,使得敏感数据的保护变得易如反掌。

第二种做法,使用密钥管理工具,比如 HashiCorp Vault、AWS Secret Manager 等工具。这些工具提供了一个中心化的位置供我们存储、访问和分发密钥,并提供精准的访问控制策略,供我们限制不同用户的访问权限,为每个客户端生成独特的短期访问凭证。这些工具还支持我们对数据进行高级别的加密,并提供详细的审计日志功能,这样一来,我们就能安全地存储和管理敏感数据了。

image.png

整个过程大致经历这五个步骤。 1.Tom 向仓库提交一个 Pull Request,将 AWS 的 EC2 实例从原来的 t2.micro 更换成 m4.xlarge。 2.CI 流水线会检查 Tom 的代码,并执行 Terraform plan,将结果返回给 Github 的 Pull Request 中。 3.接下来,同组 Jerry 会审核代码的变化,并检查 Terraform plan 的输出是否如代码所写。 4.所有代码检查通过之后,Tom 将 PR 合并进代码主分支,利用持续部署工具部署代码。 5.如果代码有问题,可以通过 git revert 的方式回滚代码。接下来,持续部署工具会再次运行 terraform apply 来完成回滚操作。