

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Sederhanakan penerapan aplikasi multi-tenant Amazon EKS dengan menggunakan Flux
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux"></a>

*Nadeem Rahaman, Aditya Ambati, Aniket Dekate, dan Shrikant Patil, Amazon Web Services*

## Ringkasan
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-summary"></a>

Banyak perusahaan yang menawarkan produk dan layanan adalah industri yang diatur data yang diperlukan untuk mempertahankan hambatan data antara fungsi bisnis internal mereka. Pola ini menjelaskan bagaimana Anda dapat menggunakan fitur multi-tenancy di Amazon Elastic Kubernetes Service (Amazon EKS) untuk membangun platform data yang mencapai isolasi logis dan fisik antara penyewa atau pengguna yang berbagi satu kluster Amazon EKS. Pola memberikan isolasi melalui pendekatan berikut:
+ Isolasi namespace Kubernetes
+ Kontrol akses berbasis peran (RBAC)
+ Kebijakan jaringan
+ Kuota sumber daya
+ AWS Identity and Access Management (IAM) peran untuk akun layanan (IRSA)

Selain itu, solusi ini menggunakan Flux untuk menjaga konfigurasi penyewa tetap tidak berubah saat Anda menerapkan aplikasi. Anda dapat menerapkan aplikasi penyewa Anda dengan menentukan repositori penyewa yang berisi file Flux dalam konfigurasi Anda. `kustomization.yaml`

Pola ini mengimplementasikan yang berikut:
+  AWS CodeCommit Repositori, AWS CodeBuild proyek, dan AWS CodePipeline pipeline, yang dibuat dengan menerapkan skrip Terraform secara manual.
+ Jaringan dan komponen komputasi yang diperlukan untuk hosting penyewa. Ini dibuat melalui CodePipeline dan CodeBuild dengan menggunakan Terraform.
+ Ruang nama penyewa, kebijakan jaringan, dan kuota sumber daya, yang dikonfigurasi melalui bagan Helm.
+ Aplikasi milik penyewa yang berbeda, digunakan dengan menggunakan Flux.

Kami menyarankan Anda merencanakan dan membangun arsitektur Anda sendiri dengan hati-hati untuk multi-tenancy berdasarkan persyaratan unik dan pertimbangan keamanan Anda. Pola ini memberikan titik awal untuk implementasi Anda.

## Prasyarat dan batasan
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ AWS Command Line Interface [(AWS CLI) versi 2.11.4 atau yang lebih baru, [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dan dikonfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) versi 0.12 atau yang lebih baru diinstal pada mesin lokal Anda
+ [Terraform AWS Provider](https://registry.terraform.io/providers/hashicorp/aws/latest) versi 3.0.0 atau yang lebih baru
+ [Penyedia Kubernetes](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs) versi 2.10 atau yang lebih baru
+ [Helm Provider](https://registry.terraform.io/providers/hashicorp/helm/latest/docs) versi 2.8.0 atau yang lebih baru
+ [Kubectl Provider](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs) versi 1.14 atau yang lebih baru

**Batasan**
+ **Ketergantungan pada penerapan manual Terraform: Penyiapan** awal alur kerja, termasuk membuat CodeCommit repositori, CodeBuild proyek, dan CodePipeline saluran pipa, bergantung pada penerapan Terraform manual. Ini memperkenalkan batasan potensial dalam hal otomatisasi dan skalabilitas, karena memerlukan intervensi manual untuk perubahan infrastruktur.
+ **CodeCommit ketergantungan repositori:** Alur kerja bergantung pada CodeCommit repositori sebagai solusi manajemen kode sumber dan digabungkan dengan erat. Layanan AWS

## Arsitektur
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-architecture"></a>

**Arsitektur target**

Pola ini menyebarkan tiga modul untuk membangun infrastruktur pipeline, jaringan, dan komputasi untuk platform data, seperti yang diilustrasikan dalam diagram berikut.

*Arsitektur pipa:*

![\[Infrastruktur pipa untuk arsitektur multi-tenant Amazon EKS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/76a4a23d-4275-427a-ae36-51c9a3803128.png)


*Arsitektur jaringan:*

![\[Infrastruktur jaringan untuk arsitektur multi-tenant Amazon EKS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/e542249a-19a3-4c99-b6f5-fdf80fee4edf.png)


*Arsitektur komputasi:*

![\[Infrastruktur komputasi untuk arsitektur multi-tenant Amazon EKS\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/97b700a7-74b6-4f9d-b53a-76de42409a8e/images/91bd1ca8-17f0-433c-8600-4c8e6c474e31.png)


## Alat
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-tools"></a>

**Layanan AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)adalah layanan build terkelola penuh yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)adalah layanan kontrol versi yang membantu Anda menyimpan dan mengelola repositori Git secara pribadi, tanpa perlu mengelola sistem kontrol sumber Anda sendiri.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)membantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) EKS) membantu Anda menjalankan AWS Kubernetes tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)adalah hub pusat yang menghubungkan virtual private cloud (VPCs) dan jaringan lokal.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) membantu Anda meluncurkan AWS sumber daya ke jaringan virtual yang telah Anda tentukan. Jaringan virtual ini menyerupai jaringan tradisional yang akan Anda operasikan di pusat data Anda sendiri, dengan manfaat menggunakan infrastruktur yang dapat diskalakan. AWS

