Apigee Hybrid를 버전 1.16으로 업그레이드

이 절차에서는 Apigee Hybrid 버전 1.15.x에서 Apigee Hybrid 버전 1.16.0으로 업그레이드하는 방법을 다룹니다.

Apigee Hybrid v1.15의 변경사항

다음과 같은 변경사항이 있습니다.

  • Seccomp 프로필: 버전 1.16부터 Apigee Hybrid는 이제 런타임 구성요소에 Seccomp 프로필을 적용하는 기능을 제공하여 배포의 보안 상태를 크게 향상합니다. 이 기능을 사용하면 Apigee 관리자와 보안팀이 컨테이너화된 프로세스가 호스트의 커널에 수행할 수 있는 시스템 호출을 제한할 수 있습니다. 컨테이너를 필요한 시스템 호출로만 제한하면 다음 작업을 할 수 있습니다.
    • 보안 강화: 컨테이너 브레이크아웃 및 권한 에스컬레이션 위험을 완화합니다.
    • 최소 권한 적용: 구성요소가 작동에 필요한 정확한 시스템 호출에만 액세스할 수 있도록 합니다.
    • 규정 준수: 엄격한 보안 규정 준수 요구사항을 충족하기 위한 중요한 제어를 제공합니다.
    자세한 내용은 포드 보안을 위한 Seccomp 프로필 구성을 참고하세요.
  • Apigee Hybrid의 UDCA 삭제: Apigee Hybrid 버전 1.16에서 통합 데이터 수집 에이전트 (UDCA) 구성요소가 삭제되었습니다. 이제 Apigee 컨트롤 플레인으로 분석, 추적, 배포 상태 데이터를 전송하는 작업은 Google Cloud Pub/Sub 기반 데이터 파이프라인을 사용하여 처리됩니다. Pub/Sub 기반 데이터 파이프라인 사용은 Apigee Hybrid 버전 1.14.0부터 기본 데이터 수집 메커니즘이었습니다.
  • apigee-guardrails 서비스 계정: v1.16.0에서 Apigee Hybrid는 apigee-guardrails Google IAM 서비스 계정을 도입합니다. 이는 설치 중에 apigee-operator 차트에서 프로젝트에 필요한 모든 API가 사용 설정되어 있는지 확인하는 데 사용됩니다.

    다음과 같이 표시됩니다.

  • cert-manager 출시 1.18 및 1.19 지원: Apigee Hybrid v1.16은 cert-manager 출시 1.18출시 1.19를 지원합니다. cert-manager 버전 1.18에서는 트래픽에 영향을 줄 수 있는 Certificate.Spec.PrivateKey.rotationPolicy의 기본값이 변경되었습니다. 이전 버전의 Apigee Hybrid에서 업그레이드하고 cert-manager 출시 1.18 이상으로 업그레이드하는 경우 이 가이드의 cert-manager 업그레이드 절차를 따르세요.

Hybrid 버전 1.16의 기능에 관한 자세한 내용은 Apigee Hybrid v1.16.0 출시 노트를 참고하세요.

기본 요건

Hybrid 버전 1.16으로 업그레이드하기 전에 설치가 다음 요구사항을 충족하는지 확인하세요.

