View a markdown version of this page

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.

Membuat proyek

Buat Proyek dengan menerapkan sumber AppProject daya ke cluster Anda.

Contoh: Team-specific Proyek

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' # Source namespaces (required for EKS capability) sourceNamespaces: - argocd - team-a-dev - team-a-prod # 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.

Ruang nama sumber

Saat menggunakan kemampuan CD EKS Argo, spec.sourceNamespaces bidang diperlukan dalam AppProject definisi kustom Anda. Bidang ini menentukan ruang nama mana yang dapat berisi Aplikasi atau referensi proyek ApplicationSets ini:

penting

Ini adalah bidang wajib untuk kemampuan EKS Argo CD, yang berbeda dari OSS Argo CD di mana bidang ini opsional.

AppProject Perilaku default

default AppProject Secara otomatis menyertakan argocd namespace di. sourceNamespaces Jika Anda perlu membuat Aplikasi atau ApplicationSets ruang nama tambahan, ubah sourceNamespaces bidang untuk menambahkan ruang nama tersebut:

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: default namespace: argocd spec: sourceNamespaces: - argocd # Already included by default - team-a-apps # Add additional namespaces as needed - team-b-apps

AppProject Konfigurasi kustom

Saat membuat kustom AppProject, Anda harus secara manual menyertakan namespace argocd sistem dan ruang nama lain di mana Anda berencana untuk membuat Aplikasi atau: ApplicationSets

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a-project namespace: argocd spec: description: Applications for Team A # Required: Manually specify all namespaces sourceNamespaces: - argocd # ArgoCD system namespace (required) - team-a-dev # Custom namespace for dev Applications - team-a-prod # Custom namespace for prod Applications # Source repositories this project can deploy from sourceRepos: - 'https://github.com/my-org/team-a-*' # Destination restrictions destinations: - namespace: 'team-a-*' server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster # Use cluster ARN from: aws eks describe-cluster
catatan

Jika Anda menghilangkan namespace darisourceNamespaces, Aplikasi atau ApplicationSets dibuat di namespace itu tidak akan dapat mereferensikan proyek ini, yang mengakibatkan kegagalan penerapan.

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:

Cluster-scoped sumber daya:

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

Namespace-scoped sumber daya:

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

Environment-based Proyek

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

Team-based Proyek

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: '*'

Multi-cluster Proyek

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 batasan.

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