本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Flux 简化亚马逊EKS多租户应用程序部署
由 Nadeem Rahaman (AWS)、Aditya Ambati ()、Aniket Dekate (AWS) 和 Shrikant Patil () 创作 AWS AWS
摘要
注意: AWS CodeCommit 不再向新客户开放。的现有客户 AWS CodeCommit 可以继续照常使用该服务。了解更多
许多提供产品和服务的公司都是受数据监管的行业,需要在内部业务职能之间保持数据屏障。此模式描述了如何使用 Amazon Elastic Kubernetes Service EKS (Amazon) 中的多租户功能来构建一个数据平台,在共享单个 Amazon 集群的租户或用户之间实现逻辑和物理隔离。EKS该模式通过以下方法提供隔离:
Kubernetes 命名空间隔离
基于角色的访问控制 () RBAC
网络策略
资源配额
AWS Identity and Access Management (IAM) 服务帐号的角色 (IRSA)
此外,此解决方案使用 Flux 在部署应用程序时保持租户配置不可变。您可以通过在配置中指定包含 Flux kustomization.yaml
文件的租户存储库来部署租户应用程序。
此模式实现了以下内容:
通过手动部署 Terraform 脚本创建的 AWS CodeCommit 存储库、 AWS CodeBuild 项目和 AWS CodePipeline 管道。
托管租户所需的网络和计算组件。它们是 CodeBuild 通过 CodePipeline 和使用 Terraform 创建的。
租户命名空间、网络策略和资源配额,它们通过 Helm 图表进行配置。
属于不同租户的应用程序,使用 Flux 进行部署。
我们建议您根据自己的独特要求和安全考虑,仔细规划和构建自己的多租户架构。这种模式为您的实施提供了一个起点。
先决条件和限制
先决条件
活跃的 AWS 账户
AWS Command Line Interface (AWS CLI) 版本 2.11.4 或更高版本,已安装并配置
本地计算机上安装了 Terraform
版本 0.12 或更高版本 Terraform P AWS rovider
版本 3.0.0 或更高版本 Kubernetes 提供程序
版本 2.10 或更高版本 Helm Provid
er 版本 2.8.0 或更高版本 Kubectl 提供者
版本 1.14 或更高版本
限制
对 Terraform 手动部署的依赖:工作流程的初始设置(包括创建 CodeCommit 存储库、 CodeBuild 项目和 CodePipeline 管道)依赖于手动 Terraform 部署。这在自动化和可扩展性方面带来了潜在的限制,因为它需要手动干预才能进行基础架构的更改。
CodeCommit 存储库依赖关系:工作流程依赖于 CodeCommit 存储库作为源代码管理解决方案,并与之紧密结合 AWS 服务。
架构
目标架构
这种模式部署了三个模块来为数据平台构建管道、网络和计算基础架构,如下图所示。
管道架构:
网络架构:
计算架构:
工具
AWS 服务
AWS CodeBuild是一项完全托管的生成服务,可帮助您编译源代码、运行单元测试和生成可随时部署的工件。
AWS CodeCommit是一项版本控制服务,可帮助您私下存储和管理 Git 存储库,而无需管理自己的源代码控制系统。
AWS CodePipeline帮助您快速建模和配置软件发布的不同阶段,并自动执行持续发布软件更改所需的步骤。
亚马逊 Elastic Kubernetes Servic EKS e(亚马逊)可帮助你在上面运行 AWS Kubernetes,而无需安装或维护自己的 Kubernetes 控制平面或节点。
AWS Transit Gateway是连接虚拟私有云 (VPCs) 和本地网络的中央集线器。
Amazon Virtual Private Cloud(亚马逊VPC)可帮助您将 AWS 资源启动到您定义的虚拟网络中。该虚拟网络类似于您在数据中心中运行的传统网络,并具有使用 AWS的可扩展基础设施的优势。
其他工具
Cilium 网络策略
支持 Kubernetes L3 和 L4 网络策略。它们可以通过 L7 策略进行扩展,为 HTTP Kafka 和 g RPC 以及其他类似协议提供API级别的安全性。 Flux
是一款基于 Git 的持续交付 (CD) 工具,可自动在 Kubernetes 上部署应用程序。 Helm
是一款适用于 Kubernetes 的开源软件包管理器,可帮助你在 Kubernetes 集群上安装和管理应用程序。 Terraform
是一款基础设施即代码 (IaC) 工具 HashiCorp ,可帮助您创建和管理云和本地资源。
代码存储库
此模式的代码可在 GitHub EKS多租户 Terraform
最佳实践
有关使用此实现的指南和最佳实践,请参阅以下内容:
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
克隆项目存储库。 | 在终端窗口中运行以下命令,克隆 GitHub EKS多租户 Terraform 解决方案
| AWS DevOps |
引导 Terraform S3 存储桶和亚马逊 DynamoDB。 |
| AWS DevOps |
更新 |
| AWS DevOps |
部署管道模块。 | 要创建管道资源,请手动运行以下 Terraform 命令。没有自动运行这些命令的编排。
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
启动管道。 |
第一次运行后,每当你向 CodeCommit 存储库主分支提交更改时,管道就会自动启动。 该管道包括以下阶段:
| AWS DevOps |
验证通过网络模块创建的资源。 | 确认以下 AWS 资源是在成功部署管道后创建的:
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
更新 | 要为亚马逊EKS私有集群部署插件,必须将该 CodeBuild 项目附加到亚马逊EKSVPC。
| AWS DevOps |
更新 | 在
| AWS DevOps |
更新租户管理 Helm 图表的 |
| AWS DevOps |
验证计算资源。 | 在前面的步骤中更新文件后,将自动 CodePipeline 启动。确认它已为计算基础设施创建了以下 AWS 资源:
| AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
在 Kubernetes 中验证租户管理资源。 | 运行以下命令以检查租户管理资源是否在 Helm 的帮助下成功创建。
| AWS DevOps |
验证租户应用程序部署。 | 运行以下命令以验证租户应用程序是否已部署。
|
故障排除
事务 | 解决方案 |
---|---|
您会遇到一条类似于以下内容的错误消息:
| 请按照以下步骤解决问题:
|
相关资源
其他信息
以下是用于部署租户应用程序的存储库结构示例:
applications sample_tenant_app ├── README.md ├── base │ ├── configmap.yaml │ ├── deployment.yaml │ ├── ingress.yaml │ ├── kustomization.yaml │ └── service.yaml └── overlays ├── tenant-1 │ ├── configmap.yaml │ ├── deployment.yaml │ └── kustomization.yaml └── tenant-2 ├── configmap.yaml └── kustomization.yaml