ConfigMap dan Secret di Kubernetes

ConfigMap dan Secret adalah dua sumber daya di Kubernetes yang dirancang untuk menyimpan data konfigurasi yang diperlukan oleh aplikasi. Keduanya memungkinkan Anda memisahkan konfigurasi dari kode aplikasi, sehingga lebih mudah dikelola dan lebih aman.


1. ConfigMap di Kubernetes

Pengertian ConfigMap

ConfigMap digunakan untuk menyimpan data non-sensitif dalam bentuk pasangan key-value. Data ini dapat disuntikkan ke dalam Pod sebagai:

  • Environment Variables
  • File yang dimount sebagai Volume

Manfaat ConfigMap

  1. Memisahkan konfigurasi dari kode aplikasi.
  2. Menghindari hard coding konfigurasi ke dalam image container.
  3. Memudahkan perubahan konfigurasi tanpa harus mendekati ulang container.

Contoh Penggunaan ConfigMap

1. Membuat ConfigMap

Gunakan file YAML untuk membuat ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_ENV: production
  APP_DEBUG: "false"
  APP_PORT: "8080"

Atau buat langsung dari CLI:

kubectl create configmap app-config --from-literal=APP_ENV=production --from-literal=APP_DEBUG=false


2. Menggunakan ConfigMap dalam Pod

ConfigMap dapat digunakan sebagai Environment Variable atau Volume.

Sebagai Environment Variable

apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: nginx
    env:
    - name: APP_ENV
      valueFrom:
        configMapKeyRef:
          name: app-config
          key: APP_ENV

Sebagai File dalam Volume

apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  volumes:
  - name: config-volume
    configMap:
      name: app-config
  containers:
  - name: app-container
    image: nginx
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config

Pada contoh ini, ConfigMap akan dimount ke direktori /etc/config di dalam container.


2. Secret di Kubernetes

Pengertian Secret

Secret digunakan untuk menyimpan data sensitif seperti:

  • Password
  • Token API
  • Kunci SSH

Secret memberikan keamanan tambahan karena data yang disimpannya dienkripsi oleh Kubernetes.


Manfaat Secret

  1. Menyimpan data sensitif dengan aman.
  2. Memisahkan data sensitif dari kode aplikasi.
  3. Mendukung akses dengan environment variable atau file volume.

Contoh Penggunaan Secret

1. Membuat Secret

Buat Secret untuk menyimpan password:

apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  DB_USER: YWRtaW4=         # "admin" dalam base64
  DB_PASSWORD: cGFzc3dvcmQ= # "password" dalam base64

Catatan: Data dalam Secret harus dienkode dalam format base64. Gunakan perintah berikut untuk mengenkripsinya:

echo -n "admin" | base64

echo -n "password" | base64


2. Menggunakan Secret dalam Pod

Secret dapat digunakan sebagai Environment Variable atau Volume.

Sebagai Environment Variable

apiVersion: v1
kind: Pod
metadata:
  name: db-pod
spec:
  containers:
  - name: db-container
    image: mysql
    env:
    - name: MYSQL_USER
      valueFrom:
        secretKeyRef:
          name: db-secret
          key: DB_USER
    - name: MYSQL_PASSWORD
      valueFrom:
        secretKeyRef:
          name: db-secret
          key: DB_PASSWORD

Sebagai File dalam Volume

apiVersion: v1
kind: Pod
metadata:
  name: db-pod
spec:
  volumes:
  - name: secret-volume
    secret:
      secretName: db-secret
  containers:
  - name: db-container
    image: mysql
    volumeMounts:
    - name: secret-volume
      mountPath: /etc/secret

Pada contoh ini, Secret akan dimount ke direktori /etc/secret di dalam container.


3. Perbedaan ConfigMap dan Secret

AspekConfigMapSecret
Jenis DataData non-sensitif (konfigurasi umum).Data sensitif (password, token, dll.).
Penyimpanan DataDisimpan dalam plaintext.Disimpan dalam format terenkripsi.
TujuanKonfigurasi aplikasi.Informasi sensitif aplikasi.
KeamananTidak dienkripsi, hanya untuk data umum.Mendukung enkripsi dan akses terbatas.

4. Best Practices

  1. Gunakan Secret untuk Data Sensitif:
    • Jangan pernah menyimpan data sensitif di ConfigMap.
  2. Gunakan Role-Based Access Control (RBAC):
    • Batasi akses ke ConfigMap dan Secret hanya untuk aplikasi atau pengguna yang memerlukannya.
  3. Otomatisasi Encoding Base64:
    • Gunakan CLI atau alat seperti Helm untuk mempermudah encoding data Secret.
  4. Audit ConfigMap dan Secret:
    • Selalu periksa ConfigMap dan Secret yang digunakan di cluster untuk memastikan keamanan dan konsistensi.