在 Google Distributed Cloud 實體隔離方案上安裝 Apigee

本指南說明如何在無網路連線的 Google Distributed Cloud (GDC) 環境中,安裝及部署 Apigee Edge for Private Cloud 和 API Proxy。GDC 氣隙隔離產品 (包括 Apigee Edge for Private Cloud) 不需要連線至 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 核心 磁碟儲存空間
存放區節點 8 GB 2 個 vCPU 核心 64 GB
控制節點 8 GB 2 個 vCPU 核心 64 GB
Apigee API 管理節點 1、2 和 3 16GB RAM 8 個 vCPU 核心 670 GB
Apigee API 管理節點 4 和 5 16GB RAM 8 個 vCPU 核心 500 GB - 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 Secret。
    • Service Configuration Admin:可讀取及寫入專案命名空間中的服務設定。
    • Namespace Admin:管理專案命名空間中的所有資源。
  • 如要進一步瞭解如何授予 GDC 氣隙角色和權限,請參閱「 授予及撤銷存取權」。

    限制

    Apigee on GDC air-gapped 有以下限制:

    • Apigee on GDC air-gapped 不含 DNS 伺服器,並使用本機 DNS 解析做為因應措施。 如果 Apigee on GDC air-gapped 是部署在有外部 DNS 伺服器的環境中,請將設定本機 DNS 的步驟,替換為在 DNS 伺服器中設定 DNS 項目。
    • GDC 氣隙式 Apigee 不含獨立的 SMTP 伺服器。您可以隨時設定 SMTP 伺服器,透過管理伺服器和管理使用者介面,啟用帳戶建立和密碼重設的外寄電子郵件通知。管理 API 仍可用於管理 Apigee 使用者帳戶。詳情請參閱「設定 Edge SMTP 伺服器」。
    • Apigee on GDC air-gapped 不會實作入侵偵測與防範功能。安裝並設定入侵防禦系統 (IPS),例如 Snort,以偵測及防範惡意活動。

    取得所需檔案

    如要取得安裝檔案,請先設定已連線的節點,然後下載檔案。

    設定已連結的節點

    連線的節點是 GDC 外部的單一 VM,您會使用這個 VM 下載安裝檔案。這個 VM 必須連上網際網路,且僅用於安裝程序。

    連線節點必須具備下列容量和設定:

    • 作業系統:Rocky Linux 8
    • 機器大小:8 GB RAM;2 個 vCPU 核心;64 GB 本機磁碟儲存空間
    • 連線能力:
      • 輸入:TCP 22 (SSH)
      • 輸出:網際網路

    如要建立連線節點,請按照「 建立及啟動 VM 執行個體」一文中的操作說明進行。建立 VM 後,請按照「連線至 Linux VM」一文中的操作說明進行。 連線至 VM。如需支援的作業系統清單,請參閱「 GDC 支援的作業系統」。

    下載安裝檔案

    如要下載安裝檔案:

    1. 請查看 Apigee Edge for Private Cloud 版本資訊,瞭解 GDC 支援的最新正式版本 (如 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 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 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 專案中設定儲存空間 bucket,用來儲存 Apigee Edge for Private Cloud 備份檔案。

    建立儲存空間值區

    如要在 GDC 專案中建立儲存空間 bucket,請按照下列步驟操作:

    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. 設定專案和 bucket 環境變數:
      export PROJECT=PROJECT
      export BUCKET=BUCKET_NAME

      其中:

      • PROJECT 是 GDC 專案名稱。
      • BUCKET_NAME 是您要建立的 bucket 名稱,用於儲存 Apigee Edge for Private Cloud 備份檔案。
    3. 套用 bucket 設定:
      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 天的值區。

    設定 bucket 存取權

    如要設定儲存空間 bucket 的存取權,請按照下列步驟操作:

    1. 在專案中建立服務帳戶:
      gdcloud iam service-accounts create $BUCKET-sa \
          --project=$PROJECT
    2. 建立角色和角色繫結,產生用於存取 bucket 的密鑰:
      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 端點。
      • BUCKET_FQDN 是在上一個步驟中取得的 bucket 完整網域名稱。

    設定存放區節點

    在這個步驟中,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.sh 中的 REPO_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.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_IPREPO_USER_NAMEREPO_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 是包含控制節點安全殼層私密金鑰的檔案名稱。
      • 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 Private Cloud 版本。
      • APIGEE_REPO_URL 是 Apigee 存放區的網址。

    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 中停用使用者的密碼重設連結。Apigee on GDC 氣隙隔離不含 SMTP 伺服器。按照Edge UI 中停用密碼重設連結 的步驟操作。

    部署 Pod 和服務

    在這個步驟中,您將部署上傳器、反向 Proxy、負載平衡器,以及記錄 Pod 和服務。

    如要部署 Pod 和服務:

    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 節點 1 外部 IP 位址。
      • APIGEE_NODE2_EXTERNAL_IP 是您在先前步驟中取得的 Apigee 節點 2 外部 IP 位址。
      • APIGEE_NODE3_EXTERNAL_IP 是您在先前步驟中取得的 Apigee 節點 3 外部 IP 位址。

    6. 將 SSL 憑證檔案 (server.crt) 和金鑰檔案 (server.key) 放在 apigee/mgmt-server-proxyapigee/router-proxy 資料夾中,以設定 HTTPS。

      如要產生自行簽署的憑證,請使用下列指令:

      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. 執行部署指令碼,部署 Pod 和服務:
      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. 更新 SSH_PASSWORDrootUPLOADER_EXTERNAL_IP 中的 apigee/helm/scripts/backup_setup.sh
      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 節點 1 內部 IP 位址。
      • APIGEE_NODE2_EXTERNAL_IP 是您在先前步驟中取得的 Apigee 節點 2 外部 IP 位址。
      • APIGEE_NODE3_EXTERNAL_IP 是您在先前步驟中取得的 Apigee 節點 3 外部 IP 位址。

    2. node1 上執行指令碼,加入機構:
      chmod a+x apigee_org_setup.sh
      ./apigee_org_setup.sh

    測試 HTTP 連線

    在本步驟中,您將測試 Management API 和 API Proxy 的 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 Proxy 的端點。

    測試 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 Proxy

    如要測試 API Proxy,請按照下列步驟操作:

    1. 登入 Edge 使用者介面
    2. 在「API Proxies」(API Proxy) 頁面上,按一下「Create」(建立) 建立新的 API Proxy。
    3. 在「Proxy details」(Proxy 詳細資料) 頁面中,輸入下列值:
      • Proxy 類型:選取「無目標」
      • Proxy 名稱: ok
      • 基本路徑: /ok
      • 目標: http://APIGEE_ELB_EXTERNAL_IP:9001
    4. 按一下「建立」,建立 API Proxy。
    5. 傳送 HTTP 要求至 /ok
      curl -i http://APIGEE_ELB_EXTERNAL_IP:9001/ok
    6. 確認回應為 200 OK

    設定 TLS 並測試 HTTPS

    在這個步驟中,GDC 運算子會為 API Proxy、Edge UI 和 Management API 設定傳輸層安全標準 (TLS)。

    設定 API Proxy 的 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 Proxy。
    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 憑證檔案和金鑰檔案產生 KeyStore 檔案:
      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. 將 KeyStore 檔案放在 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 節點 1 外部 IP 位址。

    3. 透過 SSH 連線至 node1,然後將金鑰儲存區檔案移至 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. 設定 KeyStore 檔案的擁有者 (使用與 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。 輸入管理員使用者名稱和密碼,確認憑證設定正確無誤。

    後續步驟