翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Flux を使用して Amazon EKS マルチテナントアプリケーションのデプロイを簡素化する
Nadeem Rahaman、Aditya Ambati、Aniket Dekate、Shrikant Patil、Amazon Web Services
概要
製品やサービスを提供する多くの企業は、社内のビジネス機能間のデータバリアを維持するためにデータ規制が必要とされる業界です。このパターンでは、Amazon Elastic Kubernetes Service (Amazon EKS) のマルチテナンシー機能を使用して、単一の Amazon EKS クラスターを共有するテナントまたはユーザー間で論理的および物理的な分離を実現するデータプラットフォームを構築する方法について説明します。このパターンは、以下のアプローチを通じて分離を実現します。
Kubernetes 名前空間の分離
ロールベースのアクセスコントロール (RBAC)
ネットワークポリシー
リソースクォータ
AWS Identity and Access Management サービスアカウント (IRSA) の (IAM) ロール
また、このソリューションは Flux を使用して、アプリケーションをデプロイするときにテナント設定をイミュータブルに保ちます。設定に Flux kustomization.yaml ファイルを含むテナントリポジトリを指定することにより、テナントアプリケーションをデプロイできます。
このパターンでは、以下を実装します。
AWS CodeCommit Terraform スクリプトを手動でデプロイすることで作成されるリポジトリ、 AWS CodeBuild プロジェクト、 AWS CodePipeline パイプライン。
テナントをホストするために必要なネットワークコンポーネントとコンピューティングコンポーネント。これらは、Terraform を使用して CodePipeline と CodeBuild を介して作成されます。
Helm チャートで設定されるテナント名前空間、ネットワークポリシー、リソースクォータ。
Flux を使用してデプロイされた、異なるテナントに属するアプリケーション。
固有の要件とセキュリティ上の考慮事項に基づいて、マルチテナンシー用に独自のアーキテクチャを慎重に計画および構築することをお勧めします。このパターンは、実装の開始点となります。
前提条件と制限事項
前提条件
アクティブな AWS アカウント
AWS Command Line Interface (AWS CLI) バージョン 2.11.4 以降、インストールおよび設定済み
ローカルマシンにインストールされた Terraform
バージョン 0.12 以降 Terraform AWS Provider
バージョン 3.0.0 以降 Kubernetes Provider
バージョン 2.10 以降 Helm Provider
バージョン 2.8.0 以降 Kubectl Provider
バージョン 1.14 以降
制限事項
Terraform 手動デプロイの依存関係: CodeCommit リポジトリ、CodeBuild プロジェクト、CodePipeline パイプラインの作成を含むワークフローの初期セットアップは、Terraform の手動デプロイに依存します。インフラストラクチャの変更に手動で介入する必要があるため、自動化とスケーラビリティの面で潜在的な制限が生じます。
CodeCommit リポジトリの依存関係: ワークフローは、ソースコード管理ソリューションとして CodeCommit リポジトリに依存し、密接に結合されています AWS のサービス。
アーキテクチャ
ターゲットアーキテクチャ
このパターンでは、次の図に示すように、3 つのモジュールをデプロイして、データプラットフォームのパイプライン、ネットワーク、コンピューティングインフラストラクチャを構築します。
パイプラインアーキテクチャ:

ネットワークアーキテクチャ:

コンピューティングアーキテクチャ:

ツール
AWS のサービス
AWS CodeBuild は完全マネージド型の構築サービスです。ソースコードのコンパイル、ユニットテストの実行、すぐにデプロイできるアーティファクトの生成を行います。
AWS CodeCommit は、独自のソースコントロールシステムを管理することなく、Git リポジトリを非公開で保存および管理できるバージョン管理サービスです。
AWS CodePipeline は、ソフトウェアリリースのさまざまな段階を迅速にモデル化および設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。
Amazon Elastic Kubernetes Service (Amazon EKS) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。
AWS Transit Gateway は、仮想プライベートクラウド (VPC) とオンプレミスネットワークを接続する中央ハブです。
Amazon Virtual Private Cloud (Amazon VPC) は、定義した仮想ネットワークに AWS リソースを起動するのに役立ちます。この仮想ネットワークは、ユーザー自身のデータセンターで運用されていた従来のネットワークと似ていますが、 AWSのスケーラブルなインフラストラクチャを使用できるという利点があります。
その他のツール
Cilium ネットワークポリシー
は、Kubernetes L3 および L4 ネットワークポリシーをサポートします。L7 ポリシーで拡張して、HTTP、Kafka、gRPC、その他の同様のプロトコルに API レベルのセキュリティを提供できます。 Flux
は、Git ベースの継続的デリバリー (CD) ツールです。Kubernetes へのアプリケーションのデプロイを自動化します。 Helm
は、Kubernetes 用のオープンソースのパッケージマネージャです。Kubernetes クラスター上でアプリケーションをインストールおよび管理できます。 「Terraform
」は、HashiCorp の infrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。
コードリポジトリ
このパターンのコードは、GitHub「EKS Multi-Tenancy Terraform Solution
ベストプラクティス
この実装を使用するためのガイドラインとベストプラクティスについては、以下を参照してください。
エピック
| タスク | 説明 | 必要なスキル |
|---|---|---|
プロジェクトリポジトリのクローンを作成する | ターミナルウィンドウで次のコマンドを実行して、GitHub EKS Multi-Tenancy Terraform Solution
| AWS DevOps |
Terraform S3 バケットと Amazon DynamoDB をブートストラップします。 |
| AWS DevOps |
|
| AWS DevOps |
パイプラインモジュールをデプロイします。 | パイプラインリソースを作成するには、次の Terraform コマンドを手動で実行します。これらのコマンドを自動的に実行するためのオーケストレーションはありません。
| AWS DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
パイプラインを開始します。 |
初めて実行した後は、CodeCommit リポジトリのメインブランチに変更をコミットするたびに、パイプラインが自動的に開始されます。 パイプラインには次のステージが含まれます。
| AWS DevOps |
ネットワークモジュールを通じて作成されたリソースを検証します。 | パイプラインが正常にデプロイされた後に、次の AWS リソースが作成されていることを確認します。
| AWS DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
| Amazon EKS プライベートクラスターのアドオンをデプロイするには、CodeBuild プロジェクトを Amazon EKS VPC にアタッチする必要があります。
| 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