Panduan Linux

Panduan Lengkap Kubernetes ConfigMap dan Secret

Buat para penghuni dunia cloud native, terutama yang main-main dengan Kubernetes, pasti udah ga asing lagi sama ConfigMap dan Secret, kan? Tapi buat yang masih baru atau masih bingung, yuk kita bahas secara detail tentang dua fitur penting ini!

Apa itu ConfigMap?

ConfigMap adalah salah satu fitur di Kubernetes yang digunakan untuk menyimpan data konfigurasi non-rahasia dalam bentuk key-value pair. ConfigMap ini bisa diakses oleh container yang berjalan di dalam pod. Jadi, kamu bisa memisahkan konfigurasi aplikasi dari image container, yang bikin aplikasi kamu jadi lebih portable.

Gimana Cara Buat ConfigMap?

Cara bikin ConfigMap itu gampang banget. Kamu bisa pakai perintah kubectl atau dengan file YAML. Misal, kamu punya sebuah file konfigurasi bernama app.properties dengan isi sebagai berikut:

server.port=8080
database.url=jdbc:mysql://localhost:3306/mydb

Untuk bikin ConfigMap dari file ini, tinggal jalanin perintah:

kubectl create configmap app-config --from-file=app.properties

Kaum YAML bisa bikin file bernama configmap.yaml seperti ini:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  app.properties: |
    server.port=8080
    database.url=jdbc:mysql://localhost:3306/mydb

Lalu tinggal jalankan kubectl apply -f configmap.yaml.

Cara Pakai ConfigMap dalam Pod

Setelah ConfigMap terbuat, kamu bisa ngeload data ini ke dalam container dengan beberapa cara, yaitu:

  1. Environment Variable:

    env:
      - name: SERVER_PORT
        valueFrom:
          configMapKeyRef:
            name: app-config
            key: server.port
    
  2. File Volume:

    volumes:
      - name: config-volume
        configMap:
          name: app-config
    

    Lalu mount ini ke dalam container:

    volumeMounts:
      - name: config-volume
        mountPath: /etc/config
    

    Nah, nanti file app.properties akan ada di dalam directory /etc/config di container.

Apa itu Secret?

Secret adalah mekanisme untuk menyimpan dan mengelola informasi sensitif seperti password, OAuth tokens, atau SSH keys. Berbeda dengan ConfigMap yang menyimpan data dalam plain text, Secret menyimpan data dalam bentuk base64-encoded.

Gimana Cara Buat Secret?

Cara bikin Secret juga gampang. Kalo mau pake kubectl, contohnya:

kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=secret

Atau buat kaum YAML, bikin file secret.yaml seperti ini:

apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  username: YWRtaW4=
  password: c2VjcmV0

Perlu diingat, nilai username dan password di sini adalah base64-encoded. Jadi, YWRtaW4= itu admin dan c2VjcmV0 itu secret.

Cara Pakai Secret dalam Pod

Mirip dengan ConfigMap, kamu bisa ngeload Secret ke dalam container dengan:

  1. Environment Variable:

    env:
      - name: DB_USERNAME
        valueFrom:
          secretKeyRef:
            name: db-secret
            key: username
      - name: DB_PASSWORD
        valueFrom:
          secretKeyRef:
            name: db-secret
            key: password
    
  2. File Volume:

    volumes:
      - name: secret-volume
        secret:
          secretName: db-secret
    

    Dan mount ke dalam container:

    volumeMounts:
      - name: secret-volume
        mountPath: /etc/secret
    

    Nanti, di dalam directory /etc/secret, kamu akan nemuin dua file username dan password yang isinya data yang sudah didecode dari base64.

Perhatian Penting!

  1. Base64 is Not Encryption: Walaupun Secret menyimpan data dalam bentuk base64-encoded, bukan berarti aman. Base64 itu cuma encoding, bukan enkripsi. Jadi, siapapun yang punya akses ke Secret bisa dengan mudah membacanya.
  2. Docker Image History: Jangan sampe kamu menyimpan data sensitif dalam Docker image, karena siapa aja bisa akses dengan perintah docker history atau docker inspect.
  3. RBAC: Selalu atur Role-Based Access Control (RBAC) dengan benar untuk membatasi siapa aja yang bisa baca atau tulis ConfigMap dan Secret.

#Kubernetes #Tutorial