Menyimpan data di secret Kubernetes

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

Pengantar

Terkadang Anda ingin menyimpan data untuk diambil saat runtime—data yang tidak habis masa berlakunya yang tidak boleh di-hardcode dalam logika proxy API Anda. Salah satu opsi adalah menggunakan fitur peta nilai kunci (KVM) campuran. Jika sudah menggunakan Kubernetes untuk pengelolaan secret di vault kustom untuk data sensitif, sebaiknya pertimbangkan untuk menggunakan fitur secret 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 di secret Kubernetes?

Apigee hybrid membatasi Anda untuk menyimpan jenis file data berikut dalam secret Kubernetes. Hal ini mencakup:

Format file Ekstensi file yang didukung
File kunci dan sertifikat TLS *.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 di cluster.

  1. Buat file yang ingin Anda simpan di secret Kubernetes. File harus dalam salah satu format yang didukung dengan ekstensi file yang tercantum di Jenis data yang dapat disimpan dalam 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 secret. Anda harus menentukan setidaknya satu file untuk disertakan dalam secret.
    • prop-file: Nama file properti yang akan disertakan dalam secret.
    • key-file: Nama file kunci TLS yang akan disertakan dalam secret.
    • cert-file: Nama file sertifikat TLS yang akan disertakan dalam secret.

    Anda dapat menyertakan satu atau beberapa file dalam secret. 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 pembuatan, mungkin perlu waktu hingga 90 detik agar perubahan diterapkan di semua cluster. Pemroses pesan melakukan polling untuk perubahan secret setiap 30 detik. Jika mendeteksi perubahan, cache akan diperbarui.

Mengambil data dari secret

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

apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z

Kemudian, Anda dapat mengambil kunci API dari variabel alur 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 variabel. Semua secret Kubernetes yang disimpan di cluster campuran 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 mengambil nilai apikey OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z dan menyimpannya dalam variabel alur my-apikey.

Memperbarui secret

Karena kubectl tidak mendukung pembaruan secret Kubernetes, Anda harus menghapus secret yang ada terlebih dahulu dan membuatnya ulang dengan mengikuti langkah-langkah di Membuat secret Kubernetes.