Menyimpan data dalam secret Kubernetes

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

Pengantar

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

Jenis data apa yang dapat disimpan dalam secret Kubernetes?

Apigee Hybrid membatasi penyimpanan jenis file data berikut dalam rahasia Kubernetes. Fitur tersebut meliputi:

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 rahasia Kubernetes untuk menyimpan data sensitif di cluster.

  1. Buat satu atau beberapa file yang ingin Anda simpan di secret Kubernetes. File harus berupa salah satu format yang didukung dengan ekstensi file yang tercantum dalam Jenis data apa 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 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 di 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 tersebut terlihat di semua cluster. Prosesor pesan melakukan polling untuk perubahan secret setiap 30 detik. Jika perubahan terdeteksi, 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 aliran dalam aliran proxy API di organisasi/lingkungan tempat rahasia disimpan. Misalnya, anggap rahasia Anda berisi file *.properties bernama credentials.properties dengan kunci API di dalamnya, seperti 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 hybrid 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 menghentikan nilai apikey OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z dan menyimpannya dalam variabel alur my-apikey.

Memperbarui secret

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