本文档介绍了如何存储和处理许可密钥、在部署中安装许可密钥、更新即将过期的密钥,以及验证所有节点上的安装。
如需运行生产环境,您必须安装商业 Spanner Omni 许可密钥。在非生产环境中,您可以在 vCPU 不超过 4 个的单服务器配置中部署 Spanner Omni,而无需许可密钥,即可使用备份和恢复功能。无论使用多少服务器或 vCPU,在默认许可或开发者许可下,都不支持工作器功能。如需购买商业许可来使用 worker,请与 Google 联系。
如需了解可用的许可类型、版本和功能,请参阅 Spanner Omni 版本概览。
存储许可密钥
请将 Spanner Omni 许可密钥视为高度敏感的凭据。如果有人盗用许可密钥,Google 会在未来的 Spanner Omni 版本中使其失效。为防止密钥泄露,请遵循以下生命周期指南。我们建议您使用自动化系统注入密钥,而不是以纯文本形式将其写入持久性存储空间。以下部分介绍了如何存储许可密钥、保护自动化部署文件以及配置运行时传输。
存储在中央 Secret 管理器中
请勿将许可密钥提交到源代码控制系统,也不要将其硬编码到配置文件中。请务必将密钥存储在集中式凭据存储区中,例如:
- 云端: Google Cloud Secret Manager、Amazon Web Services (AWS) Secrets Manager 或 Microsoft 的 Azure Key Vault。
- 平台无关: HashiCorp Vault。
部署自动化
通过 Terraform 或 Ansible 等自动化工具进行部署时,请勿将许可密钥作为纯文本配置变量传递:
- Terraform:在部署运行时使用数据源动态提取许可密钥。使用
sensitive = true属性标记变量,以防止密钥显示在执行控制台日志中。 - Ansible:通过 Secret 管理器插件(例如
google.cloud.gcp_secret_manager或community.hashicorp.vault)在配置执行期间将密钥保留在内存中,或者如果密钥存储在代码库中,则使用 Ansible Vault 对其进行加密。
在运行时传输许可密钥
使用以下技术将许可密钥传递给数据库进程,而不会将其暴露给未经授权的用户:
基于虚拟机的部署(云端或本地)
- 基于 Identity and Access Management (IAM) 的注入:将数据库虚拟机与代管式服务账号或 IAM 角色相关联。在启动或配置(例如使用 Ansible)期间,使用此身份从您的 Secret Manager 中检索许可密钥到内存或具有受限访问权限的目录中。
- 操作系统权限:如果您将密钥写入磁盘,请限制文件访问权限,以便只有运行 Spanner Omni 进程的用户才能查看该文件(例如,
chmod 400 /path/to/license)。严格限制对宿主机的 SSH 访问权限。
Kubernetes 部署
- 使用 Secrets Store CSI 驱动程序:使用标准 Secrets Store CSI 驱动程序将许可密钥直接从外部 Secret 管理器装载到 Spanner Omni Pod 中,作为临时内存卷 (
tmpfs)。凭据仅存在于内存中,并在 Pod 终止时消失。 - 避免使用内置 Kubernetes Secret:请勿使用内置 Kubernetes Secret,此类 Secret 仅使用 base64 编码,并持久保存在 etcd 中。
安装许可密钥
如需安装或更新许可密钥,请将该密钥作为本地路径(例如 /path/to/your/license)提供给 Spanner Omni 服务器。
如需将许可密钥的路径传递给服务器,请在运行 spanner start 或 spanner start-single-server 命令时使用 --license-file-path 标志或 SPANNER_LICENSE_FILE_PATH 环境变量。
例如:
spanner start --root \
--license-file-path=LICENSE_KEY_FILE_PATH \
--server-address=RESOLVABLE_HOSTNAME \
--zone=ZONE_NAME \
--base-dir=SPANNER_BASE_DIR
或者,使用环境变量提供许可路径:
SPANNER_LICENSE_FILE_PATH=LICENSE_KEY_FILE_PATH \
spanner start --root \
--server-address=RESOLVABLE_HOSTNAME \
--zone=ZONE_NAME \
--base-dir=SPANNER_BASE_DIR
替换以下内容:
LICENSE_KEY_FILE_PATH:许可密钥文件的本地路径。RESOLVABLE_HOSTNAME:节点服务器的可解析主机名或 IP 地址。ZONE_NAME:部署的可用区名称。SPANNER_BASE_DIR:存储服务器文件的基本目录。
或者,您也可以将许可密钥放置在服务器预期所在的路径中:BASE_DIR/license/license。对于 Kubernetes 部署,BASE_DIR 默认值为 /spanner。
更新即将到期的许可
如需在有效部署中更新、延长或续订即将过期的开发者版许可,请申请永久许可。 如需延长即将到期的概念验证许可或购买商业许可,请与 Google 联系。收到新许可后,提供其路径并启动 Spanner Omni 服务器的滚动重启:
- 使每个节点都能访问新的许可文件。
- 通过一次重启一个服务器节点来执行滚动式重启。
- 在发布期间监控部署健康状况。如果任何节点未能重新启动或遇到错误,请回滚到之前正常运行的配置,并检查服务器日志以确保新许可正确提供。
使用 Helm(Kubernetes)安装许可密钥
如果您使用 Google 提供的 Helm 图表进行部署,则可以在升级期间动态传递许可文件的路径。
由于 Helm 的 --set-file 标志需要磁盘上的物理路径,因此请勿将许可密钥保存到永久性文件中。而是从您的 Secret 管理器中提取密钥,并将其放入临时文件或内存中路径(例如 Linux 上的 /dev/shm)。将此路径传递给 Helm,然后立即删除或粉碎该文件。这样可确保系统不会将明文凭据留在磁盘上,从而防止凭据在本地持久存在或被意外提交到版本控制中。
helm upgrade --install spanner-omni \
--set-file licenseKey=LICENSE_KEY_FILE_PATH
替换以下内容:
LICENSE_KEY_FILE_PATH:许可密钥文件的本地路径。
验证许可安装
由于您会在集群中的每个有效服务器节点上安装许可密钥,因此您可以通过检查处理您请求的其中一个服务器节点的状态来验证安装。针对端点使用 describe 命令:
spanner deployment describe --deployment-endpoint=SERVER_ADDRESS
替换以下内容:
SERVER_ADDRESS:服务器节点的地址。
运行集群范围的审核
如需验证虚拟机集群或 Kubernetes StatefulSet 中的所有节点是否都安装了正确的许可密钥,请运行集群范围的审核命令:
spanner admin license check
集群范围的审核会检查数据库拓扑中的每个服务器。因此,请确保所有节点服务器都处于在线状态且可通过网络访问,然后再运行此命令。
解读审核结果
请参阅下表,了解集群范围的审核结果:
| 集群状态 | 输出类型 | 说明和需要采取的行动 |
|---|---|---|
| 均匀(预期) | 单个许可标识符 | 所有节点都使用相同的许可密钥和类型。您无需采取任何进一步行动。 |
| 高低参半(需要采取行动) | 许可标识符和服务器列表 | 在各个节点上检测到不同的许可密钥(例如,在停滞的滚动更新期间)。调查列出的节点,确保新许可文件已正确应用。 |
保持商业许可合规性
如果您使用的是 Spanner Omni 商业许可,则必须遵守许可协议。保持合规性有助于防止结算纠纷,并跟踪和报告您的集群资源使用情况给 Google。请完成以下步骤,以确保遵守 Spanner Omni 商业许可协议:
在每个结算周期结束时运行 Spanner Omni 使用情况工具,以收集集群 vCPU 使用情况指标:
spanner admin license report --row-format=CSV请与您的技术支持客户经理 (TAM) 或 Google 客户支持团队合作,确认贵组织的首选提交渠道。
在下个月 5 日之前,将生成的载荷提交给 Google。