【问题标题】:How to automate "vault operator init" (via terraform or/and helm)?如何自动化“保险库操作员初始化”(通过 terraform 或/和 helm)?
【发布时间】:2021-11-08 21:41:48
【问题描述】:

我有 terraform 可以通过 helm chart 将 hash vault 自动部署到 GKE,但是,要初始化 vault,我目前必须跳转到我们的 linux jumpbox VM,kubectl 到 pod(位于它自己的命名空间中) 运行 Vault 操作员 init 命令。

我发现这个带有图像/容器的 github 存储库;

https://github.com/sethvargo/vault-init

我在我的默认 vault.tmpl 中作为 sidecar 容器注入了它,如果 pod 崩溃并且必须启动备份,它似乎可以正常工作,即 vault 将重新初始化,但对于第一次干净初始化,它不会工作。

任何想法如何使它工作?我愿意通过其他方式做到这一点,但理想情况下更愿意让它在我的 terraform 中工作。

我的 main.tf:

resource "helm_release" "vault" {
  name                        = "vault"
  repository                  = "https://helm.releases.hashicorp.com"
  chart                       = "vault"
  namespace                   = "vault"
  reset_values                = true

  values                      = [
    templatefile("../values/vault.tmpl", {
      tls_disable             = 1
      region                  = var.region
      project                 = data.google_client_config.current.project
      replicas                = var.vault_replicas
      keyring                 = var.keyring_name
      cryptokey               = var.cryptokey
      bucket                  = var.vault_bucket
    })
  ]
}

我的保管库模板配置:

server:
  extraContainers:
  - name: vault-init
    image: registry.hub.docker.com/sethvargo/vault-init:0.2.0
    imagePullPolicy: Always
    env:
     #- name: VAULT_SKIP_VERIFY
     #  value: true
      #- name: CHECK_INTERVAL
       # value: "5"
     #- name: VAULT_ADDR
     #  value: "http://127.0.0.1:8200"
      #- name: VAULT_SECRET_SHARES
      #  value: "1"
      #- name: VAULT_SECRET_THRESHOLD
     #  value: "1"
     #- name: VAULT_AUTO_UNSEAL
     #  value: true
      - name: GCS_BUCKET_NAME
        value: vault-storage
      - name: KMS_KEY_ID
        value: projects/......

【问题讨论】:

    标签: terraform azure-pipelines kubernetes-helm hashicorp-vault


    【解决方案1】:

    以下是我们如何在本地执行此操作的示例。它是从一个更大的脚本中剪下来的,因此您必须收集自己的变量值来填写详细信息。这与将 Helm Vault 部署到 Azure AKS 群集一起使用。

    #Initialize the vault and save the keys / root token to a temporary file
    INIT_VALUES=`kubectl exec $POD -n $Namespace_Env -- vault operator init -key-shares=$Vault_Key_Shares_Env -key-threshold=$Vault_Key_Threshold_Env`
    echo "$INIT_VALUES" >> keys.txt
    
    #Encrpyt the keys and delete the temp file 
    7za a keys.7z -p$Key_Password_Env keys.txt
    
    if [[ $Email_Env != "" ]]
    then
      echo "VaultUI came up on https://$IPSTATUS:8200" | mailx -s "Hashicorp Vault Keys" -r Jenksins.Vault.Creation@provider.com -a keys.7z $Email_Env
      sleep 5s
      rm -f keys.7z
    fi
    rm -f keys.txt
    
    #Unseal the vault using the keys which are found in $INIT_VALUES
    i=1
    while [[ $i -le $Vault_Key_Threshold_Env ]]
    do
      j=$((i*4))
      key_index="\$$j"
      KEY=`echo $INIT_VALUES | awk -F '[ ]' "{print $key_index}"`
      #echo $KEY
      kubectl exec $POD -n $Namespace_Env -- vault operator unseal $KEY
      i=$((i+1))
    done
    

    【讨论】:

    • 谢谢,我设法让我的方式正常工作,更改了一些与节点池/gke 相关的内容,并且侧车容器现在似乎可以工作了。不过,会将这种方式保存为书签作为备份方法。
    猜你喜欢
    • 2018-01-18
    • 2020-12-02
    • 2019-03-20
    • 2018-05-14
    • 2020-02-14
    • 2017-06-28
    • 1970-01-01
    • 2016-09-13
    • 2019-09-10
    相关资源
    最近更新 更多