에어 갭이 적용된 Google Distributed Cloud에 Apigee 설치

이 가이드에서는 오프라인 Google Distributed Cloud(GDC) 환경에 Apigee Edge for Private Cloud 및 API 프록시를 설치하고 배포하는 방법을 설명합니다. GDC 에어 갭 제품(예: Apigee Edge for Private Cloud)은 인프라와 서비스를 관리하기 위해 Google Cloud에 연결할 필요가 없습니다. 모든 작업에 온프레미스에서 호스팅되는 로컬 제어 영역을 사용할 수 있습니다. GDC 에어 갭에 대한 개요는 개요를 참고하세요.

이 가이드는 Private Cloud용 Apigee Edge에 익숙하고 Kubernetes를 기본적으로 이해하는 Apigee 운영자를 대상으로 합니다.

필수 단계 개요

에어 갭 GDC 환경에 Apigee Edge for Private Cloud를 설치하고 배포하려면 운영자가 다음 단계를 완료해야 합니다.

시작하기 전에

설치 프로세스를 시작하기 전에 다음 단계를 완료해야 합니다.

  1. 아직 GDC 프로젝트가 없는 경우 설치에 사용할 GDC 프로젝트를 만듭니다. 자세한 내용은 프로젝트 만들기를 참고하세요.
  2. GDC에 연결된 워크스테이션 또는 조직의 지속적 배포 환경 내에서 gdcloud CLI를 다운로드하고 설치하고 구성합니다.
  3. gdcloud CLI 및 kubectl API를 사용하는 데 필요한 사용자 인증 정보를 가져옵니다. 필요한 단계는 액세스를 위해 계정 인증하기를 참고하세요.
  4. Apigee 계정 관리자로부터 받은 Apigee 사용자 이름과 비밀번호를 확인합니다.
  5. GKE 관리자 클러스터의 이름과 GKE 사용자 클러스터의 이름을 확인합니다.

용량 요구사항

GDC에 Apigee Edge for Private Cloud를 설치하려면 특정 리소스 할당이 있는 여러 가상 머신 (VM)이 필요합니다. 이러한 VM에는 컴퓨팅 리소스 (RAM, vCPU 코어) 및 로컬 디스크 스토리지를 기준으로 요금이 청구됩니다. 자세한 내용은 가격 책정을 참고하세요.

다음 표에는 각 VM의 리소스 요구사항이 나와 있습니다.

VM 유형 RAM vCPU 코어 디스크 스토리지
저장소 노드 8GB 2-vCPU 코어 64GB
제어 노드 8GB 2-vCPU 코어 64GB
Apigee API 관리 노드 1, 2, 3 16GB RAM 8vCPU 코어 670 GB
Apigee API 관리 노드 4 및 5 16GB RAM 8vCPU 코어 500GB~1TB

역할 및 권한

