ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenReplay 自托管中的 Vault Helm Chart:在 Kubernetes 上部署与管理 HashiCorp Vault 权威指南

OpenReplay 自托管中的 Vault Helm Chart:在 Kubernetes 上部署与管理 HashiCorp Vault 权威指南 可观测性开发工具前端后端【免费下载链接】openreplaySession replay, cobrowsing and product analytics you can self-host. Best for reproducing issues and iterating on your product.项目地址https://gitcode.com/gh_mirrors/op/openreplay点击查看免费下载导读本文以 openreplay 仓库中随自托管发行版一同打包的官方 HashiCorp Vault Helm Chartscripts/helmcharts/databases/charts/vault/README.md为主体系统讲解在 Kubernetes 集群中通过 Helm 安装、配置和运维 Vault 的完整路径并深入剖析该 chart 在 OpenReplay 企业版中作为数据库凭据动态注入器的真实落地方式。读完本文你将掌握 Vault Helm Chart 的版本前提、安装命令、核心 values 参数体系、单机与 HA 高可用部署模式以及如何借助 Vault Agent 注入、Kubernetes Auth 与数据库 Secrets 引擎实现 PostgreSQL 动态凭据的端到端自动化。一、Vault Helm Chart 是什么Vault Helm Chart 是 HashiCorp 官方为在 Kubernetes 上安装与配置 Vault 提供的 Helm 包。本仓库在 scripts/helmcharts/databases/charts/vault/ 下完整内置了该 chart 的全部资源包括 Chart 元数据、模板、默认 values 与 JSON Schema 校验文件Chart.yaml声明name: vault、chart 版本0.22.1、appVersion: 1.12.0即随 chart 默认部署的 Vault 服务端版本并声明kubeVersion: 1.16.0-0的集群兼容范围。values.yaml约 1100 行的完整参数清单与默认值覆盖 server、injector、ui、csi 等全部组件。values.schema.json基于 JSON Schema 的 values 校验Helm 在渲染前即可发现非法配置。values.openshift.yaml面向 OpenShift 的覆盖配置安全上下文、SCC 等。templates/38 个模板文件覆盖 server、injector、ui、csi、网络策略、PodSecurityPolicy、Prometheus 监控等资源。CHANGELOG.md 与 CONTRIBUTING.md版本演进记录与贡献指南。注意README 中特别强调若发现 Vault Helm 的安全问题请负责任地通过 securityhashicorp.com 私下披露而非公开提交 issue。1.1 在 OpenReplay 仓库中的定位Vault chart 并非 OpenReplay 自身研发的组件而是以第三方 chart 依赖的形式被整体纳入其 Helm 生态。在 scripts/helmcharts/databases/Chart.yaml 中可以看到它的挂载方式- name: vault repository: file://charts/vault version: 0.22.1 condition: vault.enabled即databases聚合 chart 通过本地文件依赖引入 vault chart并用condition: vault.enabled作为开关——只有显式设置vault.enabled: true时该依赖才会被渲染。上层 OpenReplay 主 chartscripts/helmcharts/openreplay/values.yaml中则把 Vault 明确定位为企业版专属For enterpriseEdition Only能力vault.enabled与global.enterpriseEditionLicense共同决定迁移 Job 是否会执行 Vault 初始化逻辑。二、安装前提2.1 版本要求根据 README 与 Chart.yaml 的声明依赖要求说明Helm3.6需预先在本地配置好 Helm 并完成集群访问Kubernetes1.16这是 chart 官方测试过的最早版本更早版本理论上可能可用但未经测试Kubernetes 与 Helm 本身的安装配置不在该 README 范围内应分别参考官方文档完成。由于本仓库将 chart 以文件依赖方式内置实际部署 OpenReplay 时无需额外添加 HashiCorp 仓库chart 会随父 chart 一并打包。2.2 使用内置 chart 安装若要在自托管 OpenReplay 之外独立部署该内置 chart标准做法是先添加 HashiCorp 官方仓库再安装$ helm repo add hashicorp https://helm.releases.hashicorp.com hashicorp has been added to your repositories $ helm install vault hashicorp/vault而直接使用本仓库内置版本时可在scripts/helmcharts/databases目录下执行$ helm dependency build $ helm install vault ./charts/vault -n vault --create-namespace安装完成后可通过以下命令确认 release 状态与渲染出的清单见 templates/NOTES.txt$ helm status vault $ helm get manifest vault三、Chart 核心 values 参数体系chart 的所有参数与默认值集中在 values.yaml并可通过 values.schema.json 在渲染前做校验。下面按组件分层介绍最关键的一组参数。3.1 global全局开关参数默认值说明global.enabledtrue总开关置为 false 会关闭 chart 内所有组件之后可单独按需开启global.tlsDisabletrue是否禁用端到端 TLS 传输开发/内部环境常用global.externalVaultAddr外部 Vault 服务地址一旦设置将不再部署chart 自带的 Vault server仅保留 injector/CSI 等消费方global.openshiftfalse是否部署到 OpenShift涉及 SCC 等安全上下文差异global.imagePullSecrets[]镜像仓库认证的 pull secret也可传字符串数组global.psp.enablefalse是否创建 PodSecurityPolicy默认附带了 seccomp/apparmor 注解模板3.2 injectorVault Agent 注入器injector 是 chart 中与 OpenReplay 集成最密切的组件负责通过 MutatingWebhook 向 Pod 注入 Vault Agent 边车容器参数默认值说明injector.enabled-跟随global.enabled是否启用注入功能injector.replicas1注入器副本数多副本时默认由 leader-elector 协调 TLS 证书签发injector.port8080注入器监听端口injector.image.repositoryhashicorp/vault-k8s注入器镜像仓库injector.image.tag1.7.0注入器镜像版本injector.agentImage.repositoryhashicorp/vault注入到业务 Pod 的 Vault Agent 镜像injector.agentImage.tag1.21.0Agent 镜像版本需 Vault 1.3.1injector.agentDefaults.cpuLimit/cpuRequest500m/250m注入边车的默认 CPU 限额/请求injector.agentDefaults.memLimit/memRequest128Mi/64Mi注入边车的默认内存限额/请求injector.agentDefaults.templatemap默认 Secret 模板类型可选json、mapinjector.agentDefaults.templateConfig.exitOnRetryFailuretrueAgent 渲染失败时是否退出容器避免 Pod 带病运行injector.agentDefaults.templateConfig.staticSecretRenderInterval静态 Secret 的定期重渲染间隔injector.authPathauth/kubernetesVault Kubernetes Auth 的挂载路径injector.logLevelinfo日志级别trace/debug/info/warn/errorinjector.logFormatstandard日志格式standard/jsoninjector.revokeOnShutdownfalseAgent 边车退出时是否吊销其 tokeninjector.webhook.failurePolicyIgnorewebhook 不可用时是否放行 Pod 创建Fail则阻塞injector.webhook.matchPolicyExact匹配策略3.3 serverVault 服务端server 是 Vault 核心服务默认以 StatefulSet 部署模板见 server-statefulset.yaml默认使用文件存储并监听 8200/8201 端口ui true listener tcp { tls_disable 1 address [::]:8200 cluster_address [::]:8201 } storage file { path /vault/data }server.ha.enabled默认false是否启用 HA 高可用模式启用后默认 3 副本。server.ha.raft.enabled默认false是否启用 Raft 集成存储。Raft 模式下 Vault 会在本地持久卷存储数据并内部协调选主与故障转移同时使用service_registration kubernetes {}做服务注册典型配置为ui true listener tcp { tls_disable 1 address [::]:8200 cluster_address [::]:8201 } storage raft { path /vault/data } service_registration kubernetes {}非 Raft 的 HA 模式则默认对接 Consul 存储后端同样需要service_registration kubernetes {}。配置以 ConfigMap 保存values.yaml 中特别提示密码等敏感数据不要写进配置字符串应通过extraSecretEnvironmentVars或 Kubernetes Secret 挂载防止敏感配置进入 ConfigMap。3.4 其他组件ui.enabled默认跟随global.enabled是否部署 Web UI 服务ui-service.yaml。csi.enabled默认false是否部署 Vault CSI Provider。serverTelemetry.prometheusOperator默认false是否生成 Prometheus ServiceMonitor/PrometheusRule模板见 prometheus-servicemonitor.yaml 与 prometheus-prometheusrules.yaml。global.psp.enable默认false是否创建 PodSecurityPolicy 及对应 Role/RoleBinding。3.5 OpenShift 场景对于 OpenShift 集群可基于内置的 values.openshift.yaml 做覆盖部署例如关闭 PSP、调整安全上下文并设置global.openshift: true。四、OpenReplay 中的真实落地Vault 动态数据库凭据该 chart 在 OpenReplay 中并非孤立部署而是服务于企业版的敏感凭据管理闭环。下面从配置、初始化脚本与注入模板三个层面还原完整链路。4.1 主 chart 的 Vault 配置块在 scripts/helmcharts/openreplay/values.yaml 中企业版通过global.vault与vault两处 YAML 锚点声明了 Vault 相关配置vault: vault vaultHost: databases-vault.db.svc.cluster.local:8200 annotations: vault.hashicorp.com/agent-cache-enable: true vault.hashicorp.com/agent-inject: true vault.hashicorp.com/agent-inject-token: true vault.hashicorp.com/template-static-secret-render-interval: 2m vault.hashicorp.com/agent-run-as-same-user: true vault.hashicorp.com/agent-inject-command-processor.properties: | pkill -TERM openreplay vault.hashicorp.com/role: pgaccess vault.hashicorp.com/agent-inject-secret-processor.properties: database/creds/db-app vault.hashicorp.com/agent-inject-template-processor.properties: | {{- with secret database/creds/db-app -}} POSTGRES_STRINGpostgres://{{.Data.username}}:{{.Data.password}}postgresql.db.svc.cluster.local:5432/postgres {{- end -}} global: ... vault: *vault关键点解读vaultHost指向databases-vault.db.svc.cluster.local:8200即由 databases 聚合 chart 部署出的 Vault 服务在集群内的 DNS 地址。一组vault.hashicorp.com/*注解是由 injector 的 MutatingWebhook 消费的标准注解agent-inject: true要求向业务 Pod 注入 Vault Agent 边车agent-inject-token: true同时注入短期 Vault tokenagent-inject-secret-processor.properties: database/creds/db-app声明要拉取database/creds/db-app这一动态 Secretagent-inject-template-processor.properties给出渲染模板用模板语言从动态凭据中取出username/password拼出POSTGRES_STRING连接串agent-cache-enable、template-static-secret-render-interval: 2m、agent-run-as-same-user分别控制 Agent 缓存、静态 Secret 每 2 分钟重渲染与以业务用户身份运行role: pgaccessKubernetes Auth 登录时使用的角色名对应后文初始化的auth/kubernetes/role/pgaccessagent-inject-command-processor.properties: pkill -TERM openreplay凭据轮换后向主进程发送 SIGTERM触发 OpenReplay 应用重启以加载新凭据。4.2 初始化脚本vault.shVault 的初始化发生在主 chart 的迁移 Job 中scripts/helmcharts/openreplay/templates/job.yaml仅在同时满足global.enterpriseEditionLicense与vault.enabled时注入名为vault的容器镜像为hashicorp/vault:1.12.0执行 files/vault.sh#!/bin/sh export VAULT_ADDR${VAULT_ADDR} # 初始化幂等已初始化则直接退出 vault_output$(vault operator init) 2 /opt/openreplay/err.txt || { err_code$? (cat /opt/openreplay/err.txt | grep -i vault is already initialized) { echo Vault already initialized. err_code0 } exit $err_code } # 保存初始化输出unseal keys root token echo $vault_output /opt/openreplay/vault_creds.txt # 依次使用 3 个 unseal key 解封 for i in 1 2 3; do vault operator unseal echo $vault_output | grep -Eio unseal key $i: \S | awk {print $4} done # 用 root token 登录 vault login echo $vault_output | grep -Eio initial root token: \S | awk {print $4} # 启用 database 引擎 vault secrets enable database # 创建动态凭据角色 db-app vault write database/roles/db-app \ db_namepostgres \ creation_statementsCREATE ROLE \{{name}}\ WITH LOGIN PASSWORD {{password}} VALID UNTIL {{expiration}}; \ GRANT SELECT ON ALL TABLES IN SCHEMA public TO \{{name}}\; \ revocation_statementsALTER ROLE \{{name}}\ NOLOGIN; \ default_ttl1h \ max_ttl1d # 注册 PostgreSQL 连接配置使用模板占位符凭据由 Vault 注入 vault write database/config/postgres \ plugin_namepostgresql-database-plugin \ allowed_roles* \ connection_urlpostgresql://{{username}}:{{password}}$PGHOST:$PGPORT/$PGDATABASE \ username${PGUSER} \ password${PGPASSWORD} # 启用 Kubernetes Auth vault auth enable kubernetes vault write auth/kubernetes/config \ kubernetes_hosthttps://${KUBERNETES_PORT_443_TCP_ADDR}:443 \ kubernetes_ca_cert/var/run/secrets/kubernetes.io/serviceaccount/ca.crt # 为应用创建最小权限策略 pgaccess cat EOF /opt/openreplay/pgaccess-policy.hcl path database/creds/db-app { capabilities [read] } EOF vault policy write pgaccess /opt/openreplay/pgaccess-policy.hcl # 绑定 Kubernetes ServiceAccount 到角色 vault write auth/kubernetes/role/pgaccess \ bound_service_account_names*-openreplay \ bound_service_account_namespacesapp \ policiespgaccess \ ttl1h该脚本清晰呈现了 Vault 动态凭据的完整链路初始化与解封vault operator init生成 5 个 unseal key脚本只用其中 3 个解封与 root token结果写入共享卷中的vault_creds.txt脚本具备幂等性重复执行时识别already initialized直接成功退出。数据库引擎启用database引擎先写入连接配置database/config/postgres使用{{username}}/{{password}}占位符由 Vault 填充真实管理员凭据管理员账号来自迁移 Job 注入的PGUSER/PGPASSWORD环境变量见 job.yaml再写入角色database/roles/db-app每次读取凭据时按creation_statements动态创建临时 PostgreSQL 角色仅授 SELECTTTL 默认 1h、最长 1d吊销时执行ALTER ROLE ... NOLOGIN。Kubernetes Auth启用kubernetes认证配置集群地址与 CA使 Pod 可用其 ServiceAccount token 换取 Vault token。最小权限pgaccess策略仅允许读取database/creds/db-appauth/kubernetes/role/pgaccess把命名空间app下所有*-openreplay前缀的 ServiceAccount 绑定到该策略。4.3 凭据备份与轮换Job 中的第二个容器vault-s3-uploadjob.yaml是一个轮询循环一旦共享卷中出现vault_creds.txt立即用aws s3 cp将其备份到s3://${VAULT_BUCKET}/vault/endpoint 由openreplay.s3Endpoint决定通常是自托管 MinIO若检测到already initialized则直接退出其他异常输出错误后以退出码 2 终止。这保证了 unseal keys 与 root token 不会因 Pod 重建而丢失。配合主 chart values 中agent-inject-command-processor.properties: pkill -TERM openreplay每当凭据因 TTL1h轮换、Agent 重渲染模板后OpenReplay 主进程都会收到 SIGTERM 重启并读取新连接串实现动态凭据的无人工轮换。4.4 chart 自带的健康检查该 chart 内置了安装后测试templates/tests/server-test.yaml通过vault status -format yaml轮询检查sealed状态可用helm test vault触发用于验证部署出的实例是否处于可服务状态。五、生产部署建议与注意事项结合 values.yaml 的注释与 OpenReplay 的落地方式给出以下实践要点敏感配置不进 ConfigMapserver 配置以 ConfigMap 保存密码类敏感信息必须走extraSecretEnvironmentVars或 Kubernetes Secret避免明文落盘values.yaml 中已明确提示。开启 HA/Raft 保障可用性生产环境建议server.ha.enabled: true并配合server.ha.raft.enabled: trueRaft 集成存储自带持久卷与内部选主而非单实例文件存储。Webhook failurePolicy 权衡默认Ignore保证注入器不可用时业务 Pod 仍能创建若要求强一致凭据必须注入可改为Fail但会阻塞 Pod 调度需结合故障域设计。最小权限原则借鉴 OpenReplay 的做法用独立策略如pgaccess仅开放所需 Secret 路径的read能力并通过bound_service_account_names/bound_service_account_namespaces收紧身份绑定。凭据备份unseal keys 与 root token 属于一旦丢失即锁死的关键资产参考 OpenReplay 将其持久化到对象存储MinIO/S3的做法务必做好离线备份。监控与审计可通过serverTelemetry.prometheusOperator一键接入 Prometheus OperatorHA 部署时 chart 会额外渲染vault-active/vault-internal标签的服务见 server-ha-active-service.yaml、server-headless-service.yaml便于观测主备状态。六、故障排查与参考资源安装问题确认 Helm ≥ 3.6、Kubernetes ≥ 1.16若 values 校验失败检查 values.schema.json 中对应字段的类型与枚举约束。注入不生效检查 injector 是否启用、vault.hashicorp.com/agent-inject注解是否设置为true、业务 Pod 所在命名空间是否在 webhook 匹配范围内以及injector.webhook.failurePolicy是否因Ignore掩盖了注入失败。凭据拉取失败依次排查auth/kubernetes/role/pgaccess的绑定关系、pgaccess策略的 path/capabilities、database/creds/db-app角色与database/config/postgres连接的配置。动态角色权限不足OpenReplay 的creation_statements只授予SELECT若应用需要写库需按业务调整 GRANT 语句并评估default_ttl/max_ttl仓库默认 1h/1d。进一步资料该 chart 的完整参数文档见 values.yaml含逐项注释版本演进与已知变更可查阅 CHANGELOG.mdOpenReplay 侧完整集成配置见 scripts/helmcharts/openreplay/values.yaml 与 files/vault.sh。结语HashiCorp Vault Helm Chart 为 Kubernetes 上的机密管理提供了开箱即用的部署骨架而 OpenReplay 仓库将它与自身企业版架构深度绑定从databases聚合 chart 的依赖挂载到迁移 Job 中幂等的vault.sh初始化再到业务 Pod 上的 Agent 注入注解与动态凭据轮换构成了一条完整、可复制的数据库动态凭据即服务链路。无论你是想独立部署 Vault还是理解 OpenReplay 企业版的凭据管理机制本文所梳理的参数体系、初始化流程与源码证据都能直接指导实践。赞分享可观测性开发工具前端后端【免费下载链接】openreplaySession replay, cobrowsing and product analytics you can self-host. Best for reproducing issues and iterating on your product.项目地址https://gitcode.com/gh_mirrors/op/openreplay点击查看免费下载相关推荐Sim Helm Chart 部署指南在 Kubernetes 上自托管 AI 工作流平台Sim Helm Chart 部署指南在 Kubernetes 上自托管 AI 工作流平台 本篇技术指南完整讲解如何使用仓库内置的 Helm Chart h人工智能AI AgentAgent 工作流工作流自动化AI 应用后端前端桌面应用CLI推荐使用 Vault Helm Chart在 Kubernetes 上安全地管理秘钥与认证推荐使用 Vault Helm Chart在 Kubernetes 上安全地管理秘钥与认证 项目介绍 Vault Helm Chart 是 HashiCorp云原生运维应用安全Infisical 双重验证指南3 种 MFA 方式5 步完成全员强制配置Infisical 双重验证指南3 种 MFA 方式5 步完成全员强制配置 Infisical MFA多重身份验证要求在密码之外再提供一道凭证是挡住撞后端前端密钥管理应用安全认证鉴权创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表