在 Kubernetes Secret 中变换 Cassandra 凭据

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

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

单区域凭据变换

  1. 按照在 Kubernetes Secret 中设置用户名和密码中的说明,在包含要变换的 Cassandra 用户凭据的 Apigee 命名空间中创建一个新的 Kubernetes Secret。
  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:可选。替换默认值(480m == 8 小时)。<=0 表示无限超时。
      • PRECHECK :触发执行试运行。设置为 true 时,变换过程会完成所有步骤,但不会实际应用新凭据。
      • 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. 验证流量后,请清理旧 Secret。
    1. 在变换 YAML 文件中进行以下更改:
      • metadata.name 更改为表示这是一项清理作业的名称,例如:sr-1-cleanup
      • spec.cassandra.jobType 设置为 CLEANUP
      • 确认 spec.precheck 已设置为 false
    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 中设置用户名和密码中的说明,在包含要变换的 Cassandra 用户凭据的 Apigee 命名空间中创建一个新的 Kubernetes Secret。

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

  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:可选。替换默认值(480m == 8 小时)。<=0 表示无限超时。
      • PRECHECK :触发执行试运行。设置为 true 时,变换过程会完成所有步骤,但不会实际应用新凭据。
      • 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. 验证流量后,请清理旧 Secret。您只需在一个区域执行清理操作。您选择哪个区域无关紧要。
    1. 在变换 YAML 文件中进行以下更改:
      • metadata.name 更改为表示这是一项清理作业的名称,例如:sr-1-cleanup
      • spec.cassandra.jobType 设置为 CLEANUP
      • 确认 spec.precheck 已设置为 false
    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:可选。替换默认值(480m == 8 小时)。<=0 表示无限超时。
    • OLD_SECRET_REF:此值必须与您在单区域变换多区域变换程序中使用的变换 YAML 文件中的 oldSecretRef: 的 Secret 名称相匹配。
    • NEW_SECRET_REF:此值必须与您在单区域变换多区域变换程序中使用的变换 YAML 文件中的 newSecretRef: 的 Secret 名称相匹配。
  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