Management Secret di Kubernetes Menggunakan Vault

Introduction

Pada artikel kali ini setelah saya melewati beberapa case tentang bagaimana sih me-management env atau secret di dalam architecture Kubernetes, nah pada kesempatan kali ini saya akan menjelaskan sedikit tentang bagaimana vault itu berjalan dan juga bagaimana vault bisa berkomunikasi dengan Kubernetes.

Sebelum itu perlu kita ketahui flow atau alur kerja dari vault sendiri pada gambar dibawah ini yang dimana mulai dari : vault UI –> kemudian vault operator sebagai administrator yang mengarahkan secret ini ke secret mana –> dan Kubernetes API sebagai penjembatan dari vault to secret. reference https://github.com/ricoberger/vault-secrets-operator jangan lupa juga baca artikel sebelumnya mengenai congimap & secret Kubernetes https://igunawan.com/pengertian-configmap-secret-di-kubernetes/ .

Hal yang perlu di siapkan tentunya :

  • Cluster kube / minikube
  • helm

Step untuk membuat management vault saya bagi menjadi 4 bagian:

Step 1 – install vault

Pertama karena kita menggunakan helm unuk installationya maka kita add repo vault terlebih dahulu

$ helm repo add hashicorp https://helm.releases.hashicorp.com
"hashicorp" has been added to your repositories

$ helm repo list   
Checked repo

Kemudian ada beberapa hal yang perlu kita sesuaikan didalam values , contohnya adalah storage class jumlah size dll, dan kalian bisa sesuaikan di

https://github.com/hashicorp/vault-helm/blob/main/values.yaml jika kalian sudah menyesuaikannya selanjutnya install / apply values tersebut dengan menggunakan chart yang kita add tadi.

helm upgrade --install --namespace vault vault hashicorp/vault -f ./location-files/values-vault.yaml

Sebelumnya perlu kita ketahui banyak sekali cara untuk auth method vault ini seperti , menggunakan TOKEN, APPROLE dll. Nah pada kali ini saya akan menggunakan auth method TOKEN, kita perlu melakukan init terlebih dahulu untuk men generate token kemudian baru unseal sebanyak 3 kali.

exec to POD vault

k exec -it nama-pod -n namespace sh
$ VAULT_ADDR=http://name-service.namespace.svc.cluster.local:8200 vault operator init

Kemudian nanti akan tampil token yang di generate seperti ini

Unseal Key 1: asdfwjlerjiawlrio3ijoih3284i2u4h2i384y23o842
Unseal Key 2: asdfwjlerjiawlrio3ijoih3284i2u4h2i384y23o842
Unseal Key 3: asdfwjlerjiawlrio3ijoih3284i2u4h2i384y23o842
Unseal Key 4: asdfwjlerjiawlrio3ijoih3284i2u4h2i384y23o842
Unseal Key 5: asdfwjlerjiawlrio3ijoih3284i2u4h2i384y23o842

Initial Root Token: root token

Sealnjutnya unseal dengan 3 kali unseal menggunakan token key 1 – 3 tersebut

$ VAULT_ADDR=http://name-service.namespace.svc.cluster.local:8200 vault operator unseal

Jika sudah pastikan container jalan dan check status vault status : true

Step 2 – Setup Operator Vault

Step kedua adalah setup operator vault, yang dimana berfungsi sebagai penghubung antara vault dashboard ke kubernetes API, add repo vault operator terlebih dahulu

$helm repo add ricoberger https://ricoberger.github.io/helm-charts

$helm repo update

$helm repo list
Check repo

Sama halnya dengan vault-ui kita perlu sesuaikan values nya dan perbedaanya disini kita mendeploy secret untuk vault operator karena menggunakan metode TOKEN

add secret ROOT Token vault

export VAULT_TOKEN=ROOT_TOKEN
export VAULT_TOKEN_LEASE_DURATION=86400

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: vault-secrets-operator
type: Opaque
data:
  VAULT_TOKEN: $(echo -n "$VAULT_TOKEN" | base64)
  VAULT_TOKEN_LEASE_DURATION: $(echo -n "$VAULT_TOKEN_LEASE_DURATION" | base64)
EOF

Selanjutnya sesuaikan values dan juga data/environment variable https://github.com/ricoberger/vault-secrets-operator/blob/main/charts/vault-secrets-operator/values.yaml values yang di sesuaikan dengan vault_address juga

environmentVars:
  - name: VAULT_TOKEN
    valueFrom:
      secretKeyRef:
        name: vault-secrets-operator
        key: VAULT_TOKEN
  - name: VAULT_TOKEN_LEASE_DURATION
    valueFrom:
      secretKeyRef:
        name: vault-secrets-operator
        key: VAULT_TOKEN_LEASE_DURATION

deploy values-operator with helm

helm upgrade --install --namespace vault vault-operator ricoberger/vault-secrets-operator  --values location-file/values.yaml

Dan jika sudah selesai di deploy maka container akan jalan sesuai dengan secret.

Step 3 – Add secret on vault-ui

Ada beberapa hal yang harus diperhatikan sebelum ke tahap 3 ini pastikan step 1 dan 2 harus sudah running terlebih dahulu, dan pastikan jalankan ingress untuk vault di port 8200

dan disini kita menggunakan login TOKEN ROOT

Kemudian sbb:

a. Enable engine

b. Add path

c. Kemudian disini input key value seperti halnya kita menambhkan di .env

Step 4 – Add manifests secret on helm

Dan yang terakhir adalah kita buat secret manifests dari referensi ricoberger , dan biasanya saya bisa menggunakan file ini

apiVersion: ricoberger.de/v1alpha1
kind: VaultSecret
metadata:
  name: {{ .Values.secret.NAME }}
  namespace: {{ .Values.namespace }}

spec:
  path: {{ .Values.secret.path }} / service-a/development
  type: Opaque

atau dari sumbernya langsung menggunakan ini

apiVersion: ricoberger.de/v1alpha1
kind: VaultSecret
metadata:
  name: kvv1-example-vaultsecret
spec:
  keys:
    - foo
  isBinary: true
  path: kvv1/example-vaultsecret
  type: Opaque

dan yang terakhir adalah di file deployment.yaml envnya diarahkan seperti ini

        envFrom:
        - secretRef:
            name: {{ .Values.secret.NAME }}

Terakhir Jika sudah maka kita bisa chek di list-secret atau pada POD/Container yang kita deploy

Terima kasih selamat mencoba

Leave a Reply

Your email address will not be published. Required fields are marked *