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:
Environment Variable:
env: - name: SERVER_PORT valueFrom: configMapKeyRef: name: app-config key: server.port
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:
Environment Variable:
env: - name: DB_USERNAME valueFrom: secretKeyRef: name: db-secret key: username - name: DB_PASSWORD valueFrom: secretKeyRef: name: db-secret key: password
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 fileusername
danpassword
yang isinya data yang sudah didecode dari base64.
Perhatian Penting!
- 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.
- Docker Image History: Jangan sampe kamu menyimpan data sensitif dalam Docker image, karena siapa aja bisa akses dengan perintah
docker history
ataudocker inspect
. - RBAC: Selalu atur Role-Based Access Control (RBAC) dengan benar untuk membatasi siapa aja yang bisa baca atau tulis ConfigMap dan Secret.