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
- Memisahkan konfigurasi dari kode aplikasi.
- Menghindari hard coding konfigurasi ke dalam image container.
- 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
- Menyimpan data sensitif dengan aman.
- Memisahkan data sensitif dari kode aplikasi.
- 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
Aspek | ConfigMap | Secret |
Jenis Data | Data non-sensitif (konfigurasi umum). | Data sensitif (password, token, dll.). |
Penyimpanan Data | Disimpan dalam plaintext. | Disimpan dalam format terenkripsi. |
Tujuan | Konfigurasi aplikasi. | Informasi sensitif aplikasi. |
Keamanan | Tidak dienkripsi, hanya untuk data umum. | Mendukung enkripsi dan akses terbatas. |
4. Best Practices
- Gunakan Secret untuk Data Sensitif:
- Jangan pernah menyimpan data sensitif di ConfigMap.
- Gunakan Role-Based Access Control (RBAC):
- Batasi akses ke ConfigMap dan Secret hanya untuk aplikasi atau pengguna yang memerlukannya.
- Otomatisasi Encoding Base64:
- Gunakan CLI atau alat seperti Helm untuk mempermudah encoding data Secret.
- Audit ConfigMap dan Secret:
- Selalu periksa ConfigMap dan Secret yang digunakan di cluster untuk memastikan keamanan dan konsistensi.