我们在 Google Kubernetes Engine 上使用 Kubernetes - 我们目前使用 kubectl secret CLI 手动添加了机密。
为了使整个团队的机密管理更加安全、更容易,我们安装了一个Hashicorp Vault单独集群上的实例。
将 Vault k/v 存储连接到 Kubernetes 机密的方法是什么?
我正在寻找这样的东西
volumes:
- name: commonsecrets
secret:
source: vault
secretName: commonsecrets
items:
- key: SOME_API_KEY
path: apikey.txt
- key: SOME_CERTIFICATE
path: certificate.pub
答案1
首先需要明确一点的是:kubernetes Secret
API 对象/资源 !=Hashicorp Vault你可以使用以下秘密Kubernetes。如果您先使用 =,则不会使用后者。
因此基本上没有办法管理 KubernetesSecrets
由 Hashicorp Vault 提供。您无需使用 kubernetesSecret
对象来存储敏感数据,只需将其Pods
用于此目的即可海合集团保险库。由于保险库机密可以直接注入Pods
,因此您不需要像示例中那样将它们另外安装为卷。
如果你想整合Hashicorp Vault实例,安装在单独的集群上,整个设置描述这里。
如果你想部署一个带有硬编码外部 Vault 地址的应用程序,官方Hashicorp Vault 文档还解释了如何做到这一点:
集群中的 pod 寻址 Vault 的最直接方式是使用在应用程序代码中定义或作为环境变量提供的硬编码网络地址。我们已经创建并发布了一个 Web 应用程序,您将使用覆盖的 Vault 地址来部署它。
首先,为 pod 创建一个用于身份验证的 Kubernetes 服务账户。
ServiceAccount metadata: name: internal-app EOF
使用此 Web 应用程序创建一个部署,将 设置
VAULT_ADDR
为EXTERNAL_VAULT_ADDR
。--- apiVersion: apps/v1 kind: Deployment metadata: name: devwebapp labels: app: devwebapp spec: replicas: 1 selector: matchLabels: app: devwebapp template: metadata: labels: app: devwebapp spec: serviceAccountName: internal-app containers: - name: app image: burtlo/devwebapp-ruby:k8s imagePullPolicy: Always env: - name: VAULT_ADDR value: "http://$EXTERNAL_VAULT_ADDR:8200" EOF
针对外部 Vault 的 Web 应用程序作为默认命名空间内的 pod 部署。
获取默认命名空间内的所有 pod。
STATUS RESTARTS AGE devwebapp-68cc55948b-w9745 1/1 Running 0 4m
等到
devwebapp
Pod 报告正在运行且已就绪(1/1
)。
localhost:8080
请求从 pod 内部提供的内容devwebapp
。$(kubectl get pod -l app=devwebapp -o jsonpath="{.items[0].metadata.name}") \ -- curl -s localhost:8080 ; echo
结果显示秘密在路径上定义
secret/data/devwebapp/config
。{"password"=>"salsa", "username"=>"giraffe"}
Web 应用程序使用根令牌与外部 Vault 服务器进行身份验证,并返回在路径中定义的机密
secret/data/devwebapp/config
。如果 Vault 服务器的地址不变,则此硬编码方法是一种有效的解决方案。
这只是至少几种可用方法中的一个例子。或者,您可能想要部署服务和端点以解决外部 Vault或者安装配置为处理外部 Vault 的 Vault Helm 图表.正如您在文档中看到的:
Vault Helm 图表只能部署配置为针对外部 Vault 的 Vault Agent Injector 服务。当部署包含特定注释时,注入器服务会自动将 Vault Agent 容器添加到 pod 中,从而为应用程序启用身份验证和密钥检索。
您可能还想看看以下文章:
使用 HashiCorp 的 Vault 管理 Kubernetes 中的机密
通过 Sidecar 将 Vault Secrets 注入 Kubernetes Pod