**Alat-alat lainnya**
+ Kebijakan Jaringan [Cilium mendukung kebijakan jaringan](https://cilium.io/use-cases/network-policy/#:~:text=Cilium%20implements%20Kubernetes%20Network%20Policies,%2C%20Kafka%2C%20gRPC%2C%20etc.) Kubernetes L3 dan L4. Mereka dapat diperluas dengan kebijakan L7 untuk menyediakan keamanan tingkat API untuk HTTP, Kafka, dan gRPC, dan protokol serupa lainnya.
+ [Flux](https://fluxcd.io/) adalah alat pengiriman berkelanjutan (CD) berbasis Git yang mengotomatiskan penerapan aplikasi di Kubernetes.
+ [Helm](https://helm.sh/docs/) adalah pengelola paket open source untuk Kubernetes yang membantu Anda menginstal dan mengelola aplikasi di klaster Kubernetes Anda.
+ [Terraform](https://www.terraform.io/) adalah alat infrastruktur sebagai kode (IAc) HashiCorp yang membantu Anda membuat dan mengelola sumber daya cloud dan lokal.

**Repositori kode**

Kode untuk pola ini tersedia di repositori Solusi GitHub [Terraform Multi-Tenancy EKS](https://github.com/aws-samples/aws-eks-multitenancy-deployment).

## Praktik terbaik
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-best-practices"></a>

Untuk pedoman dan praktik terbaik untuk menggunakan implementasi ini, lihat berikut ini:
+ [Praktik terbaik multi-tenancy Amazon EKS](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Dokumentasi fluks](https://fluxcd.io/flux/get-started/)

## Epik
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-epics"></a>

### Buat pipeline untuk tahap build, test, dan deploy Terraform
<a name="create-pipelines-for-terraform-build-test-and-deploy-stages"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori proyek. | Kloning repositori [Solusi Terraform Multi-Tenancy GitHub EKS](https://github.com/aws-samples/aws-eks-multitenancy-deployment) dengan menjalankan perintah berikut di jendela terminal:<pre>git clone https://github.com/aws-samples/aws-eks-multitenancy-deployment.git</pre> | AWS DevOps | 
| Bootstrap bucket Terraform S3 dan Amazon DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Perbarui `locals.tf` file `run.sh` dan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Menyebarkan modul pipa. | Untuk membuat sumber daya pipeline, jalankan perintah Terraform berikut secara manual. Tidak ada orkestrasi untuk menjalankan perintah ini secara otomatis.<pre>./run.sh -m pipeline -e demo -r <AWS_REGION> -t init<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t plan<br />./run.sh -m pipeline -e demo -r <AWS_REGION> -t apply</pre> | AWS DevOps | 

### Buat infrastruktur jaringan
<a name="create-the-network-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Mulai pipa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html)Setelah proses pertama ini, pipeline dimulai secara otomatis setiap kali Anda melakukan perubahan ke cabang utama CodeCommit repositori.Pipa meliputi [tahapan](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts.html#concepts-stages) berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Validasi sumber daya yang dibuat melalui modul jaringan. | Konfirmasikan bahwa AWS sumber daya berikut dibuat setelah pipeline berhasil diterapkan:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Buat infrastruktur komputasi
<a name="create-the-compute-infrastructure"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Perbarui `locals.tf` untuk mengaktifkan akses CodeBuild proyek ke VPC. | Untuk menyebarkan add-on untuk kluster pribadi Amazon EKS, CodeBuild proyek harus dilampirkan ke VPC Amazon EKS.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Perbarui `buildspec` file untuk membangun modul komputasi. | Di `templates` folder, di semua file `buildspec` YAMM, atur nilai `TF_MODULE_TO_BUILD` variabel dari `network` ke`compute`:<pre>TF_MODULE_TO_BUILD: "compute"</pre> | AWS DevOps | 
| Perbarui `values` file untuk bagan Helm manajemen penyewa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Validasi sumber daya komputasi. | Setelah Anda memperbarui file di langkah sebelumnya, CodePipeline mulai secara otomatis. Konfirmasikan bahwa itu membuat AWS sumber daya berikut untuk infrastruktur komputasi:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 

### Periksa manajemen penyewa dan sumber daya lainnya
<a name="check-tenant-management-and-other-resources"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Validasi sumber daya manajemen penyewa di Kubernetes. | Jalankan perintah berikut untuk memeriksa apakah sumber daya manajemen penyewa berhasil dibuat dengan bantuan Helm.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | AWS DevOps | 
| Verifikasi penerapan aplikasi penyewa. | Jalankan perintah berikut untuk memverifikasi bahwa aplikasi penyewa telah digunakan.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) |  | 

## Pemecahan masalah
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Anda menemukan pesan galat yang mirip dengan berikut ini:`Failed to checkout and determine revision: unable to clone unknown error: You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit.` | Ikuti langkah-langkah ini untuk memecahkan masalah:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux.html) | 

## Sumber daya terkait
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-resources"></a>
+ [Cetak Biru Amazon EKS untuk Terraform](https://github.com/aws-ia/terraform-aws-eks-blueprints)
+ [Panduan Praktik Terbaik Amazon EKS, bagian Multi-penyewaan](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/)
+ [Situs Flux](https://fluxcd.io/)
+ [Situs Helm](https://helm.sh/)

## Informasi tambahan
<a name="simplify-amazon-eks-multi-tenant-application-deployment-by-using-flux-additional"></a>

Berikut adalah contoh struktur repositori untuk menerapkan aplikasi penyewa:

```
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
```