Bagikan melalui


Tutorial: Menyebarkan aplikasi menggunakan GitOps dengan ArgoCD

Tutorial ini menjelaskan cara menggunakan GitOps dalam kluster Kubernetes. GitOps dengan ArgoCD diaktifkan sebagai ekstensi kluster di kluster Kubernetes dengan dukungan Azure Arc atau kluster Azure Kubernetes Service (AKS). Dengan GitOps, Anda dapat menggunakan repositori Git sebagai sumber kebenaran untuk konfigurasi kluster dan penyebaran aplikasi.

Penting

GitOps dengan ArgoCD saat ini dalam PRATINJAU. Lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure untuk persyaratan hukum yang berlaku untuk fitur Azure yang dalam versi beta, pratinjau, atau belum dirilis ke ketersediaan umum. Untuk dukungan ekstensi GitOps produksi, coba ekstensi GitOps menggunakan Flux.

Petunjuk / Saran

Meskipun sumber dalam tutorial ini adalah repositori Git, ArgoCD mendukung sumber file umum lainnya seperti repositori Helm dan Open Container Initiative (OCI).

Prasyarat

Untuk menyebarkan aplikasi menggunakan GitOps, Anda memerlukan kluster Kubernetes dengan dukungan Azure Arc atau kluster AKS:

Kluster Kubernetes yang mendukung Azure Arc

Kluster Azure Kubernetes Service

  • Kluster AKS berbasis MSI yang aktif dan berjalan.

    Penting

    Kluster AKS perlu dibuat dengan Identitas Layanan Terkelola (MSI), bukan Nama Prinsipal Layanan (SPN), agar ekstensi ini berfungsi. Untuk kluster AKS baru yang dibuat dengan az aks create, kluster berbasis MSI secara default. Untuk mengonversi kluster berbasis SPN ke MSI, jalankan az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Untuk informasi selengkapnya, lihat Menggunakan identitas terkelola di AKS.

  • Izin baca dan tulis pada jenis sumber daya Microsoft.ContainerService/managedClusters.

Umum untuk kedua jenis kluster

  • Izin baca dan tulis pada jenis sumber daya ini:

    • Microsoft.KubernetesConfiguration/extensions
  • Azure CLI versi 2.15 atau lebih baru. Instal Azure CLI atau gunakan perintah berikut untuk memperbarui ke versi terbaru:

    az version
    az upgrade
    
  • Alat baris perintah Kubernetes, kubectl. kubectl sudah diinstal jika Anda menggunakan Azure Cloud Shell.

    Pasang kubectl secara lokal menggunakan perintah az aks install-cli:

    az aks install-cli
    
  • Pendaftaran penyedia sumber daya Azure berikut:

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.KubernetesConfiguration
    

    Pendaftaran adalah proses asinkron dan harus selesai dalam waktu 10 menit. Untuk memantau proses pendaftaran, gunakan perintah berikut:

    az provider show -n Microsoft.KubernetesConfiguration -o table
    
    Namespace                          RegistrationPolicy    RegistrationState
    ---------------------------------  --------------------  -------------------
    Microsoft.KubernetesConfiguration  RegistrationRequired  Registered
    

Dukungan versi dan wilayah

GitOps saat ini didukung di semua wilayah yang didukung Kubernetes dengan dukungan Azure Arc. GitOps saat ini didukung di subset wilayah yang didukung AKS. Layanan GitOps menambahkan wilayah baru yang didukung pada irama reguler.

Persyaratan jaringan

Agen GitOps memerlukan TCP keluar (keluar) ke sumber repositori di port 22 (SSH) atau port 443 (HTTPS) agar berfungsi. Agen juga memerlukan akses ke URL keluar berikut:

