Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Distribute Credentials Securely Using Secrets
Laman ini menjelaskan bagaimana cara menginjeksi data sensitif, seperti kata sandi (password) dan kunci enkripsi, ke dalam Pod.
Kamu harus memiliki klaster Kubernetes, dan perangkat baris perintah kubectl juga harus dikonfigurasikan untuk berkomunikasi dengan klastermu. Jika kamu belum memiliki klaster, kamu dapat membuatnya dengan menggunakan minikube, atau kamu juga dapat menggunakan salah satu dari tempat mencoba Kubernetes berikut ini:
Misalnya kamu mempunyai dua buah data rahasia: sebuah nama pengguna my-app dan kata sandi
39528$vdg7Jb. Pertama, gunakan alat penyandian Base64 untuk mengubah nama pengguna kamu dan kata sandi ke dalam representasi Base64. Berikut ini contoh menggunakan program Base64 yang umum digunakan:
echo -n 'my-app' | base64
echo -n '39528$vdg7Jb' | base64
Hasil keluaran menampilkan representasi Base64 dari nama pengguna kamu yaitu bXktYXBw,
dan representasi Base64 dari kata sandi kamu yaitu Mzk1MjgkdmRnN0pi.
Berikut ini adalah berkas konfigurasi yang dapat kamu gunakan untuk membuat Secret yang akan menampung nama pengguna dan kata sandi kamu:
apiVersion: v1
kind: Secret
metadata:
name: test-secret
data:
username: bXktYXBw
password: Mzk1MjgkdmRnN0pi
Membuat Secret
kubectl apply -f https://k8s.io/examples/pods/inject/secret.yaml
Melihat informasi dari Secret:
kubectl get secret test-secret
Hasil keluaran:
NAME TYPE DATA AGE
test-secret Opaque 2 1m
Melihat informasi detil dari Secret:
kubectl describe secret test-secret
Hasil keluaran:
Name: test-secret
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 13 bytes
username: 7 bytes
Jika kamu ingin melompati langkah penyandian dengan Base64, kamu dapat langsung membuat Secret yang sama dengan menggunakan perintah kubectl create secret. Contohnya:
kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb'
Tentu saja ini lebih mudah. Pendekatan yang mendetil setiap langkah di atas bertujuan untuk mendemonstrasikan apa yang sebenarnya terjadi pada setiap langkah.
Berikut ini adalah berkas konfigurasi yang dapat kamu gunakan untuk membuat Pod:
apiVersion: v1
kind: Pod
metadata:
name: secret-test-pod
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
# nama harus sesuai dengan nama Volume di bawah ini
- name: secret-volume
mountPath: /etc/secret-volume
# Data Secret diekspos ke Container di dalam Pod melalui Volume
volumes:
- name: secret-volume
secret:
secretName: test-secret
Membuat Pod:
kubectl apply -f https://k8s.io/examples/pods/inject/secret-pod.yaml
Verifikasikan apakah Pod kamu sudah berjalan:
kubectl get pod secret-test-pod
Hasil keluaran:
NAME READY STATUS RESTARTS AGE
secret-test-pod 1/1 Running 0 42m
Gunakan shell untuk masuk ke dalam Container yang berjalan di dalam Pod kamu:
kubectl exec -i -t secret-test-pod -- /bin/bash
Data Secret terekspos ke Container melalui Volume yang dipasang (mount) pada
/etc/secret-volume.
Di dalam shell kamu, tampilkan berkas yang ada di dalam direktori /etc/secret-volume:
# Jalankan ini di dalam shell dalam Container
ls /etc/secret-volume
Hasil keluaran menampilkan dua buah berkas, masing-masing untuk setiap data Secret:
password username
Di dalam shell kamu, tampilkan konten dari berkas username dan password:
# Jalankan ini di dalam shell dalam Container
echo "$( cat /etc/secret-volume/username )"
echo "$( cat /etc/secret-volume/password )"
Hasil keluarannya adalah nama pengguna dan kata sandi kamu:
my-app
39528$vdg7Jb
Definisikan variabel lingkungan sebagai pasangan key-value pada Secret:
kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
Tentukan nilai backend-username yang didefinisikan di Secret ke variabel lingkungan SECRET_USERNAME di dalam spesifikasi Pod.
apiVersion: v1
kind: Pod
metadata:
name: env-single-secret
spec:
containers:
- name: envars-test-container
image: nginx
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: backend-user
key: backend-username
Membuat Pod:
kubectl create -f https://k8s.io/examples/pods/inject/pod-single-secret-env-variable.yaml
Di dalam shell kamu, tampilkan konten dari variabel lingkungan SECRET_USERNAME dari Container
kubectl exec -i -t env-single-secret -- /bin/sh -c 'echo $SECRET_USERNAME'
Hasil keluarannya
backend-admin
Seperti contoh sebelumnya, buat Secret terlebih dahulu.
kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
kubectl create secret generic db-user --from-literal=db-username='db-admin'
Definisikan variabel lingkungan di dalam spesifikasi Pod.
apiVersion: v1
kind: Pod
metadata:
name: envvars-multiple-secrets
spec:
containers:
- name: envars-test-container
image: nginx
env:
- name: BACKEND_USERNAME
valueFrom:
secretKeyRef:
name: backend-user
key: backend-username
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-user
key: db-username
Membuat Pod:
kubectl create -f https://k8s.io/examples/pods/inject/pod-multiple-secret-env-variable.yaml
Di dalam shell kamu, tampilkan konten dari variabel lingkungan Container
kubectl exec -i -t envvars-multiple-secrets -- /bin/sh -c 'env | grep _USERNAME'
Hasil keluarannya
DB_USERNAME=db-admin
BACKEND_USERNAME=backend-admin
Membuat Secret yang berisi banyak pasangan key-value
kubectl create secret generic test-secret --from-literal=username='my-app' --from-literal=password='39528$vdg7Jb'
Gunakan envFrom untuk mendefinisikan semua data Secret sebagai variabel lingkungan Container. Key dari Secret akan mennjadi nama variabel lingkungan di dalam Pod.
apiVersion: v1
kind: Pod
metadata:
name: envfrom-secret
spec:
containers:
- name: envars-test-container
image: nginx
envFrom:
- secretRef:
name: test-secret
Membuat Pod:
kubectl create -f https://k8s.io/examples/pods/inject/pod-secret-envFrom.yaml
Di dalam shell kamu, tampilkan variabel lingkungan Container username dan password
kubectl exec -i -t envfrom-secret -- /bin/sh -c 'echo "username: $username\npassword: $password\n"'
Hasil keluarannya
username: my-app
password: 39528$vdg7Jb