エアギャップのある Google Distributed Cloud に Apigee をインストールする

このガイドでは、エアギャップされた Google Distributed Cloud(GDC)環境に Apigee Edge for Private Cloud と API プロキシをインストールしてデプロイする方法について説明します。Apigee Edge for Private Cloud などの GDC エアギャップ オファリングでは、インフラストラクチャとサービスを管理するために Google Cloud への接続は必要ありません。すべてのオペレーションに、オンプレミスでホストされているローカル コントロール プレーンを使用できます。GDC エアギャップの概要については、概要をご覧ください。

このガイドは、Apigee Edge for Private Cloud に精通し、Kubernetes の基本的な知識がある Apigee オペレーターを対象としています。

必要な手順の概要

エアギャップ GDC 環境に Apigee Edge for Private Cloud をインストールしてデプロイするには、オペレーターが次の手順を完了する必要があります。

始める前に

インストール プロセスを開始する前に、次の手順を完了してください。

  1. まだ作成していない場合は、インストールに使用する 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 コア数 ディスク ストレージ
Repo ノード 8 GB 2 個の vCPU コア 64 GB
コントロール ノード 8 GB 2 個の vCPU コア 64 GB
Apigee API 管理ノード 1、2、3 16 GB RAM 8 個の vCPU コア 670 GB
Apigee API 管理ノード 4 と 5 16 GB RAM 8 個の vCPU コア 500 GB ~ 1 TB

ロールと権限

