Monday

18-08-2025 Vol 19

Automating APISIX TLS Secrets with CertManager using Argo Events: A Hands-On Guide

Automasi Rahasia TLS APISIX dengan Cert-Manager Menggunakan Argo Events: Panduan Praktis

Dalam lanskap arsitektur mikroservis yang terus berkembang, keamanan dan otomatisasi adalah hal terpenting. Mengamankan Application Programming Interfaces (API) dengan Transport Layer Security (TLS) adalah praktik standar untuk melindungi data sensitif yang transit. Namun, mengelola sertifikat TLS secara manual bisa menjadi tugas yang membosankan dan rentan terhadap kesalahan. Di sinilah otomatisasi berperan. Posting blog ini membahas tentang cara mengotomatiskan rahasia TLS APISIX menggunakan Cert-Manager dan Argo Events, sehingga menyederhanakan proses dan meningkatkan postur keamanan Anda.

Mengapa Otomatiskan Rahasia TLS APISIX?

Sebelum mempelajari detail teknis, mari kita pahami mengapa mengotomatiskan rahasia TLS APISIX sangat penting:

  1. Keamanan yang Ditingkatkan: Sertifikat TLS yang kedaluwarsa dapat menyebabkan kerentanan keamanan. Otomatisasi memastikan sertifikat diperbarui secara berkala, sehingga mengurangi risiko pelanggaran.
  2. Pengoperasian yang Disederhanakan: Pengelolaan sertifikat manual sangat memakan waktu dan rentan terhadap kesalahan manusia. Otomatisasi menyederhanakan proses, membebaskan tim untuk fokus pada tugas-tugas strategis.
  3. Skalabilitas: Seiring pertumbuhan aplikasi Anda, jumlah sertifikat yang perlu Anda kelola juga meningkat. Otomatisasi menskalakan dengan mulus, memastikan semua API Anda aman.
  4. Pengurangan Downtime: Sertifikat yang kedaluwarsa dapat menyebabkan downtime aplikasi. Otomatisasi mencegah hal ini dengan memperbarui sertifikat sebelum kedaluwarsa.
  5. Konsistensi: Otomatisasi memastikan sertifikat dikonfigurasi secara konsisten di semua lingkungan, sehingga mengurangi risiko kesalahan konfigurasi.

Pengantar APISIX, Cert-Manager, dan Argo Events

Untuk menerapkan otomatisasi rahasia TLS APISIX, kita akan menggunakan tiga komponen utama:

  1. APISIX: APISIX adalah gateway API dan load balancer cloud-native berkinerja tinggi yang menyediakan berbagai fitur termasuk perutean, otentikasi, dan otorisasi.
  2. Cert-Manager: Cert-Manager adalah pengontrol Kubernetes yang mengotomatiskan pemberian dan pengelolaan sertifikat TLS dari berbagai sumber, seperti Let’s Encrypt, HashiCorp Vault, dan CA pribadi.
  3. Argo Events: Argo Events adalah kerangka kerja berbasis peristiwa untuk Kubernetes yang memungkinkan Anda memicu alur kerja berdasarkan peristiwa.

Prasyarat

Sebelum memulai, pastikan Anda memiliki prasyarat berikut:

  1. Kluster Kubernetes: Anda memerlukan kluster Kubernetes yang berfungsi. Anda dapat menggunakan kluster lokal seperti Minikube atau Kind, atau kluster cloud seperti AWS EKS, Google GKE, atau Azure AKS.
  2. kubectl: Alat baris perintah kubectl harus dikonfigurasi untuk terhubung ke kluster Kubernetes Anda.
  3. Helm: Helm adalah pengelola paket untuk Kubernetes. Ini akan digunakan untuk menginstal Cert-Manager dan Argo Events.
  4. APISIX: APISIX harus diinstal di kluster Kubernetes Anda.

Langkah 1: Instal Cert-Manager

Pertama, kita akan menginstal Cert-Manager menggunakan Helm:

  1. Tambahkan Repositori Helm Cert-Manager:
    helm repo add jetstack https://charts.jetstack.io
    helm repo update
  2. Instal Cert-Manager:
    helm install
    cert-manager jetstack/cert-manager \
      --namespace cert-manager \
      --create-namespace \
      --version v1.11.0 \
      --set installCRDs=true
  3. Verifikasi Instalasi:
    kubectl get pods --namespace cert-manager

    Pastikan semua pod dalam namespace `cert-manager` dalam keadaan `Running`.

Langkah 2: Konfigurasi Penerbit Cert-Manager

Cert-Manager menggunakan sumber daya `Issuer` atau `ClusterIssuer` untuk mewakili sumber sertifikat. Kami akan menggunakan Let’s Encrypt untuk contoh ini. Buat file bernama `letsencrypt-issuer.yaml` dengan konten berikut:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: your-email@example.com
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: apisix

Catatan: Ganti `your-email@example.com` dengan alamat email Anda yang valid. Pastikan kelas ingress sesuai dengan kelas ingress yang Anda gunakan untuk APISIX.