Titik akhir (DNS) Deskripsi
https://management.azure.com Diperlukan agen untuk berkomunikasi dengan layanan Konfigurasi Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Titik akhir sarana data bagi agen untuk mendorong status dan mengambil informasi konfigurasi. Tergantung pada <region> (wilayah yang didukung yang disebutkan sebelumnya).
https://login.microsoftonline.com Diperlukan untuk mengambil dan memperbarui token Azure Resource Manager.
https://mcr.microsoft.com Diperlukan untuk mengunduh gambar kontainer untuk pengontrol.

Mengaktifkan ekstensi CLI

Instal paket ekstensi terbaru k8s-configuration dan k8s-extension CLI:

az extension add -n k8s-configuration
az extension add -n k8s-extension

Untuk memperbarui paket ini ke versi terbaru:

az extension update -n k8s-configuration
az extension update -n k8s-extension

Untuk melihat daftar semua ekstensi Azure CLI yang diinstal dan versinya, gunakan perintah berikut:

az extension list -o table

Experimental   ExtensionType   Name                   Path                                                       Preview   Version
-------------  --------------  -----------------      -----------------------------------------------------      --------  --------
False          whl             connectedk8s           C:\Users\somename\.azure\cliextensions\connectedk8s         False     1.10.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     2.2.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.6.4

Membuat ekstensi GitOps (ArgoCD) (penginstalan sederhana)

Penginstalan GitOps ArgoCD mendukung multi-penyewaan dalam mode ketersediaan tinggi (HA) dan mendukung identitas beban kerja.

Penting

Mode HA adalah konfigurasi default dan memerlukan tiga simpul dalam kluster untuk dapat menginstal. Perintah di bawah ini menambahkan --config deployWithHighAvailability=false untuk menginstal ekstensi pada satu simpul.

Perintah ini membuat konfigurasi paling sederhana yang menginstal komponen ArgoCD ke namespace baru argocd dengan akses di seluruh cluster. Akses di seluruh kluster memungkinkan definisi aplikasi ArgoCD terdeteksi di namespace apa pun yang tercantum dalam konfigurasi configmap ArgoCD di kluster. Misalnya: namespace1,namespace2

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> \
--cluster-type managedClusters \
--name argocd \
--extension-type Microsoft.ArgoCD \
--release-train preview \
--config deployWithHighAvailability=false \
--config namespaceInstall=false \
--config "config-maps.argocd-cmd-params-cm.data.application\.namespaces=namespace1,namespace2"

Jika Anda ingin membatasi akses ArgoCD ke namespace tertentu, gunakan --config namespaceInstall=true bersama dengan --target-namespace <namespace> parameter. Perintah penginstalan ini membuat namespace baru <namespace> dan menginstal komponen ArgoCD di <namespace>. Perintah penginstalan juga memungkinkan kemampuan untuk menginstal beberapa instans ArgoCD di kluster yang sama. Definisi aplikasi ArgoCD dalam konfigurasi ini hanya berfungsi di namespace <namespace>.

Membuat ekstensi GitOps (ArgoCD) dengan identitas beban kerja

Metode penginstalan alternatif yang direkomendasikan untuk penggunaan produksi adalah identitas beban kerja. Metode ini memungkinkan Anda menggunakan identitas ID Microsoft Entra untuk mengautentikasi ke sumber daya Azure tanpa perlu mengelola rahasia atau kredensial di repositori Git Anda. Penginstalan ini menggunakan autentikasi identitas beban kerja yang diaktifkan di ArgoCD versi OSS 3.0.0-rc2 atau yang lebih baru.

Penting

Mode HA adalah konfigurasi default dan memerlukan tiga simpul dalam kluster untuk dapat menginstal. Tambahkan --config deployWithHighAvailability=false untuk menginstal ekstensi pada satu simpul.

Untuk membuat ekstensi dengan identitas beban kerja, pertama-tama ganti variabel berikut dengan nilai Anda sendiri dalam templat Bicep ini:

var clusterName = '<aks-or-arc-cluster-name>'

var workloadIdentityClientId = 'replace-me##-##-###-###'
var ssoWorkloadIdentityClientId = 'replace-me##-##-###-###'

