敏感数据不得存储在 Git 中。这给 GitOps 带来了一个难题,因为您需要 Git 中的机密,但又不想公开这些敏感数据!为解决此问题,您可以将机密存储在 HashiCorp Vault 等工具中,然后检索该数据并将其注入 红帽 OpenShift中。
本文是使用 Argo CD Vault 插件部署 OpenShift GitOps 的指南,以从 Hashicorp Vault 实例检索机密并将它们注入到 Kubernetes 资源中。本指南以 2021 年的上一篇红帽博客等工作为基础,并进行了更新,以使用更现代的自定义插件边车方法。
前提条件
在本文中,我假设您运行的是 OpenShift 4.10 或更高版本,并且具有该集群的管理特权。我正在运行通过红帽演示系统置备的 AWS 上的红帽 OpenShift 4.13 集群。
此外,在继续执行以下任何步骤之前,请确保您已在终端环境中登录集群,并提供 oc
和 helm
二进制文件。使用以下命令来确认这些二进制文件。
首先,检查前提条件,您应该会看到类似于下文的输出:
$ oc version && helm version Client Version: 4.11.13 Kustomize Version: v4.5.4 Kubernetes Version: v1.27.4 version.BuildInfo{Version:"v3.10.1", GitCommit:"9f88ccb6aee40b9a0535fcc7efea6055e1ef72c9", GitTreeState:"clean", GoVersion:"go1.18.7"}
1.部署 Vault
在本文中,我以 dev
模式使用 Vault,这种模式不适合生产环境。如果您已在运行 Vault 实例,则可以跳过此步骤。部署 Hashicorp Vault的实例:
$ helm upgrade --install vault vault \ --repo https://helm.releases.hashicorp.com \ --namespace vault \ --create-namespace \ --set "global.openshift=true" \ --set "server.dev.enabled=true" \ --set "injector.enabled=false"
2.配置 Vault
部署了 Vault 实例后,对 Vault pod 运行 shell 脚本,以使用出色的 vault
CLI 快速配置本演示。
该配置脚本为 Vault 设置 Kubernetes 身份验证方法 ,启用 kv-v2
机密存储,创建一个测试机密,并为该机密创建访问策略。
克隆源:
$ git clone https://github.com/jmhbnz/openshift-gitops-vault-plugin
将您的配置脚本复制到 Vault pod:
$ oc --namespace vault cp 1-vault/configure-vault.sh vault-0:/tmp/configure-vault.sh
然后,在 vault pod 中远程运行脚本:
$ oc --namespace vault exec vault-0 -t -- sh -c 'cd /tmp && ./configure-vault.sh'
3.将 argocd-vault-plugin-auth 配置到 Vault
部署和配置了 Vault 后,我们必须启用即将部署的 Argo CD Vault 插件,以使用 Kubernetes 服务帐户对 Vault 进行身份验证。
为 ArgoCD 创建命名空间:
$ oc new-project vplugindemo
创建用于 Argo Vault 插件身份验证的服务帐户:
$ oc create serviceaccount vplugin
在 Vault 中创建一个角色,以将您的服务帐户绑定到策略:
$ oc --namespace vault exec vault-0 -- vault write auth/kubernetes/role/vplugin \ bound_service_account_names=vplugin \ bound_service_account_namespaces=vplugindemo \ policies=vplugin \ ttl=1h
最后,创建一个机密 ,供 Argo Vault 插件在配置 Vault 连接时使用。
$ oc --namespace vplugindemo create \ -f 2-argocd/secret-vault-configuration.yaml
4.配置 argocd-vault-plugin 处理
配置了身份验证后,您现在需要定义 Argo CD Vault Plugin sidecar 的用途。此过程包含两个步骤。首先,您必须指定 discover 命令,然后指定 generate 命令。请参考这些记录的示例,包括基于 helm
或 kustomize
的应用的场景。我的示例采用最基本的方法来发现包含注释的文件,然后使用 argocd-vault-plugin generate 。
以模板化文件。
$ oc --namespace vplugindemo create \ -f 2-argocd/configmap-plugin.yaml
5.部署 OpenShift GitOps
部署和配置 Vault 并配置 argocd-vault-plugin 后,部署 OpenShift GitOps operator:
$ oc --namespace openshift-operators create -f 2-argocd/subscription-gitops.yaml
操作器安装成功后,使用自定义资源创建您的 Argo CD 实例:
$ oc --namespace vplugindemo create \ -f 2-argocd/crd-argocd.yaml
6.创建 Argo CD 应用
Argo CD 运行后,创建此基准示例应用。这会在集群上创建一个机密资源,其默认占位符值替换为来自 Vault 的值。
$ oc --namespace vplugindemo create \ -f 2-argocd/application-example.yaml
摘要
通过使用 Hashicorp Vault 以及作为边车运行的红帽 OpenShift GitOps 和 Argo CD Vault 插件,您已成功在 Git 中的机密内使用了占位符值。这是保护敏感数据的好方法。
关于作者
James Blair is a Specialist Architect at Red Hat. James is a vivid open source advocate and hands-on engineer. He has a deep technical background in automation, DevSecOps and cloud-native platform engineering across several sectors and is passionate about growing cloud-native in Aotearoa, New Zealand.
产品
工具
试用购买与出售
沟通
关于红帽
我们是世界领先的企业开源解决方案供应商,提供包括 Linux、云、容器和 Kubernetes。我们致力于提供经过安全强化的解决方案,从核心数据中心到网络边缘,让企业能够更轻松地跨平台和环境运营。