Menyimpan data dalam secret Kubernetes

Topik ini menjelaskan cara menyimpan data sensitif di Kubernetes secret dan mengambil data dari flow variabel dalam alur proxy API.

Pengantar

Ada kalanya Anda ingin menyimpan data untuk diambil saat runtime—data yang tidak akan habis masa berlakunya yang tidak boleh di-hard code dalam logika proxy API Anda. Salah satu pilihannya adalah menggunakan fitur peta nilai kunci (KVM) campuran. Jika Anda sudah menggunakan Kubernetes untuk pengelolaan rahasia di vault khusus untuk data sensitif, sebaiknya pertimbangkan untuk fitur rahasia Kubernetes yang dijelaskan dalam topik ini. Sama seperti data KVM, Anda dapat mengakses data secret Kubernetes dalam variabel alur proxy API.

Jenis data apa yang dapat disimpan dalam secret Kubernetes?

Apigee Hybrid membatasi Anda pada penyimpanan jenis file data berikut di secret Kubernetes. Mereka termasuk:

Format file Ekstensi file yang didukung
Sertifikat TLS dan file kunci *.crt, *.key, dan *.pem
File properti *.properties

File properti adalah file yang berisi key-value pair. Contoh:

username=admin
password=1f2d1e2e7df

Membuat secret Kubernetes

Bagian ini menjelaskan cara membuat secret Kubernetes untuk menyimpan data sensitif dalam cluster.

  1. Buat satu atau beberapa file yang ingin Anda simpan di secret Kubernetes. File harus dalam salah satu format yang didukung dengan ekstensi file yang tercantum di Jenis data dapat disimpan di secret Kubernetes.
  2. Jalankan perintah kubectl create secret generic. Contoh:
    kubectl -n namespace create secret generic org-env-policy-secret \
      --from-file=filepath/prop-file.properties \
      --from-file=filepath/key-file.key \
      --from-file="filepath/cert-file.pem
    

    Dengan keterangan:

    • namespace: Namespace Kubernetes tempat komponen runtime Anda di-deploy.
    • org: Nama organisasi Apigee Anda.
    • env: Nama lingkungan di organisasi Anda.
    • filepath: Jalur ke file yang ingin Anda sertakan dalam rahasia. Anda harus menentukan setidaknya satu file untuk disertakan dalam rahasia.
    • prop-file: Nama file properti yang akan disertakan dalam rahasia.
    • key-file: Nama file kunci TLS yang akan disertakan dalam rahasia.
    • cert-file: Nama file sertifikat TLS yang akan disertakan dalam rahasia.

    Anda dapat menyertakan satu atau beberapa file ke dalam rahasia. Contoh:

    kubectl -n apigee create secret generic myorg-test-policy-secret \
      --from-file="$policy_secrets_path"/credential.properties \
      --from-file="$policy_secrets_path"/secrets.properties \
      --from-file="$policy_secrets_path"/public.key \
      --from-file="$policy_secrets_path"/fullchain.pem
    
  3. Setelah dibuat, mungkin perlu waktu hingga 90 detik agar perubahan ditampilkan di semua cluster. Pemroses pesan melakukan polling perubahan rahasia setiap 30 detik. Jika terdeteksi perubahan, cache akan diperbarui.

Mengambil data dari secret

Setelah rahasia dibuat dan tersedia (biasanya sekitar 90 detik setelah dibuat), Anda dapat mengakses data rahasia dalam variabel alur dalam alur proxy API di organisasi/lingkungan di mana secret itu disimpan. Misalnya, anggap rahasia Anda berisi *.properties file bernama credentials.properties dengan kunci API di dalamnya, sebagai berikut:

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

Anda kemudian dapat mengambil kunci API dari flow variabel menggunakan kebijakan seperti Tetapkan Pesan. Contoh:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>my-apikey</Name>
    <Ref>private.secret.credential.properties.apikey</Ref>
  </AssignVariable>
</AssignMessage>

Nama variabel yang dirujuk dalam elemen Ref, private.secret.credential.properties.apikey, terdiri dari bagian-bagian berikut:

Bagian nama variabel Deskripsi
private.secret Namespace tetap dari variabel. Semua secret Kubernetes yang disimpan di cluster hibrida menggunakan namespace ini.
credential.properties

Nama file yang disimpan dalam secret Kubernetes.

apikey Nama kunci yang disimpan dalam file properti.

Dalam contoh ini, kebijakan Tetapkan Pesan akan menghentikan nilai apikey OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z dan menyimpannya dalam variabel flow my-apikey.

Memperbarui secret

Karena kubectl tidak mendukung update secret Kubernetes, Anda harus terlebih dahulu menghapus secret yang ada dan membuatnya kembali dengan mengikuti langkah-langkah dalam Membuat secret Kubernetes.