var url = 'https://<public-ip-for-argocd-ui>/'
var oidcConfig = '''
name: Azure
issuer: https://login.microsoftonline.com/<your-tenant-id>/v2.0
clientID: <same-value-as-ssoWorkloadIdentityClientId-above>
azure:
  useWorkloadIdentity: true
requestedIDTokenClaims:
  groups:
    essential: true
requestedScopes:
  - openid
  - profile
  - email
'''

var defaultPolicy = 'role:readonly'
var policy = '''
p, role:org-admin, applications, *, */*, allow
p, role:org-admin, clusters, get, *, allow
p, role:org-admin, repositories, get, *, allow
p, role:org-admin, repositories, create, *, allow
p, role:org-admin, repositories, update, *, allow
p, role:org-admin, repositories, delete, *, allow
g, replace-me##-argocd-ui-Microsoft Entra-group-admin-id, role:org-admin
'''

resource cluster 'Microsoft.ContainerService/managedClusters@2024-10-01' existing = {
  name: clusterName
}

resource extension 'Microsoft.KubernetesConfiguration/extensions@2023-05-01' = {
  name: 'argocd'
  scope: cluster
  properties: {
    extensionType: 'Microsoft.ArgoCD'
    releaseTrain: 'preview'
    configurationSettings: {
      'workloadIdentity.enable': 'true'
      'workloadIdentity.clientId': workloadIdentityClientId
      'workloadIdentity.entraSSOClientId': ssoWorkloadIdentityClientId
      'config-maps.argocd-cm.data.oidc\\.config': oidcConfig
      'config-maps.argocd-cm.data.url': url
      'config-maps.argocd-rbac-cm.data.policy\\.default': defaultPolicy
      'config-maps.argocd-rbac-cm.data.policy\\.csv': policy
      'config-maps.argocd-cmd-params-cm.data.application\\.namespaces': 'default, argocd'
    }
  }
}

Templat Bicep dapat dibuat menggunakan perintah ini:

az deployment group create --resource-group <resource-group> --template-file <bicep-file>

Parameter-parameternya

clusterName adalah nama kluster Kubernetes dengan dukungan AKS atau Arc.

workloadIdentityClientId dan ssoWorkloadIdentityClientId adalah ID klien dari identitas terkelola yang ingin digunakan untuk identitas beban kerja. ssoWorkloadIdentityClientId digunakan untuk autentikasi untuk UI ArgoCD dan workloadIdentityClientId digunakan untuk identitas beban kerja untuk komponen ArgoCD. Kunjungi Microsoft Entra ID App Registration Auth menggunakan OIDC untuk informasi tambahan tentang penyiapan umum dan konfigurasi ssoWorkloadIdentityClientId.

url adalah IP publik UI ArgoCD. Tidak ada IP publik atau nama domain kecuali kluster sudah memiliki pengontrol ingress yang disediakan pelanggan. Jika demikian, aturan ingress perlu ditambahkan ke UI ArgoCD setelah penyebaran.

oidcConfig - ganti <your-tenant-id> dengan ID penyewa ID Microsoft Entra Anda. Ganti <same-value-as-ssoWorkloadIdentityClientId-above> dengan nilai ssoWorkloadIdentityClientIdyang sama dengan .

policy variabel adalah argocd-rbac-cm configmap konfigurasi ArgoCD. g, replace-me##-argocd-ui-entra-group-admin-id adalah ID grup Microsoft Entra yang memberikan akses admin ke UI ArgoCD. ID grup Microsoft Entra dapat ditemukan di portal Azure di bawah ID > Grup > Microsoft Entra nama-grup-Anda> Properti. Anda dapat menggunakan ID pengguna Microsoft Entra alih-alih ID grup Microsoft Entra. ID pengguna Microsoft Entra dapat ditemukan di portal Azure di bawah ID > Microsoft Entra > Pengguna nama pengguna Anda> Properti.

Membuat kredensial identitas beban kerja