1.16.0으로 업그레이드하기 전 - 제한사항 및 중요 참고사항

  • Apigee Hybrid 1.16.0에서는 단일 환경에 더 많은 프록시와 공유 흐름을 배포할 수 있는 새로운 환경별 프록시 한도가 도입되었습니다. 환경당 배포할 수 있는 프록시 및 공유 흐름 수에 대한 한도를 알아보려면 한도: API 프록시를 참조하세요. 이 기능은 새로 만든 Hybrid 조직에서만 사용할 수 있으며 업그레이드된 조직에는 적용할 수 없습니다. 이 기능을 사용하려면 Hybrid 1.16.0을 새로 설치하고 새 조직을 만드세요.

    이 기능은 2024년 구독 요금제의 일부로만 제공되며 해당 요금제에 따라 부여된 사용 권한이 적용됩니다. 이 기능에 대해 자세히 알아보려면 환경별 프록시 한도 향상을 참조하세요.

  • Apigee Hybrid 버전 1.16으로 업그레이드하려면 다운타임이 필요할 수 있습니다.

    Apigee 컨트롤러를 버전 1.16.0으로 업그레이드하면 모든 Apigee 배포가 순차적으로 재시작됩니다. 지속적 재시작 중에 프로덕션 하이브리드 환경에서 다운타임을 최소화하려면 클러스터를 최소 두 개 이상(동일하거나 다른 리전/데이터 센터에서)을 실행해야 합니다. 모든 프로덕션 트래픽을 단일 클러스터로 전환하고 오프라인으로 업그레이드하려는 클러스터를 적용한 후 업그레이드 절차를 진행합니다. 클러스터마다 이 절차를 반복합니다.

    Apigee에서는 업그레이드를 시작하면 프로덕션에 영향을 미칠 가능성을 줄이기 위해 가능한 한 빨리 모든 클러스터를 업그레이드할 것을 권장합니다. 첫 번째 클러스터를 업그레이드한 후 남은 클러스터를 모두 업그레이드해야 하는 기한은 정해져 있지 않습니다. 그러나 나머지 모든 클러스터가 업그레이드될 때까지 Cassandra 백업 및 복원은 혼합 버전에서 작동하지 않습니다. 예를 들어 Hybrid 1.15의 백업을 사용하여 Hybrid 1.16 인스턴스를 복원할 수 없습니다.

  • 업그레이드 중에 관리 영역 변경사항을 완전히 정지할 필요는 없습니다. 관리 영역 변경사항에 대한 모든 임시 정지는 아래의 업그레이드 안내에 나와 있습니다.

버전 1.16.0으로 업그레이드 개요

Apigee Hybrid 업그레이드 절차는 다음과 같은 섹션으로 정리됩니다.

  1. 업그레이드를 준비합니다.
  2. Hybrid 런타임 버전 1.16.0을 설치합니다.

버전 1.16으로 업그레이드 준비

Hybrid 설치 백업

  1. 이 안내에서는 Helm 차트를 설치한 파일 시스템의 디렉터리에 환경 변수 APIGEE_HELM_CHARTS_HOME을 사용합니다. 필요한 경우 디렉터리를 이 디렉터리로 변경하고 다음 명령어를 사용하여 변수를 정의합니다.

    Linux

    export APIGEE_HELM_CHARTS_HOME=$PWD
    echo $APIGEE_HELM_CHARTS_HOME

    MacOS

    export APIGEE_HELM_CHARTS_HOME=$PWD
    echo $APIGEE_HELM_CHARTS_HOME

    Windows

    set APIGEE_HELM_CHARTS_HOME=%CD%
    echo %APIGEE_HELM_CHARTS_HOME%
  2. 버전 1.15 $APIGEE_HELM_CHARTS_HOME/ 디렉터리의 백업 복사본을 만듭니다. 모든 백업 프로세스를 사용할 수 있습니다. 예를 들어 다음을 사용하여 전체 디렉터리의 tar 파일을 만들 수 있습니다.
    tar -czvf $APIGEE_HELM_CHARTS_HOME/../apigee-helm-charts-v1.15-backup.tar.gz $APIGEE_HELM_CHARTS_HOME
  3. Cassandra 백업 및 복구의 안내에 따라 Cassandra 데이터베이스를 백업합니다.
  4. TLS 인증서와 키 파일(.crt, .key 또는 .pem)이 $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/ 디렉터리에 있는지 확인합니다.

Kubernetes 버전 업그레이드

Kubernetes 플랫폼 버전을 확인하고 필요한 경우 Kubernetes 플랫폼을 Hybrid 1.15 및 Hybrid 1.16 모두에서 지원하는 버전으로 업그레이드합니다. 도움이 필요하면 플랫폼 문서를 참조하세요.

Apigee Helm 차트를 가져옵니다.

Apigee Hybrid 차트는 Google Artifact Registry에서 호스팅됩니다.

oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts

pull 명령어를 사용하여 다음 명령어로 모든 Apigee Hybrid Helm 차트를 로컬 스토리지에 복사합니다.

export CHART_REPO=oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
export CHART_VERSION=1.16.0
helm pull $CHART_REPO/apigee-operator --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-datastore --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-env --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-ingress-manager --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-org --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-redis --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-telemetry --version $CHART_VERSION --untar
helm pull $CHART_REPO/apigee-virtualhost --version $CHART_VERSION --untar