Terapkan Issuer:

kubectl apply -f letsencrypt-issuer.yaml

Langkah 3: Instal Argo Events

Sekarang, mari kita instal Argo Events menggunakan Helm:

  1. Tambahkan Repositori Helm Argo:
    helm repo add argo https://argoproj.github.io/argo-helm
    helm repo update
  2. Instal Argo Events:
    helm install argo-events argo/argo-events --namespace argo-events --create-namespace
  3. Verifikasi Instalasi:
    kubectl get pods --namespace argo-events

    Pastikan semua pod dalam namespace `argo-events` dalam keadaan `Running`.

Langkah 4: Buat Sumber Peristiwa Cert-Manager

Kita akan membuat sumber peristiwa yang memantau sumber daya `Certificate` di Kubernetes dan memicu peristiwa ketika status sertifikat berubah. Buat file bernama `cert-manager-event-source.yaml` dengan konten berikut:

apiVersion: argoproj.io/v1alpha1
kind: EventSource
metadata:
  name: cert-manager
  namespace: argo-events
spec:
  resource:
    groupVersion: cert-manager.io/v1
    kind: Certificate
    namespace: default # Ganti dengan namespace sertifikat Anda
    eventTypes:
      - ADD
      - UPDATE
    filter:
      jsonLogic:
        "and":
          - { "==": [ { "var": "data.status.conditions.#(type==\"Ready\").status" }, "True" ] }
          - { "==": [ { "var": "data.metadata.annotations.example\\.com/auto-reload" }, "true" ] }
    pollingInterval: 60s

Penjelasan:

  • `groupVersion`: Menentukan grup API dan versi sumber daya `Certificate`.
  • `kind`: Menentukan jenis sumber daya yang akan dipantau, dalam hal ini `Certificate`.
  • `namespace`: Menentukan namespace tempat sumber daya `Certificate` berada. Ganti `default` dengan namespace tempat Anda membuat sertifikat.
  • `eventTypes`: Menentukan jenis peristiwa yang akan dipicu, dalam hal ini `ADD` dan `UPDATE`.
  • `filter`: Menggunakan `jsonLogic` untuk memfilter peristiwa. Peristiwa hanya dipicu jika status sertifikat `Ready` adalah `True` dan anotasi `example.com/auto-reload` diatur ke `true`.
  • `pollingInterval`: Menentukan seberapa sering sumber peristiwa memeriksa perubahan, dalam hal ini setiap 60 detik.

Terapkan Sumber Peristiwa:

kubectl apply -f cert-manager-event-source.yaml

Langkah 5: Buat Sensor Argo Events

Sensor mendengarkan peristiwa dari sumber peristiwa dan memicu alur kerja berdasarkan peristiwa tersebut. Kita akan membuat sensor yang memicu alur kerja untuk memperbarui rahasia TLS APISIX ketika sertifikat siap. Buat file bernama `cert-manager-sensor.yaml` dengan konten berikut:

apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: cert-manager-sensor
  namespace: argo-events
spec:
  dependencies:
    - name: cert-ready
      eventSourceName: cert-manager
      eventName: resource
  triggers:
    - template:
        name: update-apisix-secret
        k8s:
          group: ""
          version: v1
          resource: secrets
          operation: patch
          source:
            resource:
              apiVersion: v1
              kind: Secret
              metadata:
                name: apisix-tls # Ganti dengan nama rahasia TLS APISIX Anda
                namespace: default # Ganti dengan namespace rahasia Anda
              data:
                tls.crt: "{{.Data.data.status.certificate}}"
                tls.key: "{{.Data.data.status.privateKey}}"

Penjelasan:

  • `dependencies`: Menentukan dependensi peristiwa. Sensor mendengarkan peristiwa bernama `resource` dari sumber peristiwa `cert-manager`.
  • `triggers`: Menentukan pemicu yang akan dipicu ketika dependensi peristiwa terpenuhi.
  • `template`: Menentukan templat untuk pemicu. Dalam hal ini, templat tersebut memperbarui rahasia Kubernetes.
  • `k8s`: Menentukan sumber daya Kubernetes yang akan diperbarui. Dalam hal ini, ini adalah sumber daya `Secret`.
  • `operation`: Menentukan operasi yang akan dilakukan pada sumber daya Kubernetes. Dalam hal ini, ini adalah operasi `patch`.
  • `source`: Menentukan sumber data untuk operasi `patch`. Dalam hal ini, ini adalah data dari peristiwa.
  • `tls.crt`: Diisi dengan sertifikat dari status sertifikat.
  • `tls.key`: Diisi dengan kunci pribadi dari status sertifikat.

Penting:

  • Ganti `apisix-tls` dengan nama rahasia TLS APISIX Anda.
  • Ganti `default` dengan namespace tempat rahasia Anda berada.

Terapkan Sensor:

kubectl apply -f cert-manager-sensor.yaml

Langkah 6: Buat Sertifikat