Untuk menyiapkan kredensial identitas beban kerja baru, ikuti langkah-langkah berikut:

  1. Ambil URL penerbit OIDC untuk kluster AKS atau kluster Kubernetes dengan dukungan Arc.

  2. Buat identitas terkelola dan catat ID klien dan ID penyewanya.

  3. Buat kredensial identitas federasi untuk kluster AKS atau kluster Kubernetes dengan dukungan Arc. Contohnya:

    # For source-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${OIDC_ISSUER}" --subject system:serviceaccount:"argocd":"source-controller" --audience api://AzureADTokenExchange
    
  4. Pastikan untuk memberikan izin yang tepat untuk identitas beban kerja untuk sumber daya yang Anda inginkan untuk ditarik oleh pengontrol sumber atau pengontrol pemantul gambar. Misalnya, jika menggunakan Azure Container Registry, pastikan ( Container Registry Repository Reader untuk registri yang diaktifkan ABAC) atau AcrPull (untuk registri non-ABAC) telah diterapkan.

Menghubungkan ke registri ACR privat atau repositori ACR dengan menggunakan identitas beban kerja

Untuk menggunakan registri ACR privat atau repositori ACR, ikuti instruksi dalam dokumentasi ArgoCD resmi untuk menyambungkan ke registri ACR privat. Beri Label pada Pod, Buat Kredensial Identitas Federasi, dan Tambahkan anotasi ke Akun Layanan dalam panduan tersebut telah diselesaikan oleh ekstensi dengan penyebaran Bicep dan dapat dilewati.

Mengakses UI ArgoCD

Jika tidak ada pengontrol ingress yang ada untuk kluster AKS, maka UI ArgoCD dapat diekspos langsung menggunakan layanan LoadBalancer. Perintah berikut akan mengekspos UI ArgoCD pada port 80 dan 443.

kubectl -n argocd expose service argocd-server --type LoadBalancer --name argocd-server-lb --port 80 --target-port 8080

Menyebarkan aplikasi ArgoCD

Sekarang setelah ekstensi ArgoCD diinstal, Anda dapat menyebarkan aplikasi menggunakan UI ArgoCD atau CLI. Contoh berikut hanya menggunakan kubectl apply untuk menerapkan penyimpanan AKS di dalam aplikasi ArgoCD ke proyek ArgoCD default di argocd namespace.

kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: aks-store-demo
  namespace: argocd
spec:
  project: default
  source:    
      repoURL: https://github.com/Azure-Samples/aks-store-demo.git
      targetRevision: HEAD
      path: kustomize/overlays/dev
  syncPolicy:
      automated: {}
  destination:
      namespace: argocd
      server: https://kubernetes.default.svc
EOF

Aplikasi demo toko AKS diinstal ke namespace pets. Lihat halaman web aplikasi dengan mengikuti instruksi ini. Pastikan untuk mengunjungi alamat IP menggunakan http dan bukan https.

Perbarui konfigurasi ekstensi

Peta konfigurasi ArgoCD dapat diperbarui setelah penginstalan dan pengaturan konfigurasi ekstensi lainnya menggunakan perintah berikut:

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name Microsoft.ArgoCD –-config "config-maps.argocd-cm.data.url='https://<public-ip-for-argocd-ui>/auth/callback'”

Penting untuk memperbarui configmap ArgoCD melalui ekstensi agar pengaturannya tidak tertimpa. Menerapkan templat bicep adalah metode alternatif untuk az cli memperbarui konfigurasi.

Menghapus ekstensi

Gunakan perintah berikut untuk menghapus ekstensi.

az k8s-extension delete -g <resource-group> -c <cluster-name> -n argocd -t managedClusters --yes

Langkah selanjutnya

  • Masalah file dan permintaan fitur pada repositori Azure/AKS dan pastikan untuk menyertakan kata "ArgoCD" dalam deskripsi atau judul.
  • Jelajahi sampel kode rekayasaAKS-Platform yang menggunakan OSS ArgoCD dengan Backstage dan Cluster API Provider for Azure (CAPZ) atau Crossplane.