翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Flux を使用して Amazon EKS マルチテナントアプリケーションのデプロイを簡素化する
Nadeem Rahaman、Aditya Ambati、Aniket Dekate、および Shrikant Patil、Amazon Web Services
概要
注意: AWS CodeCommit は新規顧客には利用できなくなりました。の既存のお客様は、通常どおりサービスを AWS CodeCommit 引き続き使用できます。詳細はこちら
製品やサービスを提供する多くの企業は、内部ビジネス機能間のデータ障壁を維持するために必要なデータ規制産業です。このパターンでは、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 プロバイダー
バージョン 3.0.0 以降 Kubernetes プロバイダー
バージョン 2.10 以降 Helm プロバイダー
バージョン 2.8.0 以降 Kubectl プロバイダー
バージョン 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
は、Kubernetes へのアプリケーションのデプロイを自動化する Git ベースの継続的デリバリー (CD) ツールです。 Helm
は、Kubernetes クラスターへのアプリケーションのインストールと管理に役立つ Kubernetes のオープンソースパッケージマネージャーです。 「Terraform
」は、HashiCorpのinfrastructure as code (IaC) ツールで、クラウドとオンプレミスのリソースの作成と管理を支援します。
コードリポジトリ
このパターンのコードは、GitHub EKS マルチテナンシー Terraform Solution
ベストプラクティス
この実装を使用するためのガイドラインとベストプラクティスについては、以下を参照してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
プロジェクトリポジトリのクローンを作成します。 | ターミナルウィンドウで次のコマンドを実行して、GitHub EKS マルチテナンシー Terraform ソリューション
| 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