在 Kubernetes Secret 中轮替 Cassandra Secret
此过程介绍了如何在集群的 Kubernetes Secret 中轮替 Cassandra 凭据。如需在 Hashicorp Vault 中轮替凭据,请参阅在 Hashicorp Vault 中轮替 Cassandra 凭据。
通过此过程,您可以自动执行并触发以下三项任务,从而轮替用于生产 Apigee Hybrid 服务的 Cassandra 凭据,而不会导致服务中断:
- 轮替用户凭据
- 轮替的回滚
- 清理旧凭据和新凭据
在 Kubernetes Secret 中轮替 Cassandra Secret
您可以轮替六对 Cassandra 凭据用户名和密码:
default
(仅限密码轮替)admin_user
ddl_user
dml_user
jmxuser
apigee
为凭据替换做准备
如需执行这些步骤,您必须拥有在集群中运行 kubectl apply -f
的权限。
- 备份 Cassandra 数据库。此备份可确保能够恢复预先转换的凭据。请参阅 Cassandra 备份概览。
- 确保集群处于健康状态,所有 Apigee 资源均在运行,没有任何状态更改待处理。
单区域凭据轮替
- 按照在 Kubernetes Secret 中设置用户名和密码中的说明,在 Apigee 命名空间中创建一个新的 Kubernetes Secret,用于存储您要轮替的 Cassandra 用户凭据。
- 执行轮替预检查。
-
使用以下模板创建新的 SecretRotation 自定义资源:
# rotation-k8s-secrets.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_NAME namespace: APIGEE_NAMESPACE spec: organizationId: APIGEE_ORG rotationId: ROTATION_ID timeoutMinutes: TIMEOUT_MINUTES # optional. 480 recommended. precheck: true cassandra: oldSecretRef: OLD_SECRET_REF newSecretRef: NEW_SECRET_REF jobType: ROTATE
其中:
- ROTATION_NAME:轮替作业的名称,例如
sr-1-precheck
。 - APIGEE_NAMESPACE:您的 Apigee 命名空间。
- APIGEE_ORG:您的 Apigee 组织 ID。
- ROTATION_ID:自定义标识符,例如:
rot-1-precheck
。 - TIMEOUT_MINUTES:可选。替换默认值(480 分钟 = 8 小时)。小于等于 0 表示无限超时。
- OLD_SECRET_REF:
apigeedatastore
当前使用的 Secret 名称。您可以使用以下命令找到此值:kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
- NEW_SECRET_REF:在上一步中创建的 Secret 名称。
- ROTATION_NAME:轮替作业的名称,例如
-
通过应用轮替 YAML 文件触发轮替预检作业:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
检查作业状态,并等待作业完成。
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
作业完成后,输出将包含:
:Status: Message: rotation complete State: complete
kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
-
使用以下模板创建新的 SecretRotation 自定义资源:
-
转换预检作业完成后,执行转换:
- 在轮替 YAML 文件中进行以下更改:
- 将
metadata.name
更改为一个名称,表明这不是预检查,例如:sr-1
。 - 将
spec.precheck
设置为false
。 - 将
spec.rotationId
更改为新标识符,例如:rot-1
。
- 将
- 再次应用该文件以执行变换。
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- 在轮替 YAML 文件中进行以下更改:
- 轮替作业完成后,请验证流量是否仍在正常流动。
- 验证流量后,请清理旧密钥。
-
在轮替 YAML 文件中进行以下更改:
- 将
metadata.name
更改为表明这是清理作业的名称,例如sr-1-cleanup
。 - 将
spec.cassandra.jobType
设置为CLEANUP
。
- 将
- 再次应用该文件以执行清理。
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
检查作业状态,并等待作业完成。
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
清理作业完成后,变换过程即告完成。
-
在轮替 YAML 文件中进行以下更改:
- 备份 Cassandra 数据库。此备份可确保能够恢复变换后的凭据。
- 删除旧的 Cassandra 凭据 Secret。
多区域凭据轮替
-
在每个区域中,按照在 Kubernetes Secret 中设置用户名和密码中的说明,在您的 Apigee 命名空间中创建一个新的 Kubernetes Secret,用于存储您要轮替的 Cassandra 用户凭据。
每个区域的凭据必须相同。
- 执行轮替预检查。
-
使用以下模板创建新的 SecretRotation 自定义资源:
# rotation-k8s-secrets.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_NAME namespace: APIGEE_NAMESPACE spec: organizationId: APIGEE_ORG rotationId: ROTATION_ID timeoutMinutes: TIMEOUT_MINUTES # optional. 480 recommended. precheck: true cassandra: oldSecretRef: OLD_SECRET_REF newSecretRef: NEW_SECRET_REF jobType: ROTATE
其中:
- ROTATION_NAME:轮替作业的名称,例如
sr-1-precheck
。 - APIGEE_NAMESPACE:您的 Apigee 命名空间。
- APIGEE_ORG:您的 Apigee 组织 ID。
- ROTATION_ID:自定义标识符,例如:
rot-1-precheck
。 - TIMEOUT_MINUTES:可选。替换默认值(480 分钟 = 8 小时)。小于等于 0 表示无限超时。
- OLD_SECRET_REF:
apigeedatastore
当前使用的 Secret 名称。您可以使用以下命令找到此值:kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
- NEW_SECRET_REF:在上一步中创建的 Secret 名称。
- ROTATION_NAME:轮替作业的名称,例如
-
在第一个区域中,通过应用轮替 YAML 文件触发轮替预检作业:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
检查作业状态,并等待作业完成。
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
作业完成后,输出将包含:
:Status: Message: rotation complete State: complete
kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
-
使用以下模板创建新的 SecretRotation 自定义资源:
-
转换预检作业完成后,在同一区域内执行转换:
- 在轮替 YAML 文件中进行以下更改:
- 将
metadata.name
更改为一个名称,表明这不是预检查,例如:sr-1
。 - 将
spec.precheck
设置为false
。 - 将
spec.rotationId
更改为新标识符,例如:rot-1
。
- 将
- 再次应用该文件以执行变换。
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- 在轮替 YAML 文件中进行以下更改:
- 轮替作业完成后,请验证流量是否仍在正常流动。
- 对其余区域重复轮替步骤。
- 验证流量后,请清理旧密钥。您只需在一个区域中执行清理操作即可。您选择哪个区域都无妨。
-
在轮替 YAML 文件中进行以下更改:
- 将
metadata.name
更改为表明这是清理作业的名称,例如sr-1-cleanup
。 - 将
spec.cassandra.jobType
设置为CLEANUP
。
- 将
- 再次应用该文件以执行清理。
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
检查作业状态,并等待作业完成。
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
清理作业完成后,变换过程即告完成。
-
在轮替 YAML 文件中进行以下更改:
- 备份 Cassandra 数据库。此备份可确保能够恢复变换后的凭据。
- 删除旧的 Cassandra 凭据 Secret。
回滚轮替
在每个区域中,执行以下步骤。
-
使用以下模板创建新的 SecretRotation 自定义资源:
# rollback-k8s-secrets.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROLLBACK_NAME namespace: APIGEE_NAMESPACE spec: organizationId: APIGEE_ORG rotationId: ROTATION_ID # match the current rotation. timeoutMinutes: TIMEOUT_MINUTES # optional. precheck: false cassandra: oldSecretRef: OLD_SECRET_REF # Must match the previous oldSecretRef. newSecretRef: NEW_SECRET_REF # Must match the previous newSecretRef. jobType: ROLLBACK
其中:
- ROLLBACK_NAME:回滚作业的名称,例如
sr-1-rollback
。 - APIGEE_NAMESPACE:您的 Apigee 命名空间。
- APIGEE_ORG:您的 Apigee 组织 ID。
- ROTATION_ID:您要回滚的当前轮替的 ID,例如:
rot-1
。 - TIMEOUT_MINUTES:可选。替换默认值(480 分钟 = 8 小时)。小于等于 0 表示无限超时。
- OLD_SECRET_REF:此值必须与您在单区域轮替或多区域轮替流程中使用的轮替 YAML 文件中的
oldSecretRef:
密钥名称一致。 - NEW_SECRET_REF:此值必须与您在单区域轮替或多区域轮替流程中使用的轮替 YAML 文件中的
newSecretRef:
密钥名称一致。
- ROLLBACK_NAME:回滚作业的名称,例如
-
应用回滚:
kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
-
检查作业状态,并等待作业完成。
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
- 回滚完成后,请验证流量是否仍在正常流动。
- 当流量正常流动后,请在每个剩余区域重复回滚流程。
-
完成回滚并验证流量仍在正常流动后,请开始清理流程。您只需在一个区域中执行清理操作即可。您选择哪个区域都无妨。
在轮替 YAML 文件中进行以下更改:
- 将
metadata.name
更改为表明这是清理作业的名称,例如:sr-1-cleanup-rollback
。 - 将
spec.cassandra.jobType
更改为CLEANUP_ROLLBACK
。
- 将
-
应用该文件以触发清理作业:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE