Bekerja dengan Proyek CD Argo - Amazon EKS

Bantu tingkatkan halaman ini

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

Untuk berkontribusi pada panduan pengguna ini, pilih Edit halaman ini pada GitHub tautan yang terletak di panel kanan setiap halaman.

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

Bekerja dengan Proyek CD Argo

Argo CD Projects (AppProject) menyediakan pengelompokan logis dan kontrol akses untuk Aplikasi. Proyek menentukan repositori Git, cluster target, dan ruang nama yang dapat digunakan Aplikasi, memungkinkan batas multi-tenancy dan keamanan dalam instance CD Argo bersama.

Kapan menggunakan Proyek

Gunakan Proyek untuk:

  • Pisahkan aplikasi berdasarkan tim, lingkungan, atau unit bisnis

  • Batasi tim repositori mana yang dapat digunakan

  • Batasi cluster dan ruang nama mana yang dapat diterapkan oleh tim

  • Menerapkan kuota sumber daya dan jenis sumber daya yang diizinkan

  • Menyediakan penerapan aplikasi swalayan dengan pagar pembatas

Proyek Default

Setiap kemampuan Argo CD mencakup default proyek yang memungkinkan akses ke semua repositori, cluster, dan ruang nama. Meskipun berguna untuk pengujian awal, buat proyek khusus dengan batasan eksplisit untuk penggunaan produksi.

Untuk detail tentang konfigurasi proyek default dan cara membatasinya, lihat Proyek Default dalam dokumentasi Argo CD.

Buat Proyek

Buat Proyek dengan menerapkan sumber AppProject daya ke cluster Anda.

Contoh: Proyek khusus tim

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: description: Applications for Team A # Source repositories this project can deploy from sourceRepos: - 'https://github.com/my-org/team-a-*' - 'https://github.com/my-org/shared-libs' # Destination clusters and namespaces destinations: - name: dev-cluster namespace: team-a-dev - name: prod-cluster namespace: team-a-prod # Allowed resource types clusterResourceWhitelist: - group: '' kind: Namespace namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap

Terapkan Proyek:

kubectl apply -f team-a-project.yaml

Konfigurasi proyek

Repositori sumber

Kontrol repositori Git mana yang dapat digunakan Aplikasi dalam proyek ini:

spec: sourceRepos: - 'https://github.com/my-org/app-*' # Wildcard pattern - 'https://github.com/my-org/infra' # Specific repo

Anda dapat menggunakan wildcard dan pola negasi (!awalan) untuk mengizinkan atau menolak repositori tertentu. Untuk detailnya, lihat Mengelola Proyek dalam dokumentasi Argo CD.

Pembatasan tujuan

Batasi tempat Aplikasi dapat menyebarkan:

spec: destinations: - name: prod-cluster # Specific cluster by name namespace: production - name: '*' # Any cluster namespace: team-a-* # Namespace pattern
penting

Gunakan nama cluster dan pola namespace tertentu daripada wildcard untuk Proyek produksi. Ini mencegah penyebaran yang tidak disengaja ke cluster atau ruang nama yang tidak sah.

Anda dapat menggunakan wildcard dan pola negasi untuk mengontrol tujuan. Untuk detailnya, lihat Mengelola Proyek dalam dokumentasi Argo CD.

Pembatasan sumber daya

Kontrol tipe sumber daya Kubernetes mana yang dapat digunakan:

Sumber daya cakupan cluster:

spec: clusterResourceWhitelist: - group: '' kind: Namespace - group: 'rbac.authorization.k8s.io' kind: Role

Sumber daya dengan cakupan ruang nama:

spec: namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap - group: 's3.services.k8s.aws' kind: Bucket

Gunakan daftar hitam untuk menolak sumber daya tertentu:

spec: namespaceResourceBlacklist: - group: '' kind: Secret # Prevent direct Secret creation

Tetapkan Aplikasi ke Proyek

Saat membuat Aplikasi, tentukan proyek di spec.project lapangan:

apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app namespace: argocd spec: project: team-a # Assign to team-a project source: repoURL: https://github.com/my-org/my-app path: manifests destination: name: prod-cluster namespace: team-a-prod

Aplikasi tanpa proyek tertentu menggunakan default proyek.

Peran proyek dan RBAC

Proyek dapat menentukan peran khusus untuk kontrol akses berbutir halus. Petakan peran proyek ke pengguna dan grup Pusat AWS Identitas dalam konfigurasi kemampuan Anda untuk mengontrol siapa yang dapat menyinkronkan, memperbarui, atau menghapus aplikasi.

Contoh: Proyek dengan peran pengembang dan admin

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: sourceRepos: - '*' destinations: - name: '*' namespace: 'team-a-*' roles: - name: developer description: Developers can sync applications policies: - p, proj:team-a:developer, applications, sync, team-a/*, allow - p, proj:team-a:developer, applications, get, team-a/*, allow groups: - team-a-developers - name: admin description: Admins have full access policies: - p, proj:team-a:admin, applications, *, team-a/*, allow groups: - team-a-admins

Untuk detail tentang peran proyek, token JWT untuk CI/CD pipeline, dan konfigurasi RBAC, lihat Peran Proyek dalam dokumentasi Argo CD.

Pola umum

Proyek Berbasis Lingkungan

Buat proyek terpisah untuk setiap lingkungan:

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: production namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/*' destinations: - name: prod-cluster namespace: '*' # Strict resource controls for production clusterResourceWhitelist: [] namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service

Proyek Berbasis Tim

Mengisolasi tim dengan proyek khusus:

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: platform-team namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/platform-*' destinations: - name: '*' namespace: 'platform-*' # Platform team can manage cluster resources clusterResourceWhitelist: - group: '*' kind: '*'

Proyek Multi-cluster

Terapkan ke beberapa cluster dengan kebijakan yang konsisten:

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: global-app namespace: argocd spec: sourceRepos: - 'https://github.com/my-org/global-app' destinations: - name: us-west-cluster namespace: app - name: eu-west-cluster namespace: app - name: ap-south-cluster namespace: app

Praktik terbaik

Mulailah dengan Proyek yang membatasi: Mulailah dengan izin sempit dan perluas sesuai kebutuhan daripada memulai dengan akses luas.

Gunakan pola namespace: Manfaatkan wildcard dalam batasan namespace (sepertiteam-a-*) untuk memungkinkan fleksibilitas sambil mempertahankan batas.

Proyek produksi terpisah: Gunakan Proyek khusus untuk produksi dengan kontrol yang lebih ketat dan kebijakan sinkronisasi manual.

Tujuan Proyek Dokumen: Gunakan description bidang untuk menjelaskan untuk apa setiap Proyek dan siapa yang harus menggunakannya.

Tinjau izin Proyek secara teratur: Audit Proyek secara berkala untuk memastikan pembatasan masih selaras dengan kebutuhan tim dan persyaratan keamanan.

Sumber daya tambahan