在 Kubernetes Secret 中变换 Cassandra Secret
此过程介绍了如何在集群的 Kubernetes Secret 中变换 Cassandra 凭据。如需在 Hashicorp Vault 中变换凭据,请参阅在 Hashicorp Vault 中变换 Cassandra 凭据。
借助此过程,您可以自动执行并触发以下三项任务,以便变换用于生产 Apigee Hybrid 服务的 Cassandra 凭据,而不会导致服务中断:
- 变换用户凭据
- 变换回滚
- 清理旧凭据和新凭据
在 Kubernetes Secret 中变换 Cassandra Secret
有 6 对 Cassandra 凭据(用户名 + 密码)可变换:
- 默认*
- 管理员
- DDL
- DML
- JMX
- Jolokia
为凭据替换做准备
如需执行这些步骤,您必须拥有在集群中运行 kubectl apply -f
的权限。
- 备份 Cassandra 数据库。此备份可确保能够恢复预先变换的凭据。 请参阅 Cassandra 备份概览。
- 确保集群处于健康状态,所有 Apigee 资源均在运行,没有任何状态更改待处理。
单区域凭据变换
- 按照在 Kubernetes Secret 中设置用户名和密码中的说明,在包含要变换的 Cassandra 用户凭据的 Apigee 命名空间中创建一个新的 Kubernetes Secret。
- 执行变换预检。
-
使用以下模板创建新的 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:可选。替换默认值(480m == 8 小时)。<=0 表示无限超时。
- PRECHECK :触发执行试运行。设置为 true 时,变换过程会完成所有步骤,但不会实际应用新凭据。
- 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 文件中进行以下更改:
- 变换作业完成后,请验证流量是否仍在正常流动。
- 验证流量后,请清理旧 Secret。
-
在变换 YAML 文件中进行以下更改:
- 将
metadata.name
更改为表示这是一项清理作业的名称,例如:sr-1-cleanup
。 - 将
spec.cassandra.jobType
设置为CLEANUP
。 - 确认
spec.precheck
已设置为false
。
- 将
- 再次应用该文件以执行清理。
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
检查作业状态,等待作业完成。
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
清理作业完成后,变换过程即告完成。
-
在变换 YAML 文件中进行以下更改:
- 备份 Cassandra 数据库。此备份可确保能够恢复变换后的凭据。
- 删除旧的 Cassandra 凭据 Secret。
多区域凭据变换
-
在每个区域,按照在 Kubernetes Secret 中设置用户名和密码中的说明,在包含要变换的 Cassandra 用户凭据的 Apigee 命名空间中创建一个新的 Kubernetes Secret。
各个区域的凭据必须相同。
- 执行变换预检。
-
使用以下模板创建新的 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:可选。替换默认值(480m == 8 小时)。<=0 表示无限超时。
- PRECHECK :触发执行试运行。设置为 true 时,变换过程会完成所有步骤,但不会实际应用新凭据。
- 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 文件中进行以下更改:
- 变换作业完成后,请验证流量是否仍在正常流动。
- 对剩余的区域重复变换步骤。
- 验证流量后,请清理旧 Secret。您只需在一个区域执行清理操作。您选择哪个区域无关紧要。
-
在变换 YAML 文件中进行以下更改:
- 将
metadata.name
更改为表示这是一项清理作业的名称,例如:sr-1-cleanup
。 - 将
spec.cassandra.jobType
设置为CLEANUP
。 - 确认
spec.precheck
已设置为false
。
- 将
- 再次应用该文件以执行清理。
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:可选。替换默认值(480m == 8 小时)。<=0 表示无限超时。
- OLD_SECRET_REF:此值必须与您在单区域变换或多区域变换程序中使用的变换 YAML 文件中的
oldSecretRef:
的 Secret 名称相匹配。 - NEW_SECRET_REF:此值必须与您在单区域变换或多区域变换程序中使用的变换 YAML 文件中的
newSecretRef:
的 Secret 名称相匹配。
- 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