本指南說明如何在無網路連線的 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,運算子必須完成下列步驟:
- 取得 Apigee Edge for Private Cloud 的安裝檔案。
- 設定儲存空間 bucket。
- 設定存放區節點。
- 部署 Apigee 節點。
- 設定控制節點。
- 設定 Ansible。
- 安裝 Apigee 元件。
- 部署 Pod 和服務。
- 更新上傳者和 Fluent Bit 轉送者 IP。
- 加入 Apigee 機構。
- 測試 HTTP 連線。
- 設定 TLS 並測試 HTTPS。
事前準備
開始安裝程序前,請務必完成下列步驟:
- 如果沒有 GDC 專案,請建立一個,以用於安裝作業。詳情請參閱「建立專案」一文。
- 在已連線至 GDC 的工作站或貴機構的持續部署環境中,下載、安裝及設定
gdcloud
CLI。 - 取得使用
gdcloud
CLI 和kubectl
API 時所需的憑證。如需相關步驟,請參閱「驗證帳戶以取得存取權」。 - 確認您從 Apigee 帳戶管理員收到的 Apigee 使用者名稱和密碼。
- 確認 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
:管理專案命名空間中的所有資源。
- 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,以偵測及防範惡意活動。
- 作業系統:Rocky Linux 8
- 機器大小:8 GB RAM;2 個 vCPU 核心;64 GB 本機磁碟儲存空間
- 連線能力:
- 輸入:TCP 22 (SSH)
- 輸出:網際網路
- 請查看 Apigee Edge for Private Cloud 版本資訊,瞭解 GDC 支援的最新正式版本 (如 Edge for Private Cloud 欄中所述)。
- 下載 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。
- 將最新的 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。
- 安裝 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 版本。
- 在連結的節點上執行設定指令碼:
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
- 透過 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 位址。
- 使用機構管理員叢集進行驗證:
gdcloud auth login --login-config-cert WEB_TLS_CERT
gdcloud clusters get-credentials ORG_ADMIN_CLUSTER
其中:
- WEB_TLS_CERT 是網頁傳輸層安全標準 (TLS) 憑證的路徑。
- ORG_ADMIN_CLUSTER 是機構管理員 GKE 叢集的名稱。
- 設定專案和 bucket 環境變數:
export PROJECT=PROJECT
export BUCKET=BUCKET_NAME
其中:
- PROJECT 是 GDC 專案名稱。
- BUCKET_NAME 是您要建立的 bucket 名稱,用於儲存 Apigee Edge for Private Cloud 備份檔案。
- 套用 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 天的值區。
- 在專案中建立服務帳戶:
gdcloud iam service-accounts create $BUCKET-sa \ --project=$PROJECT
- 建立角色和角色繫結,產生用於存取 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
- 從密鑰取得存取金鑰 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==
- 在使用者 GKE 叢集中建立上傳工具使用的密鑰:
- 使用使用者 GKE 叢集進行驗證:
gdcloud clusters get-credentials USER_CLUSTER
其中 USER_CLUSTER 是使用者 GKE 叢集的名稱。
- 套用密鑰設定:
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 是在上一個步驟中取得的存取金鑰。
- 使用使用者 GKE 叢集進行驗證:
- 取得值區的儲存端點、完整網域名稱 (FQDN) 和區域:
- 使用機構管理員叢集進行驗證:
gdcloud clusters get-credentials ORG_ADMIN_CLUSTER
其中 ORG_ADMIN_CLUSTER 是機構管理員 GKE 叢集的名稱。
- 取得值區的儲存端點、完整網域名稱 (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
- 使用機構管理員叢集進行驗證:
- 更新
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 完整網域名稱。
- 按照下列方式更新
apigee/helm_user_cluster/values-cookie-air-gapped.yaml
:repo_node: enabled: true apigee_node: enabled: false control_node: enabled: false
確認
repo_node
已啟用,且apigee_node
和control_node
均已停用。這些節點會在後續步驟中部署。 - 取得機構管理員叢集的憑證:
gdcloud clusters get-credentials ORG_ADMIN_CLUSTER
其中 ORG_ADMIN_CLUSTER 是機構管理員 GKE 叢集的名稱。
- 建立 Python 虛擬環境:
python3 -m venv venv / source venv/bin/activate
- 執行部署指令碼,建立存放區節點:
python apigee/solution_deploy.py gdc-air-gapped
- 為存放區節點設定 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 金鑰的檔案名稱。
- 取得存放區節點的外部 IP 位址:
kubectl get virtualmachineexternalaccess -n $PROJECT $NODE -ojsonpath='{.status.ingressIP}'
- 取得存放區節點的內部 IP 位址:
kubectl get virtualmachines.virtualmachine.gdc.goog -n $PROJECT $NODE -ojsonpath='{.status.network.interfaces[1].ipAddresses[0]}'
apigee-4.53.01
apigee-nginx.tar
postgresql14.tar
fluentbit.tar
ansible-rpms.tar
apigee-repos.tar
- 將 SSH 私密金鑰檔案複製到存放區節點:
scp -i SSH_PRIVATE_KEY_FILE ~/apigee-files/* admin@REPO_EXTERNAL_IP:/tmp
其中:
- SSH_PRIVATE_KEY_FILE 是包含私密 SSH 金鑰的檔案名稱。
- REPO_EXTERNAL_IP 是在上一個步驟中取得的存放區節點外部 IP 位址。
- 將包含 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 位址。
- 將
apigee/scripts/repo_setup.sh
複製到存放區節點。 - 在指令碼中,將 REPO_USER 和 REPO_PASSWORD 替換為鏡像存放區的所需使用者名稱和密碼。
- 執行指令碼:
chmod a+x repo_setup.sh
./repo_setup.sh
如果遇到
No such file or directory
錯誤,請重新執行指令碼。 - 從存放區節點在本機測試與鏡像存放區的連線。
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/helm/scripts/apigee_setup.sh
中的REPO_INTERNAL_IP
、REPO_USER_NAME
和REPO_PASSWORD
替換為所需值。 - 將值匯出為環境變數:
export REPO_IP=REPO_INTERNAL_IP
export REPO_USER=REPO_USER_NAME
export REPO_PASSWORD=REPO_PASSWORD
- 在
apigee/helm/values-cookie-air-gapped.yaml
中啟用apigee_node
,如下所示:apigee_node: enabled: true
- 執行部署指令碼,建立 Apigee 節點:
source venv/bin/activate
python apigee/solution_deploy.py gdc-air-gapped
- 使用機構管理員叢集進行驗證:
gdcloud clusters get-credentials ORG_ADMIN_CLUSTER
其中 ORG_ADMIN_CLUSTER 是機構管理員 GKE 叢集的名稱。
- 為每個節點建立 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 金鑰的檔案名稱。
- 取得 Apigee 節點的外部 IP 位址:
for i in 1 2 3 4 5; do kubectl get virtualmachineexternalaccess -n $PROJECT node$i -ojsonpath='{.status.ingressIP}' echo done
- 取得 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
- (選用) 檢查開機指令碼是否在 Apigee 節點上順利執行:
- 透過 SSH 連線至節點,然後執行下列指令:
sudo journalctl -u cloud-final -f
- 尋找類似下列內容的記錄:
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
- 透過 SSH 連線至節點,然後執行下列指令:
- 將
apigee/helm/scripts/control_setup.sh
中的REPO_INTERNAL_IP
、REPO_USER_NAME
和REPO_PASSWORD
替換為所需值。 - 在
apigee/helm/values-cookie-air-gapped.yaml
中啟用control_node
,如下所示:control_node: enabled: true
- 執行部署指令碼,建立控制節點:
source venv/bin/activate
python apigee/solution_deploy.py gdc-air-gapped
- 設定控制節點的 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
- 取得控制節點的外部 IP 位址:
kubectl get virtualmachineexternalaccess -n $PROJECT control -ojsonpath='{.status.ingressIP}'
- 取得控制節點的內部 IP:
kubectl get virtualmachines.virtualmachine.GDC.goog -n $PROJECT control -ojsonpath='{.status.network.interfaces[1].ipAddresses[0]}'
- 透過 SSH 連線至控制節點,並設定 Ansible 環境:
cd /home/admin
cp -r /tmp/apigee-repos .
cd apigee-repos/ansible-opdk-accelerator/setup
- 以本機檔案取代遠端 Git 存放區:
sed -i 's/https:\/\/github.com\/carlosfrias/git+file:\/\/\/home\/admin\/apigee-repos/g' requirements.yml
sed -i 's/\.git$//g' requirements.yml
- Install Ansible requirements:
sudo chown -R admin /home/admin/apigee-repos
ansible-galaxy install -r requirements.yml -f
- 更新設定配置:
- 編輯
main.yml
檔案:vi ~/apigee-repos/ansible-opdk-accelerator/setup/roles/apigee-opdk-setup-ansible-controller/tasks/main.yml
- 移除需要 GitHub 存取權的工作:
- 透過 Git SSH 簽出設定存放區
- 透過 Git HTTPS 結帳設定存放區
- 執行設定應對手冊:
cd ~/apigee-repos/ansible-opdk-accelerator/setup
ansible-playbook setup.yml
- 編輯
- 將 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 位址。
- 建立 Ansible 目錄設定檔:
- 將
apigee/scripts/ansible/prod.cfg
檔案的內容複製到prod.cfg
檔案:vi ~/.ansible/multi-planet-configurations/prod.cfg
- 建立
edge-dc1
資料夾,並將apigee/scripts/ansible/edge-dc1
檔案的內容複製到edge-dc1
檔案:mkdir ~/.ansible/inventory/prod
vi ~/.ansible/inventory/prod/edge-dc1
- 將
- 在
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 位址。
- 使用下列值設定
~/.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 管理伺服器的密碼。
- 新增有效的 Apigee Edge for Private Cloud 授權檔案。檔案名稱必須為
license.txt
。 - 將
~/.apigee-secure/license.txt
檔案的內容複製到您剛才建立的license.txt
。 - 在
~/.apigee/custom-properties.yml
檔案中設定下列值:- opdk_version: 'OPDK_VERSION'
- apigee_repo_url: 'APIGEE_REPO_URL'
其中:
- OPDK_VERSION 是要安裝的 Apigee Edge Private Cloud 版本。
- APIGEE_REPO_URL 是 Apigee 存放區的網址。
- 將設定檔匯出為環境變數:
export ANSIBLE_CONFIG=~/.ansible/multi-planet-configurations/prod.cfg
- 以本機檔案取代遠端 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
- 安裝 Ansible 需求條件:
ansible-galaxy install -r requirements.yml -f
- 修補 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
- 將
install.yml
檔案的內容替換成apigee/scripts/ansible/install.yml
中的內容。 - 執行應對手冊,安裝 Apigee 元件:
ansible-playbook install.yml
- 在 Edge UI 中停用使用者的密碼重設連結。Apigee on GDC 氣隙隔離不含 SMTP 伺服器。按照在 Edge UI 中停用密碼重設連結 的步驟操作。
- 按照「
建立 Harbor 登錄執行個體」中的操作說明,在 GDC 專案
dev-apigee
中建立 Harbor 執行個體。 - 按照「
建立 Harbor 專案」中的操作說明,建立名為
apigee
的 Harbor 專案。 - 按照「設定存取權控管」的說明,為 Harbor 專案設定存取權控管。
- 按照「登入 Docker 和 Helm」一文中的操作說明,設定 Docker 驗證。
- 更新
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 位址。
- 將 SSL 憑證檔案 (
server.crt
) 和金鑰檔案 (server.key
) 放在apigee/mgmt-server-proxy
和apigee/router-proxy
資料夾中,以設定 HTTPS。如要產生自行簽署的憑證,請使用下列指令:
openssl req -newkey rsa:4096 -x509 -nodes -keyout server.key -new -out server.crt -subj "/CN=*.apigeetest.com" -sha256 -days 365
- 在
apigee/uploader/Dockerfile
檔案中,更新上傳器容器中根使用者的SSH-PASSWORD
值:RUN echo 'root:SSH_PASSWORD' | chpasswd
- 取得使用者叢集的憑證:
gdcloud clusters get-credentials USER_CLUSTER
其中 USER_CLUSTER 是使用者 GKE 叢集的名稱。
- 執行部署指令碼,部署 Pod 和服務:
source venv/bin/activate
python apigee/solution_deploy_user_cluster.py gdc-air-gapped
- 取得服務的外部 IP 位址:
kubectl get svc -n $PROJECT_ID
- 更新
SSH_PASSWORD
、root
和UPLOADER_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 位址。
- 更新
apigee/helm/scripts/apigee_setup.sh
中的「FLUENTBIT_EXTERNAL_IP
」:export FLUENTBIT_EXTERNAL_IP=FLUENTBIT_EXTERNAL_IP
- 停止 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
- 重新部署 Helm 資訊套件:
python apigee/solution_deploy.py gdc-air-gapped
- 啟動 VM:
for i in 1 2 3 4 5; do GDCloud compute instances start node$i --project $PROJECT done
- 如圖所示,更新
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 位址。
- 在 node1 上執行指令碼,加入機構:
chmod a+x apigee_org_setup.sh
./apigee_org_setup.sh
- 取得
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 的端點。
- APIGEE_ELB_EXTERNAL_IP 是您在先前步驟中取得的
apigee-elb
服務外部 IP 位址。 - ORG_NAME 是 Apigee 機構的名稱。
- ENV_NAME 是 Apigee 環境的名稱。
- 登入 Edge 使用者介面。
- 在「API Proxies」(API Proxy) 頁面上,按一下「Create」(建立) 建立新的 API Proxy。
- 在「Proxy details」(Proxy 詳細資料) 頁面中,輸入下列值:
- Proxy 類型:選取「無目標」。
- Proxy 名稱:
ok
- 基本路徑:
/ok
- 目標:
http://APIGEE_ELB_EXTERNAL_IP:9001
如要進一步瞭解如何授予 GDC 氣隙角色和權限,請參閱「 授予及撤銷存取權」。
限制
Apigee on GDC air-gapped 有以下限制:
取得所需檔案
如要取得安裝檔案,請先設定已連線的節點,然後下載檔案。
設定已連結的節點
連線的節點是 GDC 外部的單一 VM,您會使用這個 VM 下載安裝檔案。這個 VM 必須連上網際網路,且僅用於安裝程序。
連線節點必須具備下列容量和設定:
如要建立連線節點,請按照「 建立及啟動 VM 執行個體」一文中的操作說明進行。建立 VM 後,請按照「連線至 Linux VM」一文中的操作說明進行。 連線至 VM。如需支援的作業系統清單,請參閱「 GDC 支援的作業系統」。
下載安裝檔案
如要下載安裝檔案:
設定儲存空間值區
在這個步驟中,GDC 運算子會在 GDC 專案中設定儲存空間 bucket,用來儲存 Apigee Edge for Private Cloud 備份檔案。
建立儲存空間值區
如要在 GDC 專案中建立儲存空間 bucket,請按照下列步驟操作:
設定 bucket 存取權
如要設定儲存空間 bucket 的存取權,請按照下列步驟操作:
設定存放區節點
在這個步驟中,GDC 運算子會設定存放區節點,用來代管 Apigee Edge for Private Cloud 鏡像存放區。
建立存放區節點
如要建立存放區節點:
設定存放區節點存取權
如要設定存放區節點的存取權:
上傳安裝檔
在這個步驟中,GDC 運算子會將下列檔案的最新版本上傳至存放區節點:
如要上傳安裝檔案:
設定鏡像存放區
如要設定鏡像存放區:
部署 Apigee 節點
在這個步驟中,GDC 運算子會部署 Apigee API 管理節點。
建立 Apigee 節點
如要建立 Apigee API 管理節點,請按照下列步驟操作:
設定 Apigee 節點存取權
設定 Apigee API 管理節點的存取權:
設定控制節點
在這個步驟中,GDC 運算子會設定控制節點,以管理 Apigee 安裝作業。
建立控制節點
如要建立控制節點:
設定控制節點存取權
如要設定控制節點存取權,請按照下列步驟操作:
設定 Ansible
如要設定 Ansible 環境,請按照下列步驟操作:
安裝 Apigee 元件
在這個步驟中,GDC 運算子會使用 Ansible 安裝 Apigee 元件。
如要安裝 Apigee 元件:
部署 Pod 和服務
在這個步驟中,您將部署上傳器、反向 Proxy、負載平衡器,以及記錄 Pod 和服務。
如要部署 Pod 和服務:
更新上傳者和 Fluent Bit 轉送者 IP
在這個步驟中,您將更新備份和 Apigee 設定指令碼中的上傳器和 Fluent Bit 轉送器 IP。
更新啟動指令碼需要重新啟動 Apigee 節點。如要重新啟動節點,請按照下列步驟操作:
加入 Apigee 機構
在這個步驟中,GDC 運算子會在 node1 上執行設定指令碼,將 Apigee 機構加入。
如要啟用 Apigee 機構,請按照下列步驟操作:
測試 HTTP 連線
在本步驟中,您將測試 Management API 和 API Proxy 的 HTTP 連線。
如要測試 HTTP 連線,請按照下列步驟操作:
測試 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"
其中:
測試 API Proxy
如要測試 API Proxy,請按照下列步驟操作:
/ok
:
curl -i http://APIGEE_ELB_EXTERNAL_IP:9001/ok
200 OK
。設定 TLS 並測試 HTTPS
在這個步驟中,GDC 運算子會為 API Proxy、Edge UI 和 Management API 設定傳輸層安全標準 (TLS)。
設定 API Proxy 的 TLS
- 按照「建立金鑰儲存區/信任儲存區和別名」一文中的步驟,使用下列值建立自行簽署的憑證:
- KeyStore:myTestKeystore
- KeyAlias:myKeyAlias
- 常用名稱:apigeetest.com
- 發出 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 環境名稱。
- APIGEE_ELB_EXTERNAL_IP 是您在先前步驟中取得的
- 使用安全虛擬主機建立 API Proxy。
- 在路由器上,設定虛擬主機的 DNS 解析:
echo '127.0.0.1 api.apigeetest.com' | sudo tee -a /etc/hosts
- 將 HTTPS 要求傳送至端點,確認虛擬主機在本機運作正常:
curl https://api.apigeetest.com:9005/ok -v -k
- 設定端點的 DNS 解析:
echo 'APIGEE_ELB_EXTERNAL_IP apigeetest.com' | sudo tee -a /etc/hosts
其中 APIGEE_ELB_EXTERNAL_IP 是您在先前步驟中取得的
apigee-elb
服務外部 IP 位址。 - 在網路瀏覽器中前往
https://apigeetest.com/ok
,確認該網址可正常運作。
設定 Edge UI 的 TLS
如要為 Edge UI 設定 TLS,請按照下列步驟操作:
- 從 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
- 將 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 位址。
- 透過 SSH 連線至 node1,然後將金鑰儲存區檔案移至 Apigee 資料夾:
sudo mv keystore.jks /opt/apigee/customer/application/
- 建立 SSL 設定檔:
sudo vi /tmp/sslConfigFile
- 更新
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
- 使用設定檔設定 SSL:
sudo chown apigee:apigee /tmp/sslConfigFile
/opt/apigee/apigee-service/bin/apigee-service edge-ui configure-ssl -f /tmp/sslConfigFile
- 設定 Edge UI 的 DNS 解析:
echo 'APIGEE_ELB_EXTERNAL_IP ui.apigeetest.com' | sudo tee -a /etc/hosts
其中 APIGEE_ELB_EXTERNAL_IP 是您在先前步驟中取得的
apigee-elb
服務外部 IP 位址。 - 在網路瀏覽器中存取
https://ui.apigeetest.com:9443
,確認該網頁可正常運作。詳情請參閱指南。
為 Management API 設定 TLS
如要為 Management API 設定 TLS,請按照下列步驟操作:
- 設定 KeyStore 檔案的擁有者 (使用與 Edge UI 相同的擁有者):
sudo chown apigee:apigee /opt/apigee/customer/application/keystore.jks
- 建立屬性檔案:
sudo vi /opt/apigee/customer/application/management-server.properties
- 重新啟動管理伺服器,讓變更生效:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- 確認 HTTPS 在本機運作正常:
curl -u "opdk@apigee.com:Apigee123!" "https://localhost:8443/v1/users" -k
- 在瀏覽器中,從用戶端存取 https://apigeetest.com:8443/v1/users。 輸入管理員使用者名稱和密碼,確認憑證設定正確無誤。
將 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