概览
借助此功能,平台管理员可以执行以下操作:
- 在 Hashicorp Vault 中变换 Cassandra 凭据。
- 如果在密码变换期间出现任何问题,请回滚到 Vault 中的旧 Cassandra 凭据。
- 一次变换一个区域的 Cassandra 密码,以确保对服务可用性的影响降到最低,并保持对变换过程的控制。
- 跟踪单个区域的变换开始、进度和完成。
此功能适用于 Apigee Hybrid 1.13.1 及更高版本。
准备工作
在设置凭据变换之前,请执行以下操作:
- 备份 Cassandra 数据库。此备份可确保能够恢复预先变换的凭据。
- 确保集群处于健康状态(即所有 Apigee 资源均在运行,没有任何状态更改待处理)。
单个区域设置
-
在 Apigee 命名空间中为新的 Cassandra 凭据创建新的
SecretProviderClass
Kubernetes 资源。如需查看要使用的模板,请参阅在 Hashicorp Vault 中存储 Cassandra Secret。这可让 Vault 角色访问 Kubernetes 命名空间中的 Secret。 -
使用以下模板创建新的
SecretRotation
自定义资源:# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: 480 # optional. overrides the default (480m == 8hr). # less than or equal to 0 means infinite timeout. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE
- ROTATION_PROCESS_NAME:变换作业的唯一名称。您需要将
metadata.name
设置为变换预检作业和变换作业的唯一值。例如,sr-1-precheck
后跟sr-1
。 - ROTATION_ID:将
spec.rotationId
设置为自定义标识符,例如rotation-1-precheck
。 - NEW_SPC_NAME:将
spec.cassandra.newSecretProviderClass
设置为您在上一步中创建的新 Secret 提供程序类名称。 - OLD_SPC_NAME:将
spec.cassandra.oldSecretProviderClass
设置为ApigeeDatastore
当前使用的 SPC 名称。
- ROTATION_PROCESS_NAME:变换作业的唯一名称。您需要将
-
通过应用
rotation.yaml
文件触发变换预检作业。kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
检查作业状态,以验证预检查作业何时完成。
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
变换预检作业完成后,更改
metadata.name
的值并将spec.precheck
设置为false
。再次应用该文件以执行变换。kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
变换作业完成且已验证流量仍在正常流动后,请按照以下两个步骤清理该流程:
-
更新
metadata.name
的值,并将spec.cassandra.jobType
设置为CLEANUP
。 -
通过应用该文件触发清理作业。
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
清理作业完成后,变换过程即告完成。
-
更新
- 备份 Cassandra 数据库。此备份可确保能够恢复变换后的凭据。
- 从 Vault 中删除旧的 Cassandra 凭据、角色和政策。
多区域设置
多区域设置过程分为两个部分:设置第一个区域和设置其余区域。
- 在开始设置后续区域之前,请在第一个区域完成以下步骤。
-
在
APIGEE_NAMESPACE
命名空间中为新的 Cassandra 凭据创建新的SecretProviderClass
Kubernetes 资源。如需查看要使用的模板,请参阅在 Hashicorp Vault 中存储 Cassandra Secret。这可让 Vault 角色访问 Kubernetes 命名空间中的 Secret。 -
使用以下模板创建新的
SecretRotation
自定义资源:# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: -1 # this value is required and should not be changed. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE
- ROTATION_PROCESS_NAME:变换作业的唯一名称。您需要将
metadata.name
设置为变换预检作业和变换作业的唯一值。例如,sr-1-precheck
后跟sr-1
。 - ROTATION_ID:将
spec.rotationId
设置为自定义标识符,例如rotation-1-precheck
。 - NEW_SPC_NAME:将
spec.cassandra.newSecretProviderClass
设置为您在上一步中创建的新 Secret 提供程序类名称。 - OLD_SPC_NAME:将
spec.cassandra.oldSecretProviderClass
设置为ApigeeDatastore
当前使用的 SPC 名称。
- ROTATION_PROCESS_NAME:变换作业的唯一名称。您需要将
-
通过应用
rotation.yaml
文件触发变换预检作业。kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
检查作业状态,以验证预检作业何时完成。
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
变换预检作业完成后:请执行以下操作:
- 更改
metadata.name
的值,例如从sr-1-precheck
更改为sr-1
。 - 将
spec.precheck
设置为false
以关闭预检并执行变换。 - 将
spec.rotationId
设置为新标识符,例如rotation-1
。
- 更改
-
再次应用该文件以执行变换。
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
检查
SecretRotation
的状态,并等待状态变为complete
。kubectl -n APIGEE_NAMESPACE get sr SR_NAME
-
在
-
在每个后续区域中,完成以下步骤:
- 在 Apigee 命名空间中为新的 Cassandra 凭据创建新的
SecretProviderClass
Kubernetes 资源。如需查看要使用的模板,请参阅在 Hashicorp Vault 中存储 Cassandra Secret。此定义应与第 1a 步中的定义相同。 - 更新
overrides.yaml
并将cassandra.auth.secretProviderClass
设置为与rotation.yaml
文件中的spec.cassandra.newSecretProviderClass
的值匹配。cassandra: auth: secretProviderClass: NEW_SPC_NAME
- 应用 Operator 图表:
helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
-
系统会创建一个新的
ReplicaSet
。检查新的 controller-manager Pod 是否使用了新的 SPC:export POD=NEW_CONTROLLER_MANAGER_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
结果应与您在
rotation.yaml
中为spec.cassandra.newSecretProviderClass
设置的值一致,例如:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
my-new-spc - 应用数据存储区图表:
helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
- 数据存储将进入发布状态。等待数据存储区完成发布并处于运行状态。
kubectl -n APIGEE_NAMESPACE get apigeedatastore DATASTORE_NAME
在大多数安装中,DATASTORE_NAME 是
default
。 - 检查新的数据存储区 Pod 是否使用了新的 SPC:
export POD=NEW_DATASTORE_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
结果应与您在
rotation.yaml
中为spec.cassandra.newSecretProviderClass
设置的值一致,例如:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
my-new-spc - 等待组织和环境完成发布并恢复到运行状态。
kubectl -n APIGEE_NAMESPACE get apigeeorg ORG_NAME
kubectl -n APIGEE_NAMESPACE get apigeeenv ENV_NAME
- 检查新的 MART、运行时和同步器 Pod 是否使用了新的 SPC:
export POD=NEW_MART_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
export POD=NEW_RUNTIME_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
export POD=NEW_SYNCHRONIZER_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
结果应与您在
rotation.yaml
中为spec.cassandra.newSecretProviderClass
设置的值一致,例如:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
my-new-spc
- 在 Apigee 命名空间中为新的 Cassandra 凭据创建新的
-
在每个区域完成相应步骤并验证流量仍在正常流动后,请按照以下两个步骤清理第一个区域中的流程:
-
在第一个区域中,更新
metadata.name
的值,并将spec.cassandra.jobType
设置为CLEANUP
。 -
通过应用该文件触发清理作业。
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
- 检查作业状态并查看作业日志,以验证清理作业何时完成。
清理作业完成后,变换过程即告完成。
-
在第一个区域中,更新
- 备份 Cassandra 数据库。此备份可确保能够恢复变换后的凭据。
- 从 Vault 中删除旧的 Cassandra 凭据、角色和政策。