맞춤 Apigee 네임스페이스의 kustomization.yaml 수정

Apigee 네임스페이스가 apigee가 아니면 apigee-operator/etc/crds/default/kustomization.yaml 파일을 수정하고 namespace 값을 Apigee 네임스페이스로 바꿉니다.

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: APIGEE_NAMESPACE

apigee를 네임스페이스로 사용하는 경우 파일을 수정할 필요가 없습니다.

  • 업데이트된 Apigee CRD를 설치합니다.
    1. 다음 명령어를 실행하여 kubectl 테스트 실행 기능을 사용합니다.

      kubectl apply -k  apigee-operator/etc/crds/default/ --server-side --force-conflicts --validate=false --dry-run=server
      
    2. 테스트 실행 명령어로 유효성을 검사한 후 다음 명령어를 실행합니다.

      kubectl apply -k  apigee-operator/etc/crds/default/ \
        --server-side \
        --force-conflicts \
        --validate=false
      
    3. kubectl get crds 명령어를 사용하여 설치를 검증합니다.
      kubectl get crds | grep apigee

      출력이 다음과 같이 표시됩니다.

      apigeedatastores.apigee.cloud.google.com                    2024-08-21T14:48:30Z
      apigeedeployments.apigee.cloud.google.com                   2024-08-21T14:48:30Z
      apigeeenvironments.apigee.cloud.google.com                  2024-08-21T14:48:31Z
      apigeeissues.apigee.cloud.google.com                        2024-08-21T14:48:31Z
      apigeeorganizations.apigee.cloud.google.com                 2024-08-21T14:48:32Z
      apigeeredis.apigee.cloud.google.com                         2024-08-21T14:48:33Z
      apigeerouteconfigs.apigee.cloud.google.com                  2024-08-21T14:48:33Z
      apigeeroutes.apigee.cloud.google.com                        2024-08-21T14:48:33Z
      apigeetelemetries.apigee.cloud.google.com                   2024-08-21T14:48:34Z
      cassandradatareplications.apigee.cloud.google.com           2024-08-21T14:48:35Z
      
  • 클러스터 노드의 라벨을 확인합니다. 기본적으로 Apigee는 cloud.google.com/gke-nodepool=apigee-data 라벨이 있는 노드의 데이터 포드를 예약하고 런타임 포드는 cloud.google.com/gke-nodepool=apigee-runtime 라벨이 있는 노드에 예약됩니다. overrides.yaml 파일에서 노드 풀 라벨을 맞춤설정할 수 있습니다.

    자세한 내용은 전용 노드 풀 구성을 참조하세요.

  • apigee-guardrails 서비스 계정 설정

    하이브리드 v1.16부터는 apigee-guardrails 서비스 계정이 apigee-operator 차트를 업그레이드해야 합니다.

    다음 절차에서 사용 중인 서비스 계정 인증 유형을 선택합니다.

    1. create-service-account가 실행 가능한지 확인합니다. 차트를 방금 다운로드한 경우에는 create-service-account 파일이 실행 모드가 아닐 수 있습니다. APIGEE_HELM_CHARTS_HOME 디렉터리에서 다음 명령어를 실행합니다.
      ./apigee-operator/etc/tools/create-service-account --help

      출력에 permission denied가 표시되면 Linux, MacOS, UNIX 또는 Windows Explorer에서 chmod를, Windows에서 icacls 명령어를 사용하여 파일을 실행 가능하게 만들어야 합니다. 예를 들면 다음과 같습니다.

      chmod +x ./apigee-operator/etc/tools/create-service-account
    2. apigee-guardrails 서비스 계정을 만듭니다.

      Kubernetes 보안 비밀

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      이 명령어는 apigee-guardrails 서비스 계정을 만들고 키를 service-accounts/ 디렉터리에 다운로드합니다.

      JSON 파일

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir ./apigee-operator/

      이 명령어는 apigee-guardrails 서비스 계정을 만들고 apigee-operator/ 차트 디렉터리에 키를 다운로드합니다.

      Vault

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      이 명령어는 apigee-guardrails 서비스 계정을 만들고 키를 service-accounts/ 디렉터리에 다운로드합니다.

      GKE용 WIF

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      이 명령어는 apigee-guardrails 서비스 계정을 만들고 키를 apigee-operator/etc/tools/service-accounts/ 디렉터리에 다운로드합니다. 다운로드한 키 파일은 필요하지 않으므로 삭제해도 됩니다.

      기타 플랫폼의 WIF

      ./apigee-operator/etc/tools/create-service-account \
        --env prod \
        --profile apigee-guardrails \
        --dir service-accounts

      이 명령어는 apigee-guardrails 서비스 계정을 만들고 키를 service-accounts/ 디렉터리에 다운로드합니다.

    3. apigee-guardrails 서비스 계정의 인증을 설정합니다.

      Kubernetes 보안 비밀

      service-accounts/ 디렉터리의 apigee-guardrails 서비스 계정 키 파일을 사용하여 Kubernetes 보안 비밀을 만듭니다.

      kubectl create secret generic apigee-guardrails-svc-account \
          --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-guardrails.json" \
          -n $APIGEE_NAMESPACE

      overrides.yaml 파일에 다음을 추가합니다.

      guardrails:
        serviceAccountRef: apigee-guardrails-svc-account

      JSON 파일

      apigee-operator/ 디렉터리의 apigee-guardrails 서비스 계정 키 파일 경로를 사용하여 overrides.yaml 파일에 다음을 추가합니다.

      guardrails:
        serviceAccountPath: $PROJECT_ID-apigee-guardrails.json

      Vault

      1. apigee-guardrails 서비스 계정 키 파일의 콘텐츠를 사용하여 guardrails 항목을 추가하도록 Vault 비밀 secret/data/apigee/orgsakeys를 업데이트합니다.
        vault kv patch secret/apigee/orgsakeys guardrails="$(cat ./service-accounts/hybrid115-apigee-guardrails.json)"
        
      2. 가이드라인의 Kubernetes 서비스 계정 (KSA) 이름은 apigee-operator-guardrails-sa입니다. Vault의 apigee-orgsakeys 역할에 바인드된 조직별 서비스 계정에 가이드 KSA를 추가합니다.
        1. 현재 KSA 바인딩 목록을 가져옵니다.
          vault read auth/kubernetes/role/apigee-orgsakeys
          

          출력은 다음 형식이어야 합니다.

          Key                                         Value
          ---                                         -----
          alias_name_source                           serviceaccount_uid
          bound_service_account_names                 BOUND_SERVICE_ACCOUNT_NAMES
          bound_service_account_namespace_selector    n/a
          bound_service_account_namespaces            APIGEE_NAMESPACE

          출력에서 BOUND_SERVICE_ACCOUNT_NAMES은 쉼표로 구분된 서비스 계정 이름 목록입니다. 이름 목록에 apigee-operator-guardrails-sa를 추가합니다. 예를 들면 다음과 같습니다 (가독성을 위해 추가된 줄바꿈은 제외).

          apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,
          apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido
          rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c
          assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0
          44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect-
          agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee
          -metrics-apigee-telemetry,apigee-open-telemetry,apigee-synchronizer
          -myhybridorg-dev-ee52aca,apigee-runtime-telemetry-collector-apigee-
          telemetry,apigee-logger-apigee-e-myhybrridorg-dev-ee52aca,apigee-sy
          nchronizer-myhybridog-prod-2d0221c,apigee-runtime-myhybridorg-prod-
          2d0221c,apigee-operator-guardrails-sa
        2. 업데이트된 서비스 계정 이름 목록으로 apigee-orgsakeys 역할의 바인딩을 업데이트합니다.
          vault write auth/kubernetes/role/apigee-orgsakeys \
            bound_service_account_names=UPDATED_BOUND_SERVICE_ACCOUNT_NAMES \
            bound_service_account_namespaces=APIGEE_NAMESPACE \
            policies=apigee-orgsakeys-auth \
            ttl=1m
          
      3. SecretProviderClass에 '가드레일' 추가
        1. spc-org.yaml 파일을 수정합니다.
        2. spec.parameters.objects 아래에 가이드라인 항목을 추가합니다.
                - objectName: "guardrails"
                  secretPath: ""
                  secretKey: ""
        3. SecretProviderClass을 업데이트합니다.
          kubectl -n APIGEE_NAMESPACE apply -f spc-org.yaml
          

      GKE용 WIF

      가이드라인의 Kubernetes 서비스 계정 (KSA) 이름은 apigee-operator-guardrails-sa입니다. 다음 명령어를 사용하여 apigee-guardrails Google 서비스 계정 (GSA)의 바인딩을 만듭니다.

      gcloud iam service-accounts add-iam-policy-binding apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$APIGEE_NAMESPACE/apigee-operator-guardrails-sa]" \
          --project $PROJECT_ID

      overrides.yaml 파일에 다음을 추가합니다.

      guardrails:
        gsa: apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com

      기타 플랫폼의 WIF

      가이드라인의 Kubernetes 서비스 계정 (KSA) 이름은 apigee-operator-guardrails-sa입니다. 가드레일 KSA에 apigee-guardrails Google 서비스 계정 (GSA)을 가장할 수 있는 액세스 권한을 부여하고 사용자 인증 정보 구성 파일을 사용하도록 재정의를 구성해야 합니다.

      1. 다음 명령어를 사용하여 KSA에 GSA를 가장할 수 있는 액세스 권한을 부여합니다.

        템플릿

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \
          --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/system:serviceaccount:APIGEE_NAMESPACE:apigee-operator-guardrails-sa" \
          --role=roles/iam.workloadIdentityUser

        gcloud iam service-accounts add-iam-policy-binding \
          apigee-guardrails@my-project.iam.gserviceaccount.com \
          --member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-operator-guardrails-sa" \
          --role=roles/iam.workloadIdentityUser

        각 항목의 의미는 다음과 같습니다.

        • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
        • PROJECT_NUMBER: 워크로드 아이덴티티 풀을 만든 프로젝트의 프로젝트 번호입니다.
        • POOL_ID: 워크로드 아이덴티티 풀 ID입니다.
        • APIGEE_NAMESPACE: Apigee Hybrid가 설치된 네임스페이스입니다.
      2. apigee-guardrails 서비스 계정의 사용자 인증 정보 구성 파일을 만듭니다.
        gcloud iam workload-identity-pools create-cred-config \
          projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
          --service-account=apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \
          --credential-source-file=/var/run/service-account/token \
          --credential-source-type=text \
          --output-file=apigee-guardrails-credential-configuration.json
            

        여기서 WORKLOAD_PROVIDER_ID는 워크로드 아이덴티티 풀 공급업체 ID입니다.

      3. 다음 방법 중 하나를 사용하여 워크로드 아이덴티티 제휴를 사용하도록 apigee-guardrails를 구성합니다.

        WIF: 보안 비밀

        1. 각 사용자 인증 정보 구성 파일의 사용자 인증 정보 소스 파일을 사용하여 새로운 Kubernetes 보안 비밀을 만듭니다.
          kubectl create secret -n APIGEE_NAMESPACE generic guardrails-workload-identity-secret --from-file="client_secret.json=./apigee-guardrails-credential-configuration.json"
        2. serviceAccountRef의 값을 새 보안 비밀로 바꿉니다.
          guardrails:
            serviceAccountRef: guardrails-workload-identity-secret

        WIF: 파일

        생성된 apigee-guardrails-credential-configuration.json 파일을 apigee-operator/ 차트 디렉터리로 이동합니다.

        overrides.yaml 파일에 다음을 추가합니다.

        guardrails:
          serviceAccountPath: apigee-guardrails-credential-configuration.json

        WIF: Vault

        해당 사용자 인증 정보 소스 파일을 사용하여 Vault에서 guardrails의 서비스 계정 키를 업데이트합니다.

        SAKEY=$(cat .apigee-guardrails-credential-configuration.json); kubectl -n APIGEE_NAMESPACE exec vault-0 -- vault kv patch secret/apigee/orgsakeys guardrails="$SAKEY"

        자세한 내용은 Storing service account keys in Hashicorp Vault를 참조하세요.

    cert-manager 업그레이드

    Apigee Hybrid v1.16은 cert-manager 버전 1.16~1.19를 지원합니다. cert-manager 1.18에 트래픽 문제를 일으킬 수 있는 변경사항이 있습니다. cert-manager 버전 1.18에서 Certificate.Spec.PrivateKey.rotationPolicy의 기본값이 Never에서 Always로 변경되었습니다. 업그레이드된 Apigee Hybrid 설치의 경우 트래픽에 문제가 발생할 수 있습니다. 이전 버전에서 하이브리드 v1.16으로 업그레이드할 때는 이 변경사항을 보완하도록 apigee-ca 인증서를 수정하거나 cert-manager 버전을 출시 1.17.x 이하로 유지해야 합니다.

    cert-manager를 1.18 또는 1.19로 업그레이드하기 전에 다음 단계 절차에 따라 apigee-ca 인증서를 수정하여 Certificate.Spec.PrivateKey.rotationPolicy 값을 Never로 설정하세요.

    1. apigee-ca 인증서의 콘텐츠를 확인하여 rotationPolicy이 설정되어 있는지 확인합니다.
      kubectl get certificate apigee-ca -n cert-manager -o yaml
      

      출력에서 spec.privateKey 아래의 값을 찾습니다.

      ...
      spec:
        commonName: apigee-hybrid
        duration: 87600h
        isCA: true
        issuerRef:
          group: cert-manager.io
          kind: ClusterIssuer
          name: apigee-root-certificate-issuer
        privateKey:
          algorithm: ECDSA
          # Note: rotationPolicy would appear here if it is set.
          size: 256
        secretName: apigee-ca
      ...
    2. rotationPolicy가 설정되지 않았거나 Always로 설정된 경우 apigee-ca 인증서를 수정하여 rotationPolicy 값을 Never로 설정합니다.
      1. 먼저 테스트 실행을 수행합니다.
        kubectl patch Certificate \
          --dry-run=server \
          -n cert-manager \
          --type=json \
          -p='[{"op": "replace", "path": "/spec/privateKey/rotationPolicy", "value": "Never"}]' \
          -o=yaml \
          apigee-ca
        
      2. 인증서를 패치합니다.
        kubectl patch Certificate \
          -n cert-manager \
          --type=json \
          -p='[{"op": "replace", "path": "/spec/privateKey/rotationPolicy", "value": "Never"}]' \
          -o=yaml \
          apigee-ca
        
    3. rotationPolicy 값이 이제 Never로 설정되었는지 확인합니다.
      kubectl get certificate apigee-ca -n cert-manager -o yaml
      

      출력은 다음과 비슷하게 표시됩니다.

      ...
      spec:
        commonName: apigee-hybrid
        duration: 87600h
        isCA: true
        issuerRef:
          group: cert-manager.io
          kind: ClusterIssuer
          name: apigee-root-certificate-issuer
        privateKey:
          algorithm: ECDSA
          rotationPolicy: Never
          size: 256
        secretName: apigee-ca
      ...
    4. cert-manager를 업그레이드합니다. 다음 명령어를 사용하면 cert-manager v1.19.2가 다운로드되고 설치됩니다.
      kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.19.2/cert-manager.yaml

      지원되는 버전 목록은 지원되는 플랫폼 및 버전: cert-manager를 참조하세요.

    다음과 같이 표시됩니다.

    Hybrid 1.16.0 런타임 설치

    1. 그렇지 않은 경우에는 APIGEE_HELM_CHARTS_HOME 디렉터리로 이동합니다. 해당 디렉터리에서 다음 명령어를 실행합니다.
    2. Apigee Operator/Controller를 업그레이드합니다.

      테스트 실행을 수행합니다.

      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      차트를 업그레이드합니다.

      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      Apigee 운영자 설치를 확인합니다.

      helm ls -n APIGEE_NAMESPACE
      
      NAME       NAMESPACE       REVISION   UPDATED                                STATUS     CHART                   APP VERSION
      operator   apigee   3          2024-08-21 00:42:44.492009 -0800 PST   deployed   apigee-operator-1.16.0   1.16.0
      

      가용성을 확인하여 실행 중인지 확인합니다.

      kubectl -n APIGEE_NAMESPACE get deploy apigee-controller-manager
      
      NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-controller-manager   1/1     1            1           7d20h
      
    3. Apigee Datastore를 업그레이드합니다.

      테스트 실행을 수행합니다.

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      차트를 업그레이드합니다.

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      상태를 확인하여 apigeedatastore가 실행 중인지 확인합니다.

      kubectl -n APIGEE_NAMESPACE get apigeedatastore default
      
      NAME      STATE       AGE
      default   running    2d
    4. Apigee 원격 분석을 업그레이드합니다.

      테스트 실행을 수행합니다.

      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      차트를 업그레이드합니다.

      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      상태를 확인하여 실행 중인지 확인합니다.

      kubectl -n APIGEE_NAMESPACE get apigeetelemetry apigee-telemetry
      
      NAME               STATE     AGE
      apigee-telemetry   running   2d
    5. Apigee Redis를 업그레이드합니다.

      테스트 실행을 수행합니다.

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      차트를 업그레이드합니다.

      helm upgrade redis apigee-redis/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      상태를 확인하여 실행 중인지 확인합니다.

      kubectl -n APIGEE_NAMESPACE get apigeeredis default
      
      NAME      STATE     AGE
      default   running   2d
    6. Apigee 인그레스 관리자를 업그레이드합니다.

      테스트 실행을 수행합니다.

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      차트를 업그레이드합니다.

      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      가용성을 확인하여 실행 중인지 확인합니다.

      kubectl -n APIGEE_NAMESPACE get deployment apigee-ingressgateway-manager
      
      NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
      apigee-ingressgateway-manager   2/2     2            2           2d
    7. Apigee 조직을 업그레이드합니다.

      테스트 실행을 수행합니다.

      helm upgrade ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE \
        --dry-run=server
      

      차트를 업그레이드합니다.

      helm upgrade ORG_NAME apigee-org/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        -f OVERRIDES_FILE
      

      해당 조직의 상태를 확인하여 실행 중인지 확인합니다.

      kubectl -n APIGEE_NAMESPACE get apigeeorg
      
      NAME                      STATE     AGE
      apigee-my-org-my-env      running   2d
    8. 환경을 업그레이드합니다.

      한 번에 환경 하나만 설치해야 합니다. --set env=ENV_NAME으로 환경을 지정합니다.

      테스트 실행을 수행합니다.

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --set env=ENV_NAME \
        -f OVERRIDES_FILE \
        --dry-run=server
      
      • ENV_RELEASE_NAMEapigee-env 차트 설치 및 업그레이드를 추적하는 데 사용되는 이름입니다. 이 이름은 설치 내 다른 Helm 출시 이름과 다르게 고유해야 합니다. 일반적으로 ENV_NAME과 동일합니다. 그러나 환경 이름이 환경 그룹 이름과 같으면 환경과 환경 그룹에 서로 다른 출시 이름(예: dev-env-releasedev-envgroup-release)을 사용해야 합니다. Helm의 출시 버전에 대한 자세한 내용은 Helm 문서의 세 가지 주요 개념을 참조하세요.
      • ENV_NAME은 업그레이드하는 환경의 이름입니다.
      • OVERRIDES_FILE은 v.1.16.0의 새로운 재정의 파일입니다.

      차트를 업그레이드합니다.

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --set env=ENV_NAME \
        -f OVERRIDES_FILE
      

      해당 환경의 상태를 확인하여 실행 중인지 확인합니다.

      kubectl -n APIGEE_NAMESPACE get apigeeenv
      
      NAME                          STATE       AGE   GATEWAYTYPE
      apigee-my-org-my-env          running     2d
    9. 환경 그룹(virtualhosts)을 업그레이드합니다.
      1. 한 번에 환경 그룹(virtualhost) 하나만 설치해야 합니다. --set envgroup=ENV_GROUP_NAME으로 환경 그룹을 지정합니다. override.yaml 파일에 언급된 환경 그룹마다 다음 명령어를 반복합니다.

        테스트 실행을 수행합니다.

        helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --set envgroup=ENV_GROUP_NAME \
          -f OVERRIDES_FILE \
          --dry-run=server
        

        ENV_GROUP_RELEASE_NAME은 이전에 apigee-virtualhost 차트를 설치한 이름입니다. 일반적으로 ENV_GROUP_NAME입니다.

        차트를 업그레이드합니다.

        helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
          --install \
          --namespace APIGEE_NAMESPACE \
          --set envgroup=ENV_GROUP_NAME \
          -f OVERRIDES_FILE
        
      2. ApigeeRoute(AR) 상태를 확인합니다.

        virtualhosts를 설치하면 Apigee 감시자가 제어 영역에서 환경 그룹 관련 세부정보를 가져온 후 내부적으로 ApigeeRoute(AR)를 만드는 ApigeeRouteConfig(ARC)가 생성됩니다. 따라서 해당 AR 상태가 실행 중인지 확인합니다.

        kubectl -n APIGEE_NAMESPACE get arc
        
        NAME                                STATE   AGE
        apigee-org1-dev-egroup                       2d
        kubectl -n APIGEE_NAMESPACE get ar
        
        NAME                                        STATE     AGE
        apigee-org1-dev-egroup-123abc               running   2d
    10. 모든 설치가 성공적으로 업그레이드되었는지 확인한 후 apigee-system 네임스페이스에서 이전 apigee-operator 버전을 삭제합니다.
      1. 이전 operator 버전을 제거합니다.
        helm delete operator -n apigee-system
        
      2. apigee-system 네임스페이스를 삭제합니다.
        kubectl delete namespace apigee-system
        
    11. 삭제된 클러스터 범위 리소스를 다시 설치하려면 Apigee 네임스페이스에서 operator을 다시 업그레이드합니다.
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      

    이전 버전으로 롤백

    이전 버전으로 롤백하려면 이전 차트 버전을 사용하여 업그레이드 프로세스를 역순으로 롤백합니다. apigee-virtualhost로 시작하여 apigee-operator로 돌아간 다음 CRD를 되돌립니다.

    1. 모든 차트를 apigee-virtualhost에서 apigee-datastore로 되돌립니다. 다음 명령어는 이전 버전 (v1.15.x)의 차트를 사용한다고 가정합니다.

      각 환경 그룹에 대해 다음 명령어를 실행합니다.

      helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
        --install \
        --namespace apigee \
        --atomic \
        --set envgroup=ENV_GROUP_NAME \
        -f 1.15_OVERRIDES_FILE
      

      각 환경에 대해 다음 명령어를 실행합니다.

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace apigee \
        --atomic \
        --set env=ENV_NAME \
        -f 1.15_OVERRIDES_FILE
      

      apigee-operator를 제외한 나머지 차트를 되돌립니다.

      helm upgrade ORG_NAME apigee-org/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade ingress-manager apigee-ingress-manager/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade redis apigee-redis/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade telemetry apigee-telemetry/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace apigee \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
    2. apigee-system 네임스페이스를 만듭니다.
      kubectl create namespace apigee-system
      
    3. 리소스 주석을 다시 apigee-system 네임스페이스에 패치합니다.
      kubectl annotate --overwrite clusterIssuer apigee-ca-issuer meta.helm.sh/release-namespace='apigee-system'
      
    4. 출시 이름도 변경한 경우 주석을 operator 출시 이름으로 업데이트합니다.
      kubectl annotate --overwrite clusterIssuer apigee-ca-issuer meta.helm.sh/release-name='operator'
      
    5. apigee-operatorapigee-system 네임스페이스에 다시 설치합니다.
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace apigee-system \
        --atomic \
        -f 1.15_OVERRIDES_FILE
      
    6. 이전 CRD를 재설치하여 CRD를 되돌립니다.
      kubectl apply -k apigee-operator/etc/crds/default/ \
        --server-side \
        --force-conflicts \
        --validate=false
      
    7. APIGEE_NAMESPACE 네임스페이스에서 apigee-operator 출시를 삭제하여 롤백 프로세스를 완료합니다.
      helm uninstall operator -n APIGEE_NAMESPACE
      
    8. operator가 제거되면 clusterIssuer와 같은 일부 클러스터 범위 리소스가 삭제됩니다. 다음 명령어를 사용하여 다시 설치합니다.
      helm upgrade operator apigee-operator/ \
        --install \
        --namespace apigee-system \
        --atomic \
        -f 1.15_OVERRIDES_FILE