Genel

HashicorpVault Deployment With Consul on RKE2

Merhabalar Herkese! Bu yazımda sizlere Kubernetes üzerinde secret’ların tutulması ve podlara inject edilmesi için kullanılan Hashicrop Vault uygulamasının consul storage ve Ha modunda nasıl RKE2 Cluster’ımıza deploy edileceğini özet bir şekilde anlatacağım. İyi okumalar!

Gereksinimler

  • Kubernetes Cluster
  • Kubernetes Cluster üzerinde hazır StorageClass (Lab ortamı için NFS Storage Class kullanıldı)
  • Helm v3!

Consul Deployment

Vault Statefulsel olarak deploy olmakta ama storage olarak consul kullanmaktadır. Consul ile Vault datasını store edeceğiz. Öncelikle helm reposunu indirelim.

helm pull hashicorp/consul --untar

Ardından consul uygulamasını deploy edelim.

helm install consul --set='server.storageClass=nfs-client'./consul --namespace vault

Çıktısı yukarıdaki görseldeki gibi olmalıdır.

Consul kurulumunu başarılı bir şekilde tamamladık. Şimdi Vault Kurulumuna geçelim.

Vault Deployment

Vault helm reposunu indirelim.

helm pull hashicorp/vault --untar

Ardından values.yaml içerisindeki configmap’te yer alan consul host ip address kısmını değiştirmemiz gerekecek. Aksi halde vault podları consul ile bağlantı sağlayamamakta.

    config: |
      ui = true

      listener "tcp" {
        tls_disable = 1
        address = "[::]:8200"
        cluster_address = "[::]:8201"
      }
      storage "consul" {
        path = "vault"
        address = "consul-consul-server.vault.svc.cluster.local:8500"
      }

      service_registration "kubernetes" {}

      # Example configuration for using auto-unseal, using Google Cloud KMS. The
      # GKMS keys must already exist, and the cluster must have a service account
      # that is authorized to access GCP KMS.
      #seal "gcpckms" {
      #   project     = "vault-helm-dev-246514"
      #   region      = "global"
      #   key_ring    = "vault-helm-unseal-kr"
      #   crypto_key  = "vault-helm-unseal-key"
      #}

      # Example configuration for enabling Prometheus metrics.
      # If you are using Prometheus Operator you can enable a ServiceMonitor resource below.
      # You may wish to enable unauthenticated metrics in the listener block above.
      #telemetry {
      #  prometheus_retention_time = "30s"
      #  disable_hostname = true
      #

Akabinde helm install komutu ile uygulamayı deploy edebiliriz.

helm install vault \
       --set='server.ha.enabled=true' \
       --set='ui.enabled=true' \
       --set='ui.serviceType=NodePort' \
       --namespace vault \
       ./vault

Ardından deployment durumunu kontrol edelim.

Ardından teker teker vault container’larına bağlanıp seal/unseal yapmamız gerekmekte.

kubectl -n vault exec -it vault-0 -- sh  
kubectl -n vault exec -it vault-1 -- sh
kubectl -n vault exec -it vault-2 -- sh

vault operator init
vault operator unseal

kubectl -n vault exec -it vault-0 -- vault status
kubectl -n vault exec -it vault-1 -- vault status
kubectl -n vault exec -it vault-2 -- vault status

Ardından webUI’a bağlanabiliriz.
http://<nodeIp>:<nodePort>

Sayfanın ilk açılış ekranında initial root password (token) belilenmesi gerekmektedir. Kurulumu başarılı bir şekilde sağlamış olduk. Diğer yazımda podlara secret injection nasıl yapılır ondan bahsedeceğim iyi okumalar!
🙂