개요
이 기능을 사용하면 플랫폼 관리자가 다음을 수행할 수 있습니다.
- Hashicorp Vault에서 Cassandra 사용자 인증 정보를 순환합니다.
- 비밀번호 순환 중 문제가 발생하면 Vault에 있는 이전 Cassandra 사용자 인증 정보로 롤백합니다.
- 한 번에 하나의 리전에 대해 Cassandra 비밀번호를 순환하여 서비스 가용성에 대한 영향을 최소화하고 순환 프로세스를 효율적으로 제어할 수 있습니다.
- 단일 리전의 순환 시작, 진행률 및 완료를 추적합니다.
이 기능은 Apigee Hybrid 1.13.1 이상에서 제공됩니다.
시작하기 전에
사용자 인증 정보 순환을 설정하기 전
- Cassandra 데이터베이스를 백업합니다. 이 백업은 순환 전 사용자 인증 정보를 복원할 수 있도록 하기 위한 것입니다.
- 클러스터가 정상 상태인지 확인합니다(즉, 모든 Apigee 리소스가 실행 중이고 대기 중인 상태 변경사항이 없음).
단일 리전 설정
-
새 Cassandra 사용자 인증 정보에 대해 Apigee 네임스페이스에 새로운
SecretProviderClassKubernetes 리소스를 만듭니다. 사용할 템플릿은 Hashicorp Vault에 Cassandra 보안 비밀 저장을 참조하세요. 이렇게 하면 Vault 역할이 Kubernetes 네임스페이스 내의 보안 비밀에 액세스할 수 있습니다. -
다음 템플릿을 사용하여 새
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를 이전 단계에서 만든 새로운 보안 비밀 제공자 클래스 이름으로 설정합니다. - 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 사용자 인증 정보, 역할, 정책을 삭제합니다.
멀티 리전 설정
멀티 리전 설정 절차는 첫 번째 리전 설정과 남은 리전 설정의 두 섹션으로 구분됩니다.
- 후속 리전을 시작하기 전에 첫 번째 리전에서 다음 단계를 완료합니다.
-
새 Cassandra 사용자 인증 정보에 대해
APIGEE_NAMESPACE네임스페이스에 새로운SecretProviderClassKubernetes 리소스를 만듭니다. 사용할 템플릿은 Hashicorp Vault에 Cassandra 보안 비밀 저장을 참조하세요. 이렇게 하면 Vault 역할이 Kubernetes 네임스페이스 내의 보안 비밀에 액세스할 수 있습니다. -
다음 템플릿을 사용하여 새
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를 이전 단계에서 만든 새로운 보안 비밀 제공자 클래스 이름으로 설정합니다. - 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
-
새 Cassandra 사용자 인증 정보에 대해
-
이후 각 리전에서 다음 단계를 완료합니다.
- 새 Cassandra 사용자 인증 정보에 대해 Apigee 네임스페이스에 새로운
SecretProviderClassKubernetes 리소스를 만듭니다. 사용할 템플릿은 Hashicorp Vault에 Cassandra 보안 비밀 저장을 참조하세요. 1a단계와 동일한 정의여야 합니다. overrides.yaml을 업데이트하고rotation.yaml파일의spec.cassandra.newSecretProviderClass값과 일치하도록cassandra.auth.secretProviderClass를 설정합니다.cassandra: auth: secretProviderClass: NEW_SPC_NAME- 연산자 차트를 적용합니다.
helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
-
새
ReplicaSet가 생성됩니다. 새 컨트롤러 관리자 포드가 새 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입니다. - 새 데이터 스토어 포드에서 새 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, 런타임, 동기화기 포드가 새 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_NAMEkubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'export POD=NEW_SYNCHRONIZER_POD_NAMEkubectl -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
- 새 Cassandra 사용자 인증 정보에 대해 Apigee 네임스페이스에 새로운
-
모든 리전의 단계를 완료하고 트래픽이 올바르게 작동하는지 확인한 후 다음 두 단계에 따라 첫 번째 리전에서 프로세스를 정리합니다.
-
첫 번째 리전에서
metadata.name값을 업데이트하고spec.cassandra.jobType을CLEANUP으로 설정합니다. -
파일을 적용하여 정리 작업을 트리거합니다.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
- 작업 상태를 확인하고 작업 로그를 통해 정리 작업이 완료되었는지 확인합니다.
정리 작업이 끝나면 순환 프로세스가 완료됩니다.
-
첫 번째 리전에서
- Cassandra 데이터베이스를 백업합니다. 이 백업은 순환된 사용자 인증 정보를 복원할 수 있도록 하기 위한 것입니다.
- Vault에서 이전 Cassandra 사용자 인증 정보, 역할, 정책을 삭제합니다.