エアギャップ GDC 環境に Apigee Edge for Private Cloud をデプロイするには、次のロールと権限が必要です。

  • プラットフォーム管理者(PA): IAM Admin ロールを割り当てます。
  • アプリケーション オペレーター(AO): 次のロールを割り当てます。
    • Harbor Instance Admin: プロジェクト内の Harbor インスタンスを管理するためのフルアクセス権があります。
    • LoggingTarget Creator: プロジェクト Namespace に LoggingTarget カスタム リソースを作成します。
    • LoggingTarget Editor: プロジェクト Namespace の LoggingTarget カスタム リソースを編集します。
    • Project Bucket Admin: バケット内のストレージ バケットとオブジェクトを管理します
    • Project Grafana Viewer: プロジェクト Namespace のモニタリング インスタンスにアクセスします。
    • Project NetworkPolicy Admin: プロジェクト名前空間のプロジェクト ネットワーク ポリシーを管理します。
    • Project VirtualMachine Admin: プロジェクト Namespace の仮想マシンを管理します。
    • Secret Admin: プロジェクト内の Kubernetes Secret を管理します。
    • Service Configuration Admin: プロジェクト Namespace 内のサービス構成に対する読み取り / 書き込みアクセス権があります。
    • Namespace Admin: プロジェクトの名前空間内のすべてのリソースを管理します。
  • GDC のエアギャップ ロールと権限の付与の詳細については、 アクセス権の付与と取り消しをご覧ください。

    制限事項

    Apigee on GDC のエアギャップには、次の制限が適用されます。

    • GDC エアギャップ上の Apigee には DNS サーバーが付属しておらず、回避策としてローカル DNS 解決を使用します。外部 DNS サーバーがある環境に GDC エアギャップ上の Apigee がデプロイされている場合は、ローカル DNS を構成する手順を、DNS サーバーで DNS エントリを構成する手順に置き換えます。
    • Apigee on GDC のエアギャップには、スタンドアロンの SMTP サーバーは含まれていません。SMTP サーバーはいつでも構成できます。これにより、Management Server と Management UI からのアカウント作成とパスワード リセットの送信メール通知を有効にできます。管理 API は、Apigee ユーザー アカウントの管理に使用できます。詳細については、Edge SMTP サーバーを構成するをご覧ください。
    • GDC のエアギャップ上の Apigee では、侵入検知と防止は実装されていません。Snort などの侵入防止システム(IPS)をインストールして構成し、悪意のあるアクティビティを検出して防止します。

    必要なファイルを入手する

    インストール ファイルを取得するには、まず接続されたノードを設定してから、ファイルをダウンロードする必要があります。

    接続されたノードを設定する

    接続されたノードは、インストール ファイルのダウンロードに使用する GDC 外の単一の VM です。この VM にはインターネット アクセスが必要で、インストール プロセスでのみ使用されます。

    接続されたノードには、次の容量と構成が必要です。

    • オペレーティング システム: Rocky Linux 8
    • マシンサイズ: 8 GB の RAM、2 個の vCPU コア、64 GB のローカル ディスク ストレージ
    • 接続:
      • 上り(内向き): 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 for Private Cloud のリリース バージョンです(例: 4.53.01)。
    3. 最新の Apigee Edge for Private Cloud 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 バックアップ ファイルを保存するストレージ バケットを設定します。

    Storage バケットを作成する

    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 クラスタでアップローダーが使用する Secret を作成します。
      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 オペレーターが Apigee Edge for Private Cloud ミラー リポジトリをホストするリポジトリ ノードを設定します。

    リポジトリ ノードを作成する

    リポジトリ ノードを作成するには:

    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 for Private Cloud のバージョンに置き換えます。

    Apigee ノードをデプロイする

    このステップでは、GDC オペレーターが Apigee API 管理ノードをデプロイします。

    Apigee ノードを作成する

    Apigee API 管理ノードを作成するには:

    1. apigee/helm/scripts/apigee_setup.shREPO_INTERNAL_IPREPO_USER_NAMEREPO_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.yamlapigee_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.shREPO_INTERNAL_IPREPO_USER_NAMEREPO_PASSWORD を目的の値に置き換えます。
    2. 次のように apigee/helm/values-cookie-air-gapped.yamlcontrol_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. 有効な Apigee Edge for Private Cloud ライセンス ファイルを含むライセンス ファイルを追加します。ファイル名は 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 for Private Cloud のバージョンです。
      • 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 でパスワードのリセットリンクを無効にする の手順に沿って操作します。

    Pod とサービスをデプロイする

    この手順では、アップローダ、リバース プロキシ、ロードバランサ、ロギングの Pod とサービスをデプロイします。

    Pod と Service をデプロイするには:

    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-proxy フォルダと apigee/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 ファイルで、アップローダ コンテナの root ユーザーの SSH-PASSWORD の値を更新します。
      RUN echo 'root:SSH_PASSWORD' | chpasswd
    8. ユーザー クラスタの認証情報を取得します。
      gdcloud clusters get-credentials USER_CLUSTER

      ここで、USER_CLUSTER はユーザー GKE クラスタの名前です。

    9. deploy スクリプトを実行して、Pod と Service をデプロイします。
      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.shSSH_PASSWORDrootUPLOADER_EXTERNAL_IP を更新します。
      sshpass -p SSH_PASSWORD scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null apigee-backup* root@UPLOADER_EXTERNAL_IP:/temp/

      ここで

      • SSH_PASSWORD は root ユーザーのパスワードです。
      • UPLOADER_EXTERNAL_IP は、前の手順で取得したアップローダ サービスの外部 IP アドレスです。

    2. apigee/helm/scripts/apigee_setup.shFLUENTBIT_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 組織をオンボーディングする

    この手順では、node1 で設定スクリプトを実行して、GDC オペレーターが 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 接続をテストする

    このステップでは、Management 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. [Proxy details] ページで、次の値を入力します。
      • プロキシタイプ: [ターゲットなし] を選択します。
      • プロキシ名: ok
      • Base path: /ok
      • ターゲット: http://APIGEE_ELB_EXTERNAL_IP:9001
    4. [Create] をクリックして API プロキシを作成します。
    5. /ok に HTTP リクエストを送信します。
      curl -i http://APIGEE_ELB_EXTERNAL_IP:9001/ok
    6. レスポンスが 200 OK であることを確認します。

    TLS を構成して HTTPS をテストする

    このステップでは、GDC オペレーターが API プロキシ、Edge UI、Management API の Transport Layer Security(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 にアクセスし、動作することを確認します。詳しくは、ガイドをご覧ください。

    Management API の TLS を構成する

    Management 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. 変更を反映させるために Management Server を再起動します。
      /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 にアクセスします。管理者ユーザー名とパスワードを入力して、認証情報が正しく構成されていることを確認します。

    次のステップ