Sekarang, kita akan membuat sumber daya `Certificate` yang meminta sertifikat dari Let’s Encrypt. Buat file bernama `example-certificate.yaml` dengan konten berikut:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: example-com
  namespace: default # Ganti dengan namespace Anda
  annotations:
    example.com/auto-reload: "true"
spec:
  secretName: apisix-tls # Ganti dengan nama rahasia TLS APISIX Anda
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
    - example.com
    - www.example.com

Penjelasan:

  • `secretName`: Menentukan nama rahasia Kubernetes yang akan menyimpan sertifikat dan kunci pribadi. Ganti `apisix-tls` dengan nama rahasia TLS APISIX Anda.
  • `issuerRef`: Menentukan penerbit yang akan digunakan untuk mengeluarkan sertifikat. Dalam hal ini, kita menggunakan `letsencrypt-prod` yang kita buat pada Langkah 2.
  • `dnsNames`: Menentukan nama domain yang valid untuk sertifikat. Ganti `example.com` dan `www.example.com` dengan domain Anda.
  • `annotations`: menambahkan anotasi `example.com/auto-reload: “true”` agar sensor hanya memicu peristiwa jika sertifikat memiliki anotasi ini.

Terapkan Sertifikat:

kubectl apply -f example-certificate.yaml

Langkah 7: Verifikasi Otomatisasi

Untuk memverifikasi bahwa otomatisasi berfungsi, periksa status sumber daya `Certificate`:

kubectl describe certificate example-com -n default

Cari kondisi `Ready` dan pastikan statusnya `True`.

Setelah sertifikat siap, Argo Events akan memicu sensor, dan sensor akan memperbarui rahasia TLS APISIX. Anda dapat memeriksa rahasia untuk memastikan sertifikat dan kunci pribadi diperbarui:

kubectl get secret apisix-tls -n default -o yaml

Periksa data `tls.crt` dan `tls.key` untuk memastikan sertifikat dan kunci pribadi diperbarui.

Langkah 8: Konfigurasikan APISIX untuk Menggunakan Rahasia TLS

Terakhir, Anda perlu mengonfigurasi APISIX untuk menggunakan rahasia TLS yang diperbarui. Ini dapat dilakukan dengan memperbarui sumber daya APISIX `Route` atau `StreamRoute` untuk menentukan rahasia TLS.

Contoh:

apiVersion: apisix.apache.org/v2beta3
kind: Route
metadata:
  name: example-route
spec:
  host: example.com
  tls:
    secret:
      name: apisix-tls
  upstream:
    type: roundrobin
    nodes:
      - host: 127.0.0.1:8080
        weight: 1

Pastikan untuk mengganti `apisix-tls` dengan nama rahasia TLS Anda dan `example.com` dengan nama host Anda.

Troubleshooting

Jika Anda mengalami masalah, berikut adalah beberapa tip untuk memecahkan masalah:

  • Periksa Log Cert-Manager: Periksa log pod Cert-Manager untuk kesalahan apa pun.
  • Periksa Log Argo Events: Periksa log sumber peristiwa dan sensor Argo Events untuk kesalahan apa pun.
  • Periksa Status Sertifikat: Gunakan `kubectl describe certificate ` untuk memeriksa status sumber daya `Certificate`.
  • Periksa Rahasia TLS: Pastikan rahasia TLS diperbarui dengan sertifikat dan kunci pribadi yang benar.
  • Periksa Konfigurasi APISIX: Pastikan konfigurasi APISIX dikonfigurasi dengan benar untuk menggunakan rahasia TLS.

Kesimpulan

Dalam posting blog ini, kita telah membahas cara mengotomatiskan rahasia TLS APISIX menggunakan Cert-Manager dan Argo Events. Dengan mengotomatiskan proses ini, Anda dapat meningkatkan keamanan, menyederhanakan operasi, dan memastikan API Anda aman dan dapat diandalkan. Otomatisasi ini tidak hanya menghemat waktu tetapi juga mengurangi risiko kesalahan manusia, sehingga memberikan lingkungan yang lebih aman dan efisien untuk aplikasi Anda.

Dengan mengikuti langkah-langkah yang diuraikan dalam panduan ini, Anda dapat mengintegrasikan solusi otomatisasi ini ke dalam infrastruktur Anda, memastikan sertifikat TLS Anda selalu terbaru dan APISIX Anda aman. Integrasi Cert-Manager dan Argo Events secara bersama-sama menyediakan solusi yang kuat untuk pengelolaan siklus hidup sertifikat di lingkungan Kubernetes Anda.

Pertimbangkan untuk menjelajahi fitur-fitur lanjutan Cert-Manager dan Argo Events untuk lebih mengoptimalkan otomatisasi dan mengintegrasikannya dengan alat dan alur kerja lain dalam ekosistem Anda. Eksperimen dengan berbagai konfigurasi untuk menyesuaikan proses otomatisasi dengan kebutuhan spesifik Anda, sehingga memaksimalkan efektivitas dan efisiensi implementasi Anda.

Sumber Daya Tambahan

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *