呼叫僅限內部存取的 API Proxy

本頁面適用於 Apigee,但不適用於 Apigee Hybrid

查看 Apigee Edge 說明文件。

本文說明如何從在內部網路上執行的用戶端呼叫 API Proxy。如果 Apigee 已佈建為使用內部網路路由,這些步驟可用於測試您的設定。如果 Apigee 已配置下列任何網路路由設定,您可以按照本文件中的步驟操作:

佈建選項 網路選項 佈建步驟
付費訂閱 使用虛擬私有雲對等互連 內部轉送 (VPC)
內部轉送 (PSC)
即付即用 使用虛擬私有雲對等互連 內部轉送 (VPC)
內部轉送 (PSC)
評估 使用虛擬私有雲對等互連 設定路徑 (內部)
評估 未使用虛擬私有雲對等互連 內部轉送 (PSC)

另請參閱「網路選項」。

事前準備

請完成下列初步設定步驟:

  1. 如果您尚未初始化 Cloud SDK,請按照「初始化 gcloud CLI」一節的說明進行操作,或者確認您在「先決條件」中建立的 Google Cloud 專案,是 gcloud 的預設專案。
  2. 定義下列本機環境變數:

    export PROJECT_ID=YOUR_PROJECT_ID
    export AUTH="Authorization: Bearer $(gcloud auth print-access-token)"
    export SUBNET=NETWORK_NAME
    export INSTANCE_NAME=INSTANCE_NAME
    export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

    其中:

    • PROJECT_ID 是您在必要條件中建立的 Cloud 專案 ID。
    • AUTH 會使用不記名憑證定義 Authentication 標頭。您會在呼叫 Apigee API 時使用這個標頭。請注意,憑證會在一段時間後到期,屆時您只需使用相同的指令重新產生憑證即可。詳情請參閱 print-access-token 指令的參考頁面。
    • SUBNET 是佈建期間指定的子網路。例如:default
    • INSTANCE_NAME:新執行個體的名稱。例如:my-runtime-instance。名稱開頭必須為小寫英文字母,長度上限為 32 個字元,且只能包含小寫英文字母、數字和連字號。開頭或結尾不得為連字號,且長度至少須為兩個字元。
    • PROJECT_NUMBER 是您在必要條件中建立的雲端專案編號。這個範例會發出 gcloud 指令,為您取得專案編號。
  3. 從 Apigee 執行個體取得 location 屬性的值。這個值是執行個體所在的區域,例如 us-west1
    curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances
  4. 在執行個體地區中選取區域,然後將區域名稱放入變數。區域必須位於執行個體內。例如:
    export VM_ZONE="us-west1-b"

    如果您需要協助找出執行個體區域中的區域,可以使用這個 gcloud 指令,為已設定的執行階段區域傳回區域名稱。例如:

    VM_ZONE=$(gcloud compute zones list | grep "us-west1" | head -n 1 | awk '{print $1}')

建立 VM 並呼叫 API Proxy

接著,請使用 gcloud beta compute 指令,在 VPC 網路中建立新的 VM。VM 可做為橋樑,讓您將要求傳送至內部負載平衡器 IP。設定 VM 後,您可以呼叫已部署的 API Proxy:

  1. 以下範例會使用一些常見選項建立新的 VM,並使用先前定義的環境變數做為輸入內容。
    gcloud beta compute --project=$PROJECT_ID \
      instances create $INSTANCE_NAME \
      --zone=$VM_ZONE \
      --machine-type=e2-micro \
      --subnet=$SUBNET \
      --network-tier=PREMIUM \
      --no-restart-on-failure \
      --maintenance-policy=TERMINATE \
      --preemptible \
      --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --scopes=https://www.googleapis.com/auth/cloud-platform \
      --tags=http-server,https-server \
      --image=debian-12-bookworm-v20240701 \
      --image-project=debian-cloud \
      --boot-disk-size=10GB \
      --boot-disk-type=pd-standard \
      --boot-disk-device-name=$INSTANCE_NAME \
      --no-shielded-secure-boot \
      --shielded-vtpm \
      --shielded-integrity-monitoring \
      --reservation-affinity=any
  2. 開啟與您剛建立的新 VM 的安全連線。

    gcloud compute ssh $INSTANCE_NAME --zone=$VM_ZONE --project=$PROJECT_ID
  3. 在 VM 殼層中安裝 jq 公用程式。後續步驟會使用這個值:
    sudo apt-get update -y
    sudo apt-get install -y jq
    
  4. 在 VM shell 中建立下列環境變數,方便複製/貼上 API 代理要求:
    export AUTH="Authorization: Bearer $(gcloud auth print-access-token)"
    export PROJECT_ID=YOUR_PROJECT_ID
    export ENV_GROUP_HOSTNAME=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups -s | jq -r '.environmentGroups[0].hostnames[0]')
    
  5. 確認變數設定正確無誤:
    echo $AUTH
    echo $PROJECT_ID
    echo $ENV_GROUP_HOSTNAME
  6. 呼叫 API Proxy。請選取下方與您在 Apigee 佈建期間所設定的路由方式相符的選項。

    使用虛擬私有雲對等互連的安裝選項

    • (TLS 選項 #1) 如果您在專案中設定了內部負載平衡器 (ILB),請按照「內部路由 (VPC)」一節所述,使用該 ILB 的 IP 呼叫 Proxy。這個選項會使用您控管的 CA 憑證,這些憑證是在建立內部負載平衡器時建立:
      1. 請參閱「 使用 VM 執行個體群組後端設定內部 HTTP(S) 負載平衡」一文,瞭解如何取得專案中 ILB 的 IP 位址。
      2. 呼叫 API Proxy:
        curl -H "Host: $ENV_GROUP_HOSTNAME" \
          https://INTERNAL_LOAD_BALANCER_IP/PROXY_BASEPATH
    • (TLS 選項 #2) 使用預設的完整網域名稱,將其解析為 Apigee 專案中的內部負載平衡器。使用這個選項時,TLS 會使用內部建立的 Apigee 自行簽署憑證。您無法控制這些憑證。
      1. 取得 Apigee 專案中內部負載平衡器的 IP:
        export INTERNAL_LOAD_BALANCER_IP=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances -s | jq -r '.instances[0].host')
      2. 使用下列指令,提取建立組織時建立的 CA 憑證:
        curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID | jq -r .caCertificate | base64 -d > cacert.crt
      3. 將要求傳送至已部署的 API Proxy,其中 example.$PROJECT_ID.apigee.internal 是解析至內部負載平衡器的內部預設完整網域名稱。
        curl -is -H "Host: $ENV_GROUP_HOSTNAME" \
          https://example.$PROJECT_ID.apigee.internal/PROXY_BASEPATH \
          --cacert cacert.crt \
          --resolve example.$PROJECT_ID.apigee.internal:443:$INTERNAL_LOAD_BALANCER_IP
    • (非 TLS 選項) 如果您遇到 SSL/TLS 憑證驗證問題,可以使用 -k (或 --insecure) 標記搭配 curl 指令。這麼做可略過憑證驗證,讓連線繼續進行。請注意,雖然通訊內容仍會加密,但由於伺服器的真實性未經過驗證,因此這個選項可能會影響網路安全性。
      1. 取得 Apigee 專案中內部負載平衡器的 IP:
        export INTERNAL_LOAD_BALANCER_IP=$(curl -H "$AUTH" https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances -s | jq -r '.instances[0].host')
      2. 呼叫 API Proxy:
        curl -i -k \
          -H "Host: $ENV_GROUP_HOSTNAME" \
          https://$INTERNAL_LOAD_BALANCER_IP/PROXY_BASEPATH
    • (服務端點選項) 如果您使用 PSC 佈建付費或評估機構,並選擇服務端點路由選項:
      1. 取得服務端點的 IP。如需查詢端點 IP,請參閱「列出端點」。
      2. 呼叫 API Proxy:
        curl -i -k \
           -H "Host: $ENV_GROUP_HOSTNAME" \
           https://SERVICE_ENDPOINT_IP/PROXY_BASEPATH

        例如:

        curl -H "Host: $ENV_GROUP_HOSTNAME" https://10.138.0.2/helloworld -k

    不使用非虛擬私有雲對等互連的安裝選項

    • (服務端點選項) 如果您使用 PSC 佈建付費或評估機構,並選擇服務端點路由選項:
      1. 取得服務端點的 IP。如需查詢端點 IP,請參閱「列出端點」。
      2. 呼叫 API Proxy:
        curl -i -k \
            -H "Host: $ENV_GROUP_HOSTNAME" \
            https://SERVICE_ENDPOINT_IP/PROXY_BASEPATH

        例如:

        curl -H "Host: $ENV_GROUP_HOSTNAME" https://10.138.0.2/helloworld -k

    如果在這個程序中遇到錯誤,請確認您建立並在指令中使用的所有環境變數都具有有效值。另請參閱疑難排解

    後續步驟

    請嘗試建立 Proxy,然後進行部署,或是參閱 Apigee 教學課程,瞭解 Apigee 的功能,例如防範突發的流量尖峰取得要求/回應流程的詳細資料

    (進階) 如果您打算將這項設定轉換為正式設定,可以為新叢集和相關 Cloud 服務設定安全邊界。VPC Service Controls 可讓您這麼做。