在 Kubernetes Secret 中轮替 Cassandra 凭据

在 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 的权限。

  1. 备份 Cassandra 数据库。此备份可确保能够恢复预先转换的凭据。请参阅 Cassandra 备份概览
  2. 确保集群处于健康状态,所有 Apigee 资源均在运行,没有任何状态更改待处理。

单区域凭据轮替

  1. 按照在 Kubernetes Secret 中设置用户名和密码中的说明,在 Apigee 命名空间中创建一个新的 Kubernetes Secret,用于存储您要轮替的 Cassandra 用户凭据。
  2. 执行轮替预检查。
    1. 使用以下模板创建新的 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_REFapigeedatastore 当前使用的 Secret 名称。您可以使用以下命令找到此值:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF:在上一步中创建的 Secret 名称。
    2. 通过应用轮替 YAML 文件触发轮替预检作业:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 检查作业状态,并等待作业完成。
      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
      
  3. 转换预检作业完成后,执行转换:
    1. 在轮替 YAML 文件中进行以下更改:
      • metadata.name 更改为一个名称,表明这不是预检查,例如:sr-1
      • spec.precheck 设置为 false
      • spec.rotationId 更改为新标识符,例如:rot-1
    2. 再次应用该文件以执行变换。
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. 轮替作业完成后,请验证流量是否仍在正常流动。
  5. 验证流量后,请清理旧密钥。
    1. 在轮替 YAML 文件中进行以下更改:
      • metadata.name 更改为表明这是清理作业的名称,例如 sr-1-cleanup
      • spec.cassandra.jobType 设置为 CLEANUP
    2. 再次应用该文件以执行清理。
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 检查作业状态,并等待作业完成。
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      清理作业完成后,变换过程即告完成。

  6. 备份 Cassandra 数据库。此备份可确保能够恢复变换后的凭据。
  7. 删除旧的 Cassandra 凭据 Secret。

多区域凭据轮替

  1. 在每个区域中,按照在 Kubernetes Secret 中设置用户名和密码中的说明,在您的 Apigee 命名空间中创建一个新的 Kubernetes Secret,用于存储您要轮替的 Cassandra 用户凭据。

    每个区域的凭据必须相同。

  2. 执行轮替预检查。
    1. 使用以下模板创建新的 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_REFapigeedatastore 当前使用的 Secret 名称。您可以使用以下命令找到此值:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF:在上一步中创建的 Secret 名称。
    2. 在第一个区域中,通过应用轮替 YAML 文件触发轮替预检作业:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 检查作业状态,并等待作业完成。
      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
      
  3. 转换预检作业完成后,在同一区域内执行转换:
    1. 在轮替 YAML 文件中进行以下更改:
      • metadata.name 更改为一个名称,表明这不是预检查,例如:sr-1
      • spec.precheck 设置为 false
      • spec.rotationId 更改为新标识符,例如:rot-1
    2. 再次应用该文件以执行变换。
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. 轮替作业完成后,请验证流量是否仍在正常流动。
  5. 对其余区域重复轮替步骤。
  6. 验证流量后,请清理旧密钥。您只需在一个区域中执行清理操作即可。您选择哪个区域都无妨。
    1. 在轮替 YAML 文件中进行以下更改:
      • metadata.name 更改为表明这是清理作业的名称,例如 sr-1-cleanup
      • spec.cassandra.jobType 设置为 CLEANUP
    2. 再次应用该文件以执行清理。
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 检查作业状态,并等待作业完成。
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      清理作业完成后,变换过程即告完成。

  7. 备份 Cassandra 数据库。此备份可确保能够恢复变换后的凭据。
  8. 删除旧的 Cassandra 凭据 Secret。

回滚轮替

在每个区域中,执行以下步骤。

  1. 使用以下模板创建新的 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: 密钥名称一致。
  2. 应用回滚:
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. 检查作业状态,并等待作业完成。
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. 回滚完成后,请验证流量是否仍在正常流动。
  5. 当流量正常流动后,请在每个剩余区域重复回滚流程。
  6. 完成回滚并验证流量仍在正常流动后,请开始清理流程。您只需在一个区域中执行清理操作即可。您选择哪个区域都无妨。

    在轮替 YAML 文件中进行以下更改:

    • metadata.name 更改为表明这是清理作业的名称,例如:sr-1-cleanup-rollback
    • spec.cassandra.jobType 更改为 CLEANUP_ROLLBACK
  7. 应用该文件以触发清理作业:
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE