Auto reload secret di Kubernetes adalah solusi penting untuk menjaga keamanan dan performa aplikasi tanpa memerlukan restart manual setiap kali secret diperbarui. Dengan memanfaatkan HashiCorp Vault sebagai penyedia secret dan Stakater Reloader sebagai alat untuk mendeteksi perubahan secara otomatis, kamu bisa memastikan bahwa aplikasi selalu mendapatkan versi terbaru dari secret yang digunakan. Dalam artikel ini, kita akan membahas cara mengimplementasikan auto reload secret di Kubernetes menggunakan Vault dan Stakater Reloader, mulai dari konfigurasi hingga cara kerja integrasi ini. Dengan teknik ini, kamu bisa meningkatkan efisiensi sistem dan menghindari downtime yang tidak perlu, sambil memastikan aplikasi tetap aman dan selalu menggunakan data terbaru.
Untuk memulai implementasi auto reload secret di Kubernetes menggunakan Vault dan Stakater Reloader, langkah pertama adalah menginstal kedua komponen ini pada cluster Kubernetes kamu. Berikut adalah panduan instalasi dan konfigurasi:
1. Instal HashiCorp Vault di Kubernetes
helm repo add hashicorp https://helm.releases.hashicorp.com
helm install vault hashicorp/vault -n vault --create-namespace
2. Exec kedalam pod vault
kubectl exec -it pod/vault-0 -n vault -- sh
vault operator init
pada saat kamu melakukan init akan muncul 5 Unseal Key dan 1 Initial Root Token. Simpan baik-baik key dan token ini karena akan digunakan kedepannya.
3. Unseal dan login ke vault
vault operator unseal
vault login
vault auth enable -path k8s kubernetes
Perintah ini digunakan untuk mengaktifkan metode autentikasi di HashiCorp Vault. Vault mendukung berbagai metode autentikasi (seperti LDAP, GitHub, AWS, dll.), dan di sini kamu akan mengaktifkan metode autentikasi berbasis Kubernetes.
4. mengatur Vault untuk bisa berinteraksi dengan API server Kubernetes untuk autentikasi
vault write auth/k8s/config \
kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443"
5. Mengaktifkan Secret Engine
vault secrets enable -path=default kv-v2
default ini disesuikan dengan namespace ya, nantinya akan membaca seperti default/db-passowrd atau default/credential.
6. Menambakan policy pada vault
vault policy write dolanawan - <<EOF
path "default/*" {
capabilities = ["create", "read", "update", "patch", "delete", "list"]
}
EOF
memberikan akses penuh untuk namespace/path default/* untuk mengakses secret.
7. Menambhkan role pada vault
vault write auth/k8s/role/dolanawan-role \
bound_service_account_names=default \
bound_service_account_namespaces="*" \
policies=dolanawan \
audience=vault \
ttl=24h
role ini nanti juga bisa digunakan saat kita membuat user baru agar bisa mengakses secret engine
8. Install vault-secret-operator
vault-operator-values.yaml
defaultVaultConnection:
# toggles the deployment of the VaultAuthMethod CR
enabled: true
# Address of the Vault Server
# Example: http://vault.default.svc.cluster.local:8200
address: "http://vault.vault.svc.cluster.local:8200"
skipTLSVerify: false
copy code di atas lalu simpan dengan nama vault-operator-values.yaml lalu jalankan perintah dibawah ini
helm install vault-secrets-operator hashicorp/vault-secrets-operator -n vault-secrets-operator-system --create-namespace --values vault-operator-values.yaml
fungsi vault-operator-secret ini adalah sebagai injector secret ke kubernetes.
9. Static Auth
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
name: static-auth
spec:
method: kubernetes
mount: k8s
kubernetes:
role: dolanawan-role
serviceAccount: default
audiences:
- vault
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: wg-easy
namespace: default
spec:
type: kv-v2
# mount path
mount: default
# path of the secret
path: wg-easy
# dest k8s secret
destination:
name: wg-easy
create: true
# static secret refresh interval
refreshAfter: 30s
# Name of the CRD to authenticate to Vault
vaultAuthRef: static-auth
Karena dalam demo ini kita akan menggunakan static auth dan static secret maka bisa guna 2 code diatas lalu apply menggunakan kubectl apply
10. Install Stakater
helm repo add stakater https://stakater.github.io/stakater-charts helm repo update
helm install secret-reloader stakater/reloader -n default --set reloader.watchGlobally=false
11. Penambahan annotation pada deployment service
annotations:
reloader.stakater.com/auto: "true"
Penambahan annotations ini bertujuan jika vault melakukan perubahan pada secret maka Stakater akan melakukan restart deployment sehingga kita tidak perlu melakukan restart deployment secara manual.
Jika tutorial diatas masih kebinggungan mungkin kalian bisa mengunjungi beberapa refrensi dibawah ini.