首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Kubernetes从Pod登录HashiCorp Vault和Vault CLI

用Kubernetes从Pod登录HashiCorp Vault和Vault CLI
EN

Server Fault用户
提问于 2022-07-18 18:31:30
回答 1查看 989关注 0票数 0

TL;DR:使用Kubernetes Auth方法从Vault CLI登录Kubernetes Pod的正确方法是什么?

我想要创建定期快照从我的HashiCorp库筏存储。因此,我创建了一个Kubernetes CronJob,运行与我的Vault集群相同的映像,它按照计划执行以下命令:

代码语言:javascript
复制
vault operator raft snapshot save /backups/daily-$(date +"%Y-%m-%d-%H-%M").snap

/backups是安装到Pod的持久卷。

当然,Pod需要认证到Vault。我启用了Kubernetes Auth方法。由Cron作业/作业创建的Pods是使用服务帐户vault-backups运行的。因此,我向Vault添加了一个角色vault_backups,该角色绑定到vault命名空间中的服务帐户vault-backups,并为其分配了一个新的策略raft_snapshots_read,其内容如下:

代码语言:javascript
复制
path "/sys/storage/raft/snapshot"
{
  capabilities = ["read"]
}

对于实际登录,我目前正在执行以下操作:

代码语言:javascript
复制
export VAULT_TOKEN=$(vault write auth/kubernetes/login \
    role=vault_backups \
    jwt=$(cat /run/secrets/kubernetes.io/serviceaccount/token) |\
  grep -w token |\
  awk '{print $2}')

这个命令现在使用服务帐户vault-backups的JWT令牌来使用角色vault_backup登录。它返回包含令牌的格式化输出(默认情况下是table)。我使用令牌解析行以将其保存到VAULT_TOKEN中。

然后,成功地执行raft snapshot save命令,并将快照保存到卷中。

解决方案是可行的,但我不确定这是否是正确的方法。首先,解析输出感觉有点奇怪。特别是因为有vault login命令。但是对于vault login -method kubernetes,它失败了:

未知方法: kubernetes。使用“保险库列表”查看auth方法的完整列表。此外,一些auth方法只能通过HTTP获得。

vault auth list包含一个类型为kubernetes的条目,因此我假设它只能通过HTTP获得。

我知道可以选择将vault write auth/kubernetes/login的输出作为JSON,但是a)容器中没有安装任何东西来解析JSON (比如jq)和( b)这仍然是两个步骤过程,包括解析结果。只是更有条理。

那么,是否有更好的方式来实现登录呢?

提前感谢!

EN

回答 1

Server Fault用户

回答已采纳

发布于 2022-07-19 12:33:16

在我看到的其他教程中,有一个参数-field=,它可以用于筛选特定字段的vault write输出。

因此,登录现在看起来如下:

代码语言:javascript
复制
export VAULT_TOKEN=$(vault write -field=token auth/kubernetes/login \
    role=vault_backups \
    jwt=$(cat /run/secrets/kubernetes.io/serviceaccount/token))

不管怎样,谢谢。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1105922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档