에어갭 GDC 환경에 Apigee Edge for Private Cloud를 배포하려면 다음 역할과 권한이 필요합니다.

  • 플랫폼 관리자 (PA): IAM Admin 역할을 할당합니다.
  • 애플리케이션 운영자 (AO): 다음 역할을 할당합니다.
    • Harbor Instance Admin: 프로젝트에서 Harbor 인스턴스를 관리할 수 있는 모든 권한이 있습니다.
    • LoggingTarget Creator: 프로젝트 네임스페이스에 LoggingTarget 커스텀 리소스를 만듭니다.
    • LoggingTarget Editor: 프로젝트 네임스페이스에서 LoggingTarget 커스텀 리소스를 수정합니다.
    • Project Bucket Admin: 버킷 내의 스토리지 버킷과 객체를 관리합니다.
    • Project Grafana Viewer: 프로젝트 네임스페이스의 모니터링 인스턴스에 액세스합니다.
    • Project NetworkPolicy Admin: 프로젝트 네임스페이스의 프로젝트 네트워크 정책을 관리합니다.
    • Project VirtualMachine Admin: 프로젝트 네임스페이스의 가상 머신을 관리합니다.
    • Secret Admin: 프로젝트의 Kubernetes 보안 비밀을 관리합니다.
    • Service Configuration Admin: 프로젝트 네임스페이스 내 서비스 구성에 대한 읽기 및 쓰기 액세스 권한이 있습니다.
    • Namespace Admin: 프로젝트 네임스페이스 내의 모든 리소스를 관리합니다.
  • GDC 오프라인 역할 및 권한 부여에 대해 자세히 알아보려면 액세스 권한 부여 및 취소를 참고하세요.

    제한사항

    GDC 오프라인 환경의 Apigee에는 다음과 같은 제한사항이 적용됩니다.

    • GDC 에어갭의 Apigee에는 DNS 서버가 제공되지 않으며 로컬 DNS 변환이 해결 방법으로 사용됩니다. GDC 오프라인 Apigee가 외부 DNS 서버가 있는 환경에 배포된 경우 로컬 DNS를 구성하는 단계를 DNS 서버에서 DNS 항목을 구성하는 단계로 대체합니다.
    • GDC 에어 갭의 Apigee에는 독립형 SMTP 서버가 포함되어 있지 않습니다. 언제든지 SMTP 서버를 구성하여 관리 서버 및 관리 UI에서 계정 생성 및 비밀번호 재설정을 위한 발신 이메일 알림을 사용 설정할 수 있습니다. 관리 API는 Apigee 사용자 계정 관리에 계속 사용할 수 있습니다. 자세한 내용은 Edge SMTP 서버 구성을 참고하세요.
    • GDC 에어갭의 Apigee는 침입 감지 및 방지를 구현하지 않습니다. Snort와 같은 침입 방지 시스템 (IPS)을 설치하고 구성하여 악의적인 활동을 감지하고 방지합니다.

    필수 파일 가져오기

    설치 파일을 가져오려면 먼저 연결된 노드를 설정한 다음 파일을 다운로드해야 합니다.

    연결된 노드 설정

    연결된 노드는 설치 파일을 다운로드하는 데 사용하는 GDC 외부의 단일 VM입니다. 이 VM에는 인터넷 액세스가 필요하며 설치 프로세스에만 사용됩니다.

    연결된 노드에는 다음 용량과 구성이 필요합니다.

    • 운영체제: Rocky Linux 8
    • 머신 크기: 8GB RAM, 2vCPU 코어, 64GB 로컬 디스크 스토리지
    • 연결:
      • 인그레스: TCP 22 (SSH)
      • 이그레스: 인터넷

    연결된 노드를 만들려면 VM 인스턴스 만들기 및 시작의 안내를 따르세요. VM이 생성되면 Linux VM에 연결의 안내를 따르세요. VM에 연결합니다. 지원되는 운영체제 목록은 GDC 지원 운영체제를 참고하세요.

    설치 파일 다운로드

    설치 파일을 다운로드하려면 다음 단계를 따르세요.

    1. Edge for Private Cloud 열에 나와 있는 대로 GDC에서 지원되는 최신 공식 출시 버전은 Apigee Edge for Private Cloud 출시 노트를 참고하세요.
    2. Edge 설정 파일을 다운로드합니다.
      curl https://software.apigee.com/apigee/tarball/VERSION/rocky8/archive.tar -o /tmp/archive.tar -u 'APIGEE_USER:APIGEE_PASSWORD'

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

      • APIGEE_USER은 Apigee 조직에 대해 받은 사용자 이름입니다.
      • APIGEE_PASSWORD은 Apigee 조직에 대해 받은 비밀번호입니다.
      • VERSION는 설치하려는 GDC에서 사용할 프라이빗 클라우드용 Apigee Edge 출시 버전입니다(예: 4.53.01).
    3. 최신 프라이빗 클라우드용 Apigee Edge bootstrap_VERSION.sh 파일을 /tmp/bootstrap_VERSION.sh에 다운로드합니다.
      curl https://software.apigee.com/bootstrap_VERSION.sh -o /tmp/bootstrap_VERSION.sh

      여기서 VERSION는 설치하려는 GDC에서 사용할 최신 Apigee Edge for Private Cloud 출시 버전입니다(예: 4.53.01).

    4. Edge apigee-service 유틸리티 및 종속 항목을 설치합니다.
      sudo bash /tmp/bootstrap_VERSION.sh apigeeuser=APIGEE_USER apigeepassword=APIGEE_PASSWORD

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

      • APIGEE_USER은 Apigee 조직에 대해 받은 사용자 이름입니다.
      • APIGEE_PASSWORD은 Apigee 조직에 대해 받은 비밀번호입니다.
      • VERSION은 설치하려는 GDC에서 사용할 Apigee Edge for Private Cloud 출시 버전입니다.

    5. 연결된 노드에서 설정 스크립트를 실행합니다.
      chmod a+x connected-node_setup.sh \
        ./connected-node_setup.sh

      이 단계에서 스크립트는 다음 위치에 필요한 파일을 생성합니다 (예: 버전 4.53.01의 경우).

      • /opt/apigee/data/apigee-mirror/apigee-4.53.01.tar.gz
      • /tmp/apigee-nginx/apigee-nginx.tar
      • /tmp/fluentbit/fluentbit.tar
      • /tmp/postgresql14/postgresql14.tar
      • /tmp/ansible-rpms.tar
      • /tmp/apigee-repos.tar
    6. 연결된 노드에서 로컬 머신으로 필요한 파일을 SSH를 통해 전송합니다.
      mkdir apigee-files
      cd apigee-files
      for file in /opt/apigee/data/apigee-mirror/apigee-4.53.01.tar.gz /tmp/ansible-rpms.tar /tmp/apigee-nginx/apigee-nginx.tar /tmp/fluentbit/fluentbit.tar /tmp/postgresql14/postgresql14.tar /tmp/apigee-repos.tar; do
        scp -i SSH_PRIVATE_KEY_FILE USER@CONNECTED_NODE_IP:$file .
        done

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

      • SSH_PRIVATE_KEY_FILE은 SSH 비공개 키 파일의 경로입니다.
      • USER은 연결된 노드의 사용자 이름입니다.
      • CONNECTED_NODE_IP는 연결된 노드의 IP 주소입니다.

    스토리지 버킷 설정

    이 단계에서 GDC 운영자는 GDC 프로젝트에 Apigee Edge for Private Cloud 백업 파일을 저장할 스토리지 버킷을 설정합니다.

    스토리지 버킷 만들기

    GDC 프로젝트에서 스토리지 버킷을 만들려면 다음 단계를 따르세요.

    1. 조직 관리자 클러스터로 인증합니다.
      gdcloud auth login --login-config-cert WEB_TLS_CERT
      gdcloud clusters get-credentials ORG_ADMIN_CLUSTER

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

      • WEB_TLS_CERT은 웹 TLS 인증서의 경로입니다.
      • ORG_ADMIN_CLUSTER은 조직 관리자 GKE 클러스터의 이름입니다.

    2. 프로젝트 및 버킷 환경 변수를 설정합니다.
      export PROJECT=PROJECT
      export BUCKET=BUCKET_NAME

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

      • PROJECT은 GDC 프로젝트의 이름입니다.
      • BUCKET_NAME은 Apigee Edge for Private Cloud 백업 파일을 저장하기 위해 만들려는 버킷의 이름입니다.
    3. 버킷 구성을 적용합니다.
      kubectl apply -f - <<EOF
      apiVersion: object.GDC.goog/v1
      kind: Bucket
      metadata:
        name: $BUCKET
        namespace:$PROJECT
      spec:
        description: bucket for Apigee backup files
        storageClass: Standard
        bucketPolicy :
          lockingPolicy :
            defaultObjectRetentionDays: 30
      EOF

      이 구성은 보관 기간이 30일인 버킷을 만듭니다.

    버킷 액세스 구성

    스토리지 버킷에 대한 액세스를 구성하려면 다음 단계를 따르세요.

    1. 프로젝트에서 서비스 계정을 만듭니다.
      gdcloud iam service-accounts create $BUCKET-sa \
          --project=$PROJECT
    2. 버킷에 액세스하기 위한 보안 비밀을 생성하도록 역할과 역할 바인딩을 만듭니다.
      kubectl apply -f - <<EOF
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
        name: $BUCKET-role
        namespace: $PROJECT
      rules:
      -   apiGroups:
        -   object.gdc.goog
        resourceNames:
        -   $BUCKET
        resources:
        -   buckets
        verbs:
        -   get
        -   read-object
        -   write-object
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: $BUCKETrolebinding
        namespace: $PROJECT
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: Role
        name: $BUCKET-role
      subjects:
      -   kind: ServiceAccount
        name: $BUCKET-sa
        namespace: $PROJECT
      EOF
    3. 보안 비밀에서 액세스 키 ID와 키를 가져옵니다.
      export BUCKET_SECRET=$(kubectl get secret -n $PROJECT -o jsonpath="{range .items[*]}{.metadata.name}{':'}{.metadata.annotations['object\.GDC\.goog/subject']}{'\n'}{end}" | grep $BUCKET | tail -1 | cut -f1 -d :)
      echo "access-key-id=$(kubectl get secret -n $PROJECT $BUCKET_SECRET -o jsonpath="{.data['access-key-id']}")"
      echo "access-key=$(kubectl get secret -n $PROJECT $BUCKET_SECRET -o jsonpath="{.data['secret-access-key']}")"

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

      access-key-id=RFdJMzRROVdWWjFYNTJFTzJaTk0=
      access-key=U3dSdm5FRU5WdDhMckRMRW1QRGV0bE9MRHpCZ0Ntc0cxVFJQdktqdg==
    4. 사용자 GKE 클러스터에서 업로더가 사용할 비밀번호를 만듭니다.
      1. 사용자 GKE 클러스터로 인증합니다.
        gdcloud clusters get-credentials USER_CLUSTER

        여기서 USER_CLUSTER은 사용자 GKE 클러스터의 이름입니다.

      2. 보안 비밀 구성을 적용합니다.
        kubectl apply -f - <<EOF
        apiVersion: v1
        kind: Secret
        metadata:
          namespace: $PROJECT
          name: $BUCKET-secret
        type: Opaque
        data:
          access-key-id: ACCESS_KEY_ID
          access-key: ACCESS_KEY
        EOF

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

        • ACCESS_KEY_ID은 이전 단계에서 가져온 액세스 키 ID입니다.
        • ACCESS_KEY은 이전 단계에서 가져온 액세스 키입니다.
    5. 버킷의 스토리지 엔드포인트, 정규화된 도메인 이름 (FQDN), 리전을 가져옵니다.
      1. 조직 관리자 클러스터로 인증합니다.
        gdcloud clusters get-credentials ORG_ADMIN_CLUSTER

        여기서 ORG_ADMIN_CLUSTER은 조직 관리자 GKE 클러스터의 이름입니다.

      2. 버킷의 스토리지 엔드포인트, 정규화된 도메인 이름 (FQDN), 리전을 가져옵니다.
        kubectl get buckets ${BUCKET} -n $PROJECT -o jsonpath="{'endpoint: '}{.status.endpoint}{'\n'}{'bucket: '}{.status.fullyQualifiedName}{'\n'}{'region: '}{.status.region}{'\n'}"

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

        endpoint: https://objectstorage.gpu-org.cookie.sesame.street
        bucket: ez9wo-apigee-backup-bucket
        region: cookie
    6. apigee/helm_user_cluster/values-cookie-air-gapped.yaml 파일에서 다음 값을 업데이트합니다.
      objectstorekeyname: "apigee-backup-bucket-secret"
      objectstoreurl: "BUCKET_ENDPOINT"
      objectstorebucket: "BUCKET_FQDN"

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

      • BUCKET_ENDPOINT은 이전 단계에서 가져온 버킷의 엔드포인트입니다.
      • BUCKET_FQDN은 이전 단계에서 가져온 버킷의 정규화된 도메인 이름입니다.

    저장소 노드 설정

    이 단계에서 GDC 운영자는 Private Cloud용 Apigee Edge 미러 저장소를 호스팅할 저장소 노드를 설정합니다.

    저장소 노드 만들기

    저장소 노드를 만들려면 다음을 실행하세요.

    1. 다음과 같이 apigee/helm_user_cluster/values-cookie-air-gapped.yaml를 업데이트합니다.
      repo_node:
        enabled: true
      
      apigee_node:
        enabled: false
      
      control_node:
        enabled: false

      repo_node이 사용 설정되어 있고 apigee_nodecontrol_node이 모두 사용 중지되어 있는지 확인합니다. 이러한 노드는 이후 단계에서 배포됩니다.

    2. 조직 관리자 클러스터의 사용자 인증 정보를 가져옵니다.
      gdcloud clusters get-credentials ORG_ADMIN_CLUSTER

      여기서 ORG_ADMIN_CLUSTER은 조직 관리자 GKE 클러스터의 이름입니다.

    3. Python 가상 환경을 만듭니다.
      python3 -m venv venv /
      source venv/bin/activate
    4. 배포 스크립트를 실행하여 저장소 노드를 만듭니다.
      python apigee/solution_deploy.py gdc-air-gapped

    저장소 노드 액세스 구성

    저장소 노드에 대한 액세스를 구성하려면 다음 단계를 따르세요.

    1. 저장소 노드에 대해 SSH를 구성합니다.
      export NODE=repo
      kubectl create -n $PROJECT -f - <<EOF
        apiVersion: virtualmachine.GDC.goog/v1
        kind: VirtualMachineAccessRequest
        metadata:
          generateName: $NODE-
        spec:
          ssh:
            key: |
              "cat SSH_PUBLIC_KEY_FILE"
        ttl: 24h
        user: admin
        vm: $NODE
        EOF

      여기서 SSH_PUBLIC_KEY_FILE은 공개 SSH 키가 포함된 파일의 이름입니다.

    2. 저장소 노드의 외부 IP 주소를 가져옵니다.
      kubectl get virtualmachineexternalaccess -n $PROJECT $NODE -ojsonpath='{.status.ingressIP}'
    3. 저장소 노드의 내부 IP 주소를 가져옵니다.
      kubectl get virtualmachines.virtualmachine.gdc.goog -n $PROJECT $NODE -ojsonpath='{.status.network.interfaces[1].ipAddresses[0]}'

    설치 파일 업로드

    이 단계에서 GDC 작업자는 다음 파일의 최신 버전을 저장소 노드에 업로드합니다.

    • apigee-4.53.01
    • apigee-nginx.tar
    • postgresql14.tar
    • fluentbit.tar
    • ansible-rpms.tar
    • apigee-repos.tar

    설치 파일을 업로드하려면 다음 단계를 따르세요.

    1. SSH 비공개 키 파일을 저장소 노드에 복사합니다.
      scp -i SSH_PRIVATE_KEY_FILE ~/apigee-files/* admin@REPO_EXTERNAL_IP:/tmp

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

      • SSH_PRIVATE_KEY_FILE은 비공개 SSH 키가 포함된 파일의 이름입니다.
      • REPO_EXTERNAL_IP는 이전 단계에서 가져온 저장소 노드의 외부 IP 주소입니다.
    2. Fluent Bit 구성이 포함된 폴더를 저장소 노드에 업로드합니다.
      scp -i SSH-PRIVATE-KEY-FILE -r apigee/scripts/fluent-bit admin@REPO_EXTERNAL_IP:/tmp/fluent-bit

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

      • SSH_PRIVATE_KEY_FILE은 비공개 SSH 키가 포함된 파일의 이름입니다.
      • REPO_EXTERNAL_IP은 저장소 노드의 외부 IP 주소입니다.

    미러 저장소 구성

    미러 저장소를 구성하려면 다음 단계를 따르세요.

    1. apigee/scripts/repo_setup.sh을 저장소 노드에 복사합니다.
    2. 스크립트에서 REPO_USERREPO_PASSWORD를 미러 저장소의 원하는 사용자 이름과 비밀번호로 바꿉니다.
    3. 스크립트를 실행합니다.
      chmod a+x repo_setup.sh
      ./repo_setup.sh

      No such file or directory 오류가 발생하면 스크립트를 다시 실행합니다.

    4. 저장소 노드에서 로컬로 미러 저장소에 대한 연결을 테스트합니다.
      curl http://REPO_USER:REPO_PASSWORD@REPO_INTERNAL_IP:3939/bootstrap_VERSION.sh -o /tmp/bootstrap_VERSION.sh
      curl http://REPO_USER:REPO_PASSWORD@REPO_INTERNAL_IP:3939/apigee/release/VERSION/repodata/repomd.xml

      VERSION을 설치하려는 프라이빗 클라우드용 Apigee Edge 버전으로 바꿉니다.

    Apigee 노드 배포

    이 단계에서 GDC 운영자는 Apigee API 관리 노드를 배포합니다.

    Apigee 노드 만들기

    Apigee API 관리 노드를 만들려면 다음 단계를 따르세요.

    1. apigee/helm/scripts/apigee_setup.sh에서 REPO_INTERNAL_IP, REPO_USER_NAME, REPO_PASSWORD을 원하는 값으로 바꿉니다.
    2. 값을 환경 변수로 내보냅니다.
      export REPO_IP=REPO_INTERNAL_IP
      export REPO_USER=REPO_USER_NAME
      export REPO_PASSWORD=REPO_PASSWORD
    3. 다음과 같이 apigee/helm/values-cookie-air-gapped.yaml에서 apigee_node를 사용 설정합니다.
      apigee_node:
        enabled: true
      
    4. 배포 스크립트를 실행하여 Apigee 노드를 만듭니다.
        source venv/bin/activate
        python apigee/solution_deploy.py gdc-air-gapped

    Apigee 노드 액세스 구성

    Apigee API 관리 노드에 대한 액세스를 구성합니다.

    1. 조직 관리자 클러스터로 인증합니다.
      gdcloud clusters get-credentials ORG_ADMIN_CLUSTER

      여기서 ORG_ADMIN_CLUSTER은 조직 관리자 GKE 클러스터의 이름입니다.

    2. 각 노드에 SSH 키를 만듭니다.
      for i in 1 2 3 4 5; do
        kubectl create -n $PROJECT -f - <<EOF
        apiVersion: virtualmachine.GDC.goog/v1
        kind: VirtualMachineAccessRequest
        metadata:
          generateName: node$i
        spec:
          ssh:
            key: |
              "cat SSH_PUBLIC_KEY_FILE"
        ttl: 24h
        user: admin
        vm: node$i
        EOF
        done

      여기서 SSH_PUBLIC_KEY_FILE은 공개 SSH 키가 포함된 파일의 이름입니다.

    3. Apigee 노드의 외부 IP 주소를 가져옵니다.
      for i in 1 2 3 4 5; do
        kubectl get virtualmachineexternalaccess -n $PROJECT node$i -ojsonpath='{.status.ingressIP}'
        echo
        done
    4. Apigee 노드의 내부 IP 주소를 가져옵니다.
      for i in 1 2 3 4 5; do
        kubectl get virtualmachines.virtualmachine.gdc.goog -n $PROJECT node$i -ojsonpath='{.status.network.interfaces[1].ipAddresses[0]}'
        echo
        done
    5. (선택사항) Apigee 노드에서 시작 스크립트가 성공적으로 실행되는지 확인합니다.
      1. 노드에 SSH로 연결하고 다음 명령어를 실행합니다.
        sudo journalctl -u cloud-final -f
      2. 다음과 비슷한 로그를 찾습니다.
        Aug 29 18:17:00 172.20.128.117 cloud-init[1895]: Complete!
        Aug 29 18:17:00 172.20.128.117 cloud-init[1895]: Finished running the command: . /var/lib/google/startup-scripts/apigee-setup

    제어 노드 설정

    이 단계에서 GDC 운영자는 Apigee 설치를 관리할 컨트롤 노드를 설정합니다.

    제어 노드 만들기

    제어 노드를 만들려면 다음 단계를 따르세요.

    1. apigee/helm/scripts/control_setup.sh에서 REPO_INTERNAL_IP, REPO_USER_NAME, REPO_PASSWORD을 원하는 값으로 바꿉니다.
    2. 다음과 같이 apigee/helm/values-cookie-air-gapped.yaml에서 control_node를 사용 설정합니다.
      control_node:
        enabled: true
      
    3. 배포 스크립트를 실행하여 제어 노드를 만듭니다.
      source venv/bin/activate
      python apigee/solution_deploy.py gdc-air-gapped

    제어 노드 액세스 구성

    제어 노드 액세스를 구성하려면 다음 단계를 따르세요.

    1. 제어 노드에 대한 SSH 액세스를 구성합니다.
      kubectl create -n $PROJECT -f - <<EOF
      apiVersion: virtualmachine.GDC.goog/v1
      kind: VirtualMachineAccessRequest
      metadata:
        generateName: control-
      spec:
        ssh:
          key: |
            "cat SSH_PUBLIC_KEY_FILE"
      ttl: 24h
      user: admin
      vm: control
      EOF
    2. 제어 노드의 외부 IP 주소를 가져옵니다.
      kubectl get virtualmachineexternalaccess -n $PROJECT control -ojsonpath='{.status.ingressIP}'
    3. 제어 노드의 내부 IP를 가져옵니다.
      kubectl get virtualmachines.virtualmachine.GDC.goog -n $PROJECT control -ojsonpath='{.status.network.interfaces[1].ipAddresses[0]}'

    Ansible 구성

    이 단계에서 GDC 운영자는 컨트롤 노드에 환경을 설정합니다.

    Ansible 환경을 구성하려면 다음 단계를 따르세요.

    1. 제어 노드에 SSH로 연결하고 Ansible 환경을 설정합니다.
      cd /home/admin
      cp -r /tmp/apigee-repos .
      cd apigee-repos/ansible-opdk-accelerator/setup
    2. 원격 Git 저장소를 로컬 파일로 바꿉니다.
      sed -i 's/https:\/\/github.com\/carlosfrias/git+file:\/\/\/home\/admin\/apigee-repos/g'  requirements.yml
      sed -i 's/\.git$//g'  requirements.yml
      
    3. Install Ansible requirements:
        sudo chown -R admin /home/admin/apigee-repos
        ansible-galaxy install -r requirements.yml -f
    4. 설정 구성을 업데이트합니다.
      1. main.yml 파일을 수정합니다.
        vi ~/apigee-repos/ansible-opdk-accelerator/setup/roles/apigee-opdk-setup-ansible-controller/tasks/main.yml
      2. GitHub 액세스가 필요한 작업을 삭제합니다.
        • 구성 저장소의 Git SSH 체크아웃
        • 구성 저장소의 Git HTTPS 체크아웃
      3. 설정 플레이북을 실행합니다.
        cd ~/apigee-repos/ansible-opdk-accelerator/setup
        ansible-playbook setup.yml
    5. Apigee 노드의 SSH 키를 제어 노드에 업로드합니다.
      scp -i CONTROL_SSH_PRIVATE_KEY_FILE APIGEE_NODE_SSH_PRIVATE_KEY_FILE admin@CONTROL_EXTERNAL_IP:/home/admin/.ssh/id_rsa

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

      • CONTROL_SSH_PRIVATE_KEY_FILE은 제어 노드의 SSH 비공개 키가 포함된 파일의 이름입니다.
      • APIGEE_NODE_SSH_PRIVATE_KEY_FILE은 Apigee 노드의 SSH 비공개 키가 포함된 파일의 이름입니다.
      • CONTROL_EXTERNAL_IP는 제어 노드의 외부 IP 주소입니다.
    6. Ansible 인벤토리 구성 파일을 만듭니다.
      1. apigee/scripts/ansible/prod.cfg 파일의 콘텐츠를 prod.cfg 파일에 복사합니다.
        vi ~/.ansible/multi-planet-configurations/prod.cfg
      2. edge-dc1 폴더를 만들고 apigee/scripts/ansible/edge-dc1 파일의 콘텐츠를 edge-dc1 파일에 복사합니다.
        mkdir ~/.ansible/inventory/prod
        vi ~/.ansible/inventory/prod/edge-dc1
    7. edge-dc1에서 Apigee 노드의 내부 IP 주소를 업데이트합니다.
      apigee_000 ansible_host=APIGEE_NODE1_INTERNAL_IP
      apigee_001 ansible_host=APIGEE_NODE2_INTERNAL_IP
      apigee_002 ansible_host=APIGEE_NODE3_INTERNAL_IP
      apigee_003 ansible_host=APIGEE_NODE4_INTERNAL_IP
      apigee_004 ansible_host=APIGEE_NODE5_INTERNAL_IP

      여기서 APIGEE_NODE*_INTERNAL_IP 값은 이전 단계에서 가져온 Apigee 노드의 내부 IP 주소입니다.

    8. 다음 값을 사용하여 ~/.apigee-secure/credentials.yml 파일을 구성합니다.
      • apigee_repo_user: 'APIGEE_REPO_USER'
      • apigee_repo_password: 'APIGEE_REPO_PASSWORD'
      • opdk_qpid_mgmt_username: 'OPDK_QPID_MGMT_USERNAME'
      • opdk_qpid_mgmt_password: 'OPDK_QPID_MGMT_PASSWORD'

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

      • APIGEE_REPO_USER은 Apigee 저장소의 사용자 이름입니다.
      • APIGEE_REPO_PASSWORD은 Apigee 저장소의 비밀번호입니다.
      • OPDK_QPID_MGMT_USERNAME은 Apigee QPID 관리 서버의 사용자 이름입니다.
      • OPDK_QPID_MGMT_PASSWORD는 Apigee QPID 관리 서버의 비밀번호입니다.

    9. 유효한 Private Cloud용 Apigee Edge 라이선스 파일이 포함된 라이선스 파일을 추가합니다. 파일 이름은 license.txt여야 합니다.
    10. ~/.apigee-secure/license.txt 파일의 콘텐츠를 방금 만든 license.txt에 복사합니다.
    11. ~/.apigee/custom-properties.yml 파일에서 다음 값을 구성합니다.
      • opdk_version: 'OPDK_VERSION'
      • apigee_repo_url: 'APIGEE_REPO_URL'

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

      • OPDK_VERSION은 설치하려는 프라이빗 클라우드용 Apigee Edge 버전입니다.
      • APIGEE_REPO_URL은 Apigee 저장소의 URL입니다.

    12. 구성 파일을 환경 변수로 내보냅니다.
      export ANSIBLE_CONFIG=~/.ansible/multi-planet-configurations/prod.cfg

    Apigee 구성요소 설치

    이 단계에서 GDC 연산자는 Ansible을 사용하여 Apigee 구성요소를 설치합니다.

    Apigee 구성요소를 설치하려면 다음 단계를 따르세요.

    1. 원격 Git 저장소를 로컬 파일로 바꿉니다.
      cd ~/apigee-repos/ansible-opdk-accelerator/installations/multi-node/
      sed -i 's/https:\/\/github.com\/carlosfrias/git+file:\/\/\/home\/admin\/apigee-repos/g' requirements.yml
      sed -i 's/\.git$//g'  requirements.yml
    2. Ansible 요구사항을 설치합니다.
      ansible-galaxy install -r requirements.yml -f
    3. Ansible 역할을 패치합니다.
      sed -i 's/private_address/inventory_hostname/g' ~/.ansible/roles/apigee-opdk-settings-cassandra/tasks/main.yml
      sed -i 's/include/include_tasks/g' ~/.ansible/roles/apigee-opdk-server-self/tasks/main.yml
      sed -i 's/include/include_tasks/g' ~/.ansible/roles/apigee-opdk-setup-silent-installation-config/tasks/main.yml
      cat << EOF >> ~/.ansible/roles/apigee-opdk-setup-silent-installation-config/templates/response-file-template.conf.j2
      QPID_MGMT_USERNAME= opdk_qpid_mgmt_username
      QPID_MGMT_PASSWORD= opdk_qpid_mgmt_password
      EOF
      sed -i 's/mode: 0700/mode: 0700\n      recurse: yes/g' ~/.ansible/roles/apigee-opdk-setup-postgres-config/tasks/main.yml
    4. install.yml 파일의 콘텐츠를 apigee/scripts/ansible/install.yml의 콘텐츠로 바꿉니다.
    5. 플레이북을 실행하여 Apigee 구성요소를 설치합니다.
      ansible-playbook install.yml
    6. Edge UI에서 사용자의 비밀번호 재설정 링크를 사용 중지합니다. GDC 에어갭의 Apigee에는 SMTP 서버가 포함되어 있지 않습니다. Edge UI에서 비밀번호 재설정 링크를 사용 중지 하는 단계를 따르세요.

    포드 및 서비스 배포

    이 단계에서는 업로더, 리버스 프록시, 부하 분산기, 로깅 포드 및 서비스를 배포합니다.

    포드와 서비스를 배포하려면 다음 안내를 따르세요.

    1. Harbor 레지스트리 인스턴스 만들기의 안내에 따라 GDC 프로젝트 dev-apigee에 Harbor 인스턴스를 만듭니다.
    2. Harbor 프로젝트 만들기의 안내에 따라 apigee라는 이름의 Harbor 프로젝트를 만듭니다.
    3. 액세스 제어 구성의 안내에 따라 Harbor 프로젝트의 액세스 제어를 설정합니다.
    4. Docker 및 Helm에 로그인의 안내에 따라 Docker 인증을 구성합니다.
    5. 다음과 같이 apigee/apigee_user_cluster.toml 파일의 IP 주소를 업데이트합니다.
      mgmt-server-proxy = "APIGEE_NODE1_EXTERNAL_IP"
      router-proxy1 = "APIGEE_NODE2_EXTERNAL_IP"
      router-proxy2 = "APIGEE_NODE3_EXTERNAL_IP"
      

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

      • APIGEE_NODE1_EXTERNAL_IP는 이전 단계에서 가져온 Apigee node1의 외부 IP 주소입니다.
      • APIGEE_NODE2_EXTERNAL_IP는 이전 단계에서 가져온 Apigee node2의 외부 IP 주소입니다.
      • APIGEE_NODE3_EXTERNAL_IP는 이전 단계에서 가져온 Apigee node3의 외부 IP 주소입니다.

    6. HTTPS 구성을 위한 SSL 인증서 파일 (server.crt)과 키 파일 (server.key)을 apigee/mgmt-server-proxyapigee/router-proxy 폴더에 배치합니다.

      자체 서명 인증서를 생성하려면 다음 명령어를 사용하세요.

      openssl req -newkey rsa:4096 -x509 -nodes -keyout server.key -new -out server.crt -subj "/CN=*.apigeetest.com" -sha256 -days 365
    7. apigee/uploader/Dockerfile 파일의 업로더 컨테이너에서 루트 사용자의 SSH-PASSWORD 값을 업데이트합니다.
      RUN echo 'root:SSH_PASSWORD' | chpasswd
    8. 사용자 클러스터의 사용자 인증 정보를 가져옵니다.
      gdcloud clusters get-credentials USER_CLUSTER

      여기서 USER_CLUSTER은 사용자 GKE 클러스터의 이름입니다.

    9. 배포 스크립트를 실행하여 포드와 서비스를 배포합니다.
      source venv/bin/activate
      python apigee/solution_deploy_user_cluster.py gdc-air-gapped
    10. 서비스의 외부 IP 주소를 가져옵니다.
      kubectl get svc -n $PROJECT_ID

    업로더 및 Fluent Bit 전달자 IP 업데이트

    이 단계에서는 백업 및 Apigee 설정 스크립트에서 업로더 및 Fluent Bit 전달자 IP를 업데이트합니다.

    1. apigee/helm/scripts/backup_setup.sh에서 SSH_PASSWORD, root, UPLOADER_EXTERNAL_IP를 업데이트합니다.
      sshpass -p SSH_PASSWORD scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null apigee-backup* root@UPLOADER_EXTERNAL_IP:/temp/

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

      • SSH_PASSWORD: 루트 사용자의 비밀번호
      • UPLOADER_EXTERNAL_IP는 이전 단계에서 가져온 업로더 서비스의 외부 IP 주소입니다.

    2. apigee/helm/scripts/apigee_setup.sh에서 FLUENTBIT_EXTERNAL_IP 업데이트:
      export FLUENTBIT_EXTERNAL_IP=FLUENTBIT_EXTERNAL_IP

    시작 스크립트를 업데이트하려면 Apigee 노드를 다시 시작해야 합니다. 노드를 다시 시작하려면 다음 단계를 따르세요.

    1. VM을 중지합니다.
      gdcloud clusters get-credentials ORG_ADMIN_CLUSTER
      export PROJECT=dev-apigee
      for i in 1 2 3 4 5; do
        gdcloud compute instances stop node$i --project $PROJECT
        done
    2. Helm 차트를 다시 배포합니다.
      python apigee/solution_deploy.py gdc-air-gapped
    3. VM을 시작합니다.
      for i in 1 2 3 4 5; do
        GDCloud compute instances start node$i --project $PROJECT
        done

    Apigee 조직 온보딩

    이 단계에서는 GDC 운영자가 node1에서 설정 스크립트를 실행하여 Apigee 조직을 온보딩합니다.

    Apigee 조직을 온보딩하려면 다음 단계를 따르세요.

    1. apigee/scripts/apigee_org_setup.sh에서 다음 값을 업데이트합니다. 필요에 따라 다른 매개변수를 업데이트합니다.
      IP1=APIGEE_NODE1_INTERNAL_IP
      
      VHOST_ALIAS="APIGEE_NODE2_EXTERNAL_IP:9001 APIGEE_NODE3_EXTERNAL_IP:9001"

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

      • APIGEE_NODE1_INTERNAL_IP는 앞선 단계에서 가져온 Apigee node1의 내부 IP 주소입니다.
      • APIGEE_NODE2_EXTERNAL_IP는 이전 단계에서 가져온 Apigee node2의 외부 IP 주소입니다.
      • APIGEE_NODE3_EXTERNAL_IP는 이전 단계에서 가져온 Apigee node3의 외부 IP 주소입니다.

    2. node1에서 스크립트를 실행하여 조직을 온보딩합니다.
      chmod a+x apigee_org_setup.sh
      ./apigee_org_setup.sh

    HTTP 연결 테스트

    이 단계에서는 관리 API 및 API 프록시의 HTTP 연결을 테스트합니다.

    HTTP 연결을 테스트하려면 다음 단계를 따르세요.

    1. apigee-elb 서비스의 외부 IP 주소를 가져옵니다.
      gdcloud clusters get-credentials USER_CLUSTER
      export PROJECT=dev-apigee
      kubectl get svc apigee-elb -n $PROJECT

      여기서 USER_CLUSTER은 사용자 GKE 클러스터의 이름입니다.

      이 서비스는 Edge UI, Management API, API 프록시의 엔드포인트 역할을 합니다.

    Management API 테스트

    Management API를 테스트하려면 엔드포인트로 HTTP 요청을 보냅니다.

    curl -u "opdk@apigee.com:Apigee123!" "http://APIGEE_ELB_EXTERNAL_IP:8080/v1/o/ORG_NAME/e/ENV_NAME/provisioning/axstatus"

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

    • APIGEE_ELB_EXTERNAL_IP는 이전 단계에서 가져온 apigee-elb 서비스의 외부 IP 주소입니다.
    • ORG_NAME: Apigee 조직의 이름
    • ENV_NAME: Apigee 환경의 이름입니다.

    API 프록시 테스트

    API 프록시를 테스트하려면 다음 단계를 따르세요.

    1. Edge UI에 로그인합니다.
    2. API 프록시 페이지에서 만들기를 클릭하여 새 API 프록시를 만듭니다.
    3. 프록시 세부정보 페이지에서 다음 값을 입력합니다.
      • 프록시 유형: 대상 없음을 선택합니다.
      • 프록시 이름: ok
      • 기본 경로: /ok
      • 대상: http://APIGEE_ELB_EXTERNAL_IP:9001
    4. 만들기를 클릭하여 API 프록시를 만듭니다.
    5. /ok에 HTTP 요청을 전송합니다.
      curl -i http://APIGEE_ELB_EXTERNAL_IP:9001/ok
    6. 응답이 200 OK인지 확인합니다.

    TLS 구성 및 HTTPS 테스트

    이 단계에서 GDC 운영자는 API 프록시, Edge UI, 관리 API의 전송 계층 보안 (TLS)을 구성합니다.

    API 프록시의 TLS 구성

    1. 키 저장소/신뢰 저장소 및 별칭 만들기의 단계에 따라 다음 값으로 자체 서명된 인증서를 만듭니다.
      • KeyStore: myTestKeystore
      • KeyAlias: myKeyAlias
      • 일반 이름: apigeetest.com
    2. API를 호출하여 api.apigeetest.com라는 가상 호스트를 만듭니다.
      curl -v -H "Content-Type:application/xml" \
        -u "opdk@apigee.com:Apigee123!" "http://APIGEE_ELB_EXTERNAL_IP:8080/v1/o/ORG_NAME/e//virtualhosts" \
        -d '<VirtualHost  name="secure">
            <HostAliases>
              <HostAlias>api.apigeetest.com</HostAlias>
            </HostAliases>
            <Interfaces/>
            <Port>9005</Port>
            <OCSPStapling>off</OCSPStapling>
            <SSLInfo>
              <Enabled>true</Enabled>
              <ClientAuthEnabled>false</ClientAuthEnabled>
              <KeyStore>myTestKeystore</KeyStore>
              <KeyAlias>myKeyAlias</KeyAlias>
            </SSLInfo>
          </VirtualHost>'

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

      • APIGEE_ELB_EXTERNAL_IP는 이전 단계에서 가져온 apigee-elb 서비스의 외부 IP 주소입니다.
      • ORG_NAME: Apigee 조직의 이름
      • ENV_NAME은 가상 호스트를 만들어야 하는 Apigee 환경의 이름입니다.
    3. 보안 가상 호스트를 사용하여 API 프록시를 만듭니다.
    4. 라우터에서 가상 호스트의 DNS 변환을 구성합니다.
      echo '127.0.0.1 api.apigeetest.com' | sudo tee -a /etc/hosts
    5. 엔드포인트에 HTTPS 요청을 전송하여 가상 호스트가 로컬로 작동하는지 확인합니다.
      curl https://api.apigeetest.com:9005/ok -v -k
    6. 엔드포인트의 DNS 변환을 구성합니다.
      echo 'APIGEE_ELB_EXTERNAL_IP apigeetest.com' | sudo tee -a /etc/hosts

      여기서 APIGEE_ELB_EXTERNAL_IP는 이전 단계에서 가져온 apigee-elb 서비스의 외부 IP 주소입니다.

    7. 웹브라우저에서 https://apigeetest.com/ok로 이동하여 작동하는지 확인합니다.

    Edge UI의 TLS 구성

    Edge UI의 TLS를 구성하려면 다음 단계를 따르세요.

    1. SSL 인증서 파일과 키 파일에서 키 저장소 파일을 생성합니다.
      openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out keystore.pkcs12
      keytool -importkeystore -srckeystore keystore.pkcs12 -srcstoretype pkcs12 -destkeystore keystore.jks -deststoretype jks
    2. node1의 Apigee 폴더 아래에 키 저장소 파일을 배치합니다.
      scp -i SSH_PRIVATE_KEY_FILE keystore.jks admin@APIGEE_NODE1_EXTERNAL_IP:/home/admin/

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

      • SSH_PRIVATE_KEY_FILE은 Apigee 노드의 SSH 비공개 키가 포함된 파일의 이름입니다.
      • APIGEE_NODE1_EXTERNAL_IP는 이전 단계에서 가져온 Apigee node1의 외부 IP 주소입니다.

    3. node1에 SSH로 연결하고 키 저장소 파일을 Apigee 폴더로 이동합니다.
      sudo mv keystore.jks /opt/apigee/customer/application/
    4. SSL 구성 파일을 만듭니다.
      sudo vi /tmp/sslConfigFile
    5. 다음과 같이 KEY-PASS-PHRASE 값을 업데이트합니다.
      HTTPSPORT=9443
      DISABLE_HTTP=n
      KEY_ALGO=JKS
      KEY_FILE_PATH=/opt/apigee/customer/application/keystore.jks
      KEY_PASS=KEY_PASS_PHRASE
    6. 구성 파일을 사용하여 SSL을 구성합니다.
      sudo chown apigee:apigee /tmp/sslConfigFile
      /opt/apigee/apigee-service/bin/apigee-service edge-ui configure-ssl -f /tmp/sslConfigFile
    7. Edge UI의 DNS 확인을 구성합니다.
      echo 'APIGEE_ELB_EXTERNAL_IP ui.apigeetest.com' | sudo tee -a /etc/hosts

      여기서 APIGEE_ELB_EXTERNAL_IP는 이전 단계에서 가져온 apigee-elb 서비스의 외부 IP 주소입니다.

    8. 웹브라우저에서 https://ui.apigeetest.com:9443에 액세스하여 작동하는지 확인합니다. 자세한 내용은 가이드를 참고하세요.

    관리 API의 TLS 구성

    관리 API의 TLS를 구성하려면 다음 단계를 따르세요.

    1. 키 저장소 파일의 소유자를 구성합니다 (Edge UI와 동일한 소유자 사용).
      sudo chown apigee:apigee /opt/apigee/customer/application/keystore.jks
    2. 속성 파일을 만듭니다.
      sudo vi /opt/apigee/customer/application/management-server.properties
    3. 다음과 같이 KEY_PASS_PHRASE 값을 키 저장소 비밀번호로 바꿉니다.

      conf_webserver_ssl.enabled=true
      # Leave conf_webserver_http.turn.off set to false
      # because many Edge internal calls use HTTP.
      conf_webserver_http.turn.off=false
      conf_webserver_ssl.port=8443
      conf_webserver_keystore.path=/opt/apigee/customer/application/keystore.jks
      # Enter the obfuscated keystore password below.
      conf_webserver_keystore.password=KEY_PASS_PHRASE
    4. 변경사항이 적용되도록 관리 서버를 다시 시작합니다.
      /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
    5. HTTPS가 로컬에서 작동하는지 확인합니다.
      curl -u "opdk@apigee.com:Apigee123!" "https://localhost:8443/v1/users" -k
    6. 클라이언트에서 브라우저의 https://apigeetest.com:8443/v1/users에 액세스합니다. 관리자 사용자 이름과 비밀번호를 입력하여 사용자 인증 정보가 올바르게 구성되었는지 확인합니다.

    다음 단계