本頁內容適用於 Apigee,但不適用於 Apigee Hybrid。
查看
Apigee Edge 說明文件。
本文說明如何透過指令列 使用 VPC 對等互連安裝及設定 Apigee。這些步驟適用於付費機構的訂閱制和隨用隨付計費模式,無論是否啟用資料落地功能都適用。
步驟摘要
佈建步驟如下:
- 步驟 1:定義環境變數:
設定
gcloud並定義環境變數。 Google Cloud CLI 可管理驗證作業、本機設定、開發人員工作流程,以及與 Google Cloud API 之間的互動。 - 步驟 2:啟用 API:Apigee 要求您啟用多個 Google Cloud API。
- 步驟 3:建立 Apigee 服務身分:服務帳戶會由 Google Cloud 用戶端程式庫用來向 Google Cloud API 進行驗證。
- 步驟 4:設定 Service Networking:Service Networking 會使用虛擬私有雲網路對等互連設定,自動在您的網路與 Apigee 之間建立私人連線。
- 步驟 5:建立機構:Apigee 機構 (有時也稱為機構) 是 Apigee 中的頂層容器。包括所有環境和環境群組、使用者、API Proxy 和相關資源。
- 步驟 6:建立執行階段執行個體:執行個體或執行階段會儲存專案和相關服務,並為服務提供面向使用者的端點。
- 步驟 7:建立環境:API Proxy 必須部署至環境,並新增至環境群組,才能透過網路存取該 Proxy 公開的 API。
- 步驟 8:設定轉送:允許外部存取或僅限內部存取您的 API。
- 步驟 9:部署範例 Proxy:部署及呼叫 API Proxy,測試佈建作業。
步驟 1:定義環境變數
設定 gcloud 並定義環境變數,以供後續步驟使用:
- 請務必先完成「 事前準備」一文列出的設定需求。
- 您必須安裝 Cloud SDK。如需安裝,請參閱「 安裝 Cloud SDK」。
- 如「初始化 gcloud CLI」一節所述,初始化 Cloud SDK,或確保您在「必要條件」中建立的 Google Cloud 專案是
gcloud的預設專案。 - 在指令終端機中定義下列環境變數。
選取與所需機構類型對應的分頁:
沒有資料落地或有
資料落地:
沒有資料落地機制
AUTH="$(gcloud auth print-access-token)"
PROJECT_ID="YOUR_PROJECT_ID"PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")RUNTIME_LOCATION="YOUR_RUNTIME_LOCATION"ANALYTICS_REGION="YOUR_ANALYTICS_REGION"BILLING_TYPE="YOUR_BILLING_TYPE"其中:
-
AUTH 會使用不記名權杖定義
Authentication標頭。呼叫 Apigee API 時,您會使用這個標頭。請注意,權杖會在一段時間後過期,屆時只要使用相同指令重新產生即可。詳情請參閱 print-access-token 指令的參考頁面。 - PROJECT_ID 是您在必要條件中建立的 Cloud 專案 ID。
- PROJECT_NUMBER 是您在必要條件中建立的 Cloud 專案編號。
-
RUNTIME_LOCATION 是您稍後建立的 Apigee 執行個體所在位置。如需可用執行階段位置清單,請參閱 Apigee 位置。
-
ANALYTICS_REGION 是指 Apigee 數據分析資料的實際儲存位置。如需可用的 Apigee API Analytics 區域清單,請參閱「 Apigee 地理位置」。
RUNTIME_LOCATION 和 ANALYTICS_REGION 可以是相同區域,但並非必要。
-
BILLING_TYPE 是您建立的機構帳單類型。有效的值包括:
PAYG,適用於Pay-as-you-go機構。SUBSCRIPTION適用於訂閱機構。
資料落地
AUTH="$(gcloud auth print-access-token)"
PROJECT_ID="YOUR_PROJECT_ID"PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")RUNTIME_LOCATION="YOUR_RUNTIME_LOCATION"CONTROL_PLANE_LOCATION="YOUR_CONTROL_PLANE_LOCATION"CONSUMER_DATA_REGION="YOUR_CONSUMER_DATA_REGION"BILLING_TYPE="YOUR_BILLING_TYPE"其中:
-
AUTH 會使用不記名權杖定義
Authentication標頭。呼叫 Apigee API 時,您會使用這個標頭。請注意,權杖會在一段時間後過期,屆時只要使用相同指令重新產生即可。詳情請參閱 print-access-token 指令的參考頁面。 - PROJECT_ID 是您在必要條件中建立的 Cloud 專案 ID。
- PROJECT_NUMBER 是您在必要條件中建立的 Cloud 專案編號。
-
RUNTIME_LOCATION 是您稍後建立的 Apigee 執行個體所在位置。如需可用執行階段位置清單,請參閱 Apigee 位置。
執行階段位置必須位於控制層位置內。 - CONTROL_PLANE_LOCATION 是 Apigee 控制層資料的儲存實體位置。 如需可用的控制層位置清單,請參閱 Apigee 位置。
- CONSUMER_DATA_REGION 是控制層區域的子區域。您必須同時指定 CONTROL_PLANE_LOCATION 和 CONSUMER_DATA_REGION。 如需可用的消費者資料區域清單,請參閱 Apigee 位置。
-
BILLING_TYPE 是您建立的機構帳單類型。有效的值包括:
PAYG,適用於Pay-as-you-go機構。SUBSCRIPTION適用於訂閱機構。
-
AUTH 會使用不記名權杖定義
- (選用) 透過回顯剛才設定的值,檢查您的工作。請注意,如要在指令中使用變數,請在變數名稱前加上美元符號 ($)。
沒有資料落地機制
echo $AUTH
echo $PROJECT_IDecho $PROJECT_NUMBERecho $RUNTIME_LOCATIONecho $ANALYTICS_REGIONecho $BILLING_TYPEecho指令的回應內容應如下所示:YOUR_TOKEN my-cloud-project 1234567890 us-west1 us-west1 SUBSCRIPTION
資料落地
echo $AUTH
echo $PROJECT_IDecho $PROJECT_NUMBERecho $RUNTIME_LOCATIONecho $CONTROL_PLANE_LOCATIONecho $CONSUMER_DATA_REGIONecho $BILLING_TYPEecho指令的回應內容應如下所示:YOUR_TOKEN my-cloud-project 1234567890 us-west1 us us-west1 SUBSCRIPTION
步驟 2:啟用 API
-
Apigee 需要啟用多個 Google Cloud API。執行下列
services enable指令來啟用這些 API:gcloud services enable apigee.googleapis.com \ servicenetworking.googleapis.com \ apihub.googleapis.com \ compute.googleapis.com \ cloudkms.googleapis.com --project=$PROJECT_ID (選用) 如要檢查工作,請使用
services list指令顯示所有已啟用的 API:gcloud services list
回應會顯示所有已啟用的服務,包括您剛啟用的 API。
步驟 3:建立 Apigee 服務身分
-
建立 Apigee 服務身分:
gcloud beta services identity create --service=apigee.googleapis.com \ --project=$PROJECT_ID 確認代理程式是否已成功建立。回覆應顯示代理程式名稱,格式如下:
service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com。例如:Service identity created: service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
步驟 4:設定服務網路
在這個步驟中,您會將一對 IP 位址範圍 (一個 /22 和一個 /28 CIDR 範圍) 分配給 Apigee,並在您的網路和 Apigee 的網路之間執行虛擬私有雲對等互連。每個 Apigee 執行個體都需要不重疊的 /22 和 /28 CIDR 範圍。系統會從這個 CIDR 範圍內指派 IP 位址給 Apigee 執行階段層。因此,請務必為 Apigee 保留該範圍,不要讓虛擬私有雲網路中的其他應用程式使用。如需更多資訊和重要注意事項,請參閱「瞭解對等互連範圍」。
請注意,您要為一個 Apigee 執行個體建立足夠的網路 IP 範圍。如果您打算建立其他 Apigee 執行個體,則必須為每個執行個體重複執行這個步驟。執行個體之間無法共用範圍。另請參閱「將 Apigee 擴展至多個區域」。
- 建立下列環境變數:
RANGE_NAME=YOUR_RANGE_NAME
NETWORK_NAME=YOUR_NETWORK_NAME其中:
- RANGE_NAME 是您要建立的 IP 位址範圍名稱。
範圍名稱不限。例如:
google-svcs - 「NETWORK_NAME」NETWORK_NAME是應保留位址的網路資源名稱。
Google 會為每個新專案建立預設網路 (名為
default),因此您可以直接使用該網路。不過,Google 建議您不要將預設網路用於測試以外的任何用途。
- RANGE_NAME 是您要建立的 IP 位址範圍名稱。
範圍名稱不限。例如:
- 建立 CIDR 長度為 /22 的網路 IP 範圍:
gcloud compute addresses create $RANGE_NAME \ --global \ --prefix-length=22 \ --description="Peering range for Apigee services" \ --network=$NETWORK_NAME \ --purpose=VPC_PEERING \ --addresses=OPTIONAL_ADDRESSES \ --project=$PROJECT_ID
其中
--addresses可讓您視需要指定位址範圍。例如,如要分配 CIDR 區塊192.168.0.0/22,請將位址指定為192.168.0.0,並將前置字串長度指定為22。另請參閱 建立 IP 配置。如果您未提供
--addresses參數,gcloud 會為您選取可用的位址範圍。成功後,
gcloud會傳回下列內容:Created [https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/addresses/google-svcs].
建立 IP 位址範圍後,這些位址就會與專案建立關聯,直到您釋出為止。
- 確認網路 IP 範圍的 CIDR 長度為 /22:
gcloud compute addresses list --global --project=$PROJECT_IDgcloud compute addresses describe $RANGE_NAME --global --project=$PROJECT_ID - 建立 CIDR 長度為 /28 的網路 IP 範圍。這個範圍為必要項目,Apigee 會用於疑難排解,且無法自訂或變更。
gcloud compute addresses create google-managed-services-support-1 \ --global \ --prefix-length=28 \ --description="Peering range for supporting Apigee services" \ --network=$NETWORK_NAME \ --purpose=VPC_PEERING \ --addresses=OPTIONAL_ADDRESSES \ --project=$PROJECT_ID
其中
--addresses可讓您視需要指定位址範圍。例如,如要分配 CIDR 區塊192.168.0.0/28,請將位址指定為192.168.0.0,並將前置字串長度指定為28。另請參閱 建立 IP 配置。如果您未提供
--addresses參數,gcloud 會為您選取可用的位址範圍。 - 確認網路 IP 範圍的 CIDR 長度為 /28:
gcloud compute addresses list --global --project=$PROJECT_IDgcloud compute addresses describe google-managed-services-support-1 --global \ --project=$PROJECT_ID - 使用下列指令將服務連線至網路:
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --network=$NETWORK_NAME \ --ranges=$RANGE_NAME,google-managed-services-support-1 \ --project=$PROJECT_ID
這項作業可能需要幾分鐘才能完成。成功後,
gcloud會傳回下列內容,其中 OPERATION_ID 是 LRO 的 UUID。Operation "operations/OPERATION_ID" finished successfully.
- 幾分鐘後,請確認 VPC 對等互連是否成功:
gcloud services vpc-peerings list \ --network=$NETWORK_NAME \ --service=servicenetworking.googleapis.com \ --project=$PROJECT_ID
Apigee 會在您的網路與 Google 服務之間建立連線;具體來說,Apigee 會透過 VPC 對等互連,將您的專案連線至 Service Networking API。Apigee 也會將 IP 位址與專案建立關聯。
步驟 5:建立機構
如要建立機構,您必須先建立執行階段資料庫加密金鑰環和金鑰 (請參閱步驟 1),以及控制平面加密金鑰環和金鑰 (請參閱步驟 2,如果您使用 資料居住地)。這些 Cloud KMS 金鑰會加密儲存在執行階段和控制層位置並複製的資料。Apigee 會使用這些實體加密應用程式資料 (例如 KVM、快取和用戶端密鑰),然後儲存在資料庫中。詳情請參閱「 關於 Apigee 加密金鑰」。
-
建立執行階段資料庫加密金鑰環和金鑰。
-
定義執行階段資料庫加密環和金鑰位置的環境變數。這有助於確保建立時的一致性,並讓您更輕鬆地按照文件操作。
這個值是儲存執行階段資料庫加密金鑰環和金鑰的實體位置。
- 定義資料庫金鑰環和金鑰名稱的環境變數。
金鑰環名稱不得與貴機構重複。如果您建立第二個或後續區域,名稱不得與其他金鑰環的名稱相同。
RUNTIMEDB_KEY_RING_NAME=YOUR_DB_KEY_RING_NAME
RUNTIMEDB_KEY_NAME=YOUR_DB_KEY_NAME - (選用) 透過回顯剛才設定的值,檢查您的工作。請注意,如要在指令中使用變數,請在變數名稱前加上美元符號 ($)。
echo $RUNTIMEDBKEY_LOCATION
echo $RUNTIMEDB_KEY_RING_NAMEecho $RUNTIMEDB_KEY_NAME - 建立新的金鑰環:
gcloud kms keyrings create $RUNTIMEDB_KEY_RING_NAME \ --location $RUNTIMEDBKEY_LOCATION --project $PROJECT_IDApigee 執行階段資料庫加密金鑰的位置支援所有支援 Cloud HSM 和 Cloud EKM 的 Cloud KMS 位置。
建立金鑰:
gcloud kms keys create $RUNTIMEDB_KEY_NAME \ --keyring $RUNTIMEDB_KEY_RING_NAME \ --location $RUNTIMEDBKEY_LOCATION \ --purpose "encryption" \ --project $PROJECT_ID這項指令會建立金鑰,並將其新增至金鑰環。
取得金鑰 ID:
gcloud kms keys list \ --location=$RUNTIMEDBKEY_LOCATION \ --keyring=$RUNTIMEDB_KEY_RING_NAME \ --project=$PROJECT_ID
金鑰 ID 的語法如下 (類似於檔案路徑):
projects/PROJECT_ID/locations/RUNTIMEDBKEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME
將金鑰 ID 放在環境變數中。您將在後續指令中使用此變數:
RUNTIMEDB_KEY_ID=YOUR_RUNTIMEDB_KEY_ID
授予 Apigee 服務代理人使用新金鑰的權限:
gcloud kms keys add-iam-policy-binding $RUNTIMEDB_KEY_NAME \ --location $RUNTIMEDBKEY_LOCATION \ --keyring $RUNTIMEDB_KEY_RING_NAME \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project $PROJECT_ID
這項指令會將金鑰繫結至 Apigee 服務代理。
成功完成這項要求後,
gcloud會傳回類似下列內容的回應:Updated IAM policy for key [runtime]. bindings: - members: - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com role: roles/cloudkms.cryptoKeyEncrypterDecrypter etag: BwWqgEuCuwk= version: 1
如果收到類似下方的錯誤訊息:
INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.
請務必使用專案編號,而非專案名稱,做為服務帳戶電子郵件地址。
-
- 如果您使用 資料駐留,請建立控制平面加密金鑰環和金鑰。如果未使用資料落地機制,請前往步驟 3。
- 定義控制層資料庫加密環和金鑰位置的環境變數:
CONTROL_PLANE_LOCATION=YOUR_CONTROL_PLANE_LOCATION
CONSUMER_DATA_REGION=YOUR_CONSUMER_DATA_REGION其中:
定義控制層資料庫金鑰環和金鑰名稱的環境變數。
金鑰環名稱不得與貴機構重複。
CONTROL_PLANE_KEY_RING_NAME=YOUR_CONTROL_PLANE_KEY_RING_NAME
CONTROL_PLANE_KEY_NAME=YOUR_CONTROL_PLANE_KEY_NAMECONSUMER_DATA_KEY_RING_NAME=YOUR_CONSUMER_DATA_KEY_RING_NAMECONSUMER_DATA_KEY_NAME=YOUR_CONSUMER_DATA_REGION_KEY_NAME其中:
- 建立新的金鑰環:
gcloud kms keyrings create $CONTROL_PLANE_KEY_RING_NAME \ --location $CONTROL_PLANE_LOCATION \ --project $PROJECT_ID
gcloud kms keyrings create $CONSUMER_DATA_KEY_RING_NAME \ --location $CONSUMER_DATA_REGION \ --project $PROJECT_ID
- 建立金鑰:
gcloud kms keys create $CONTROL_PLANE_KEY_NAME \ --keyring $CONTROL_PLANE_KEY_RING_NAME \ --location $CONTROL_PLANE_LOCATION \ --purpose "encryption" \ --project $PROJECT_ID
gcloud kms keys create $CONSUMER_DATA_KEY_NAME \ --keyring $CONSUMER_DATA_KEY_RING_NAME \ --location $CONSUMER_DATA_REGION \ --purpose "encryption" \ --project $PROJECT_ID
這項指令會建立金鑰,並將其新增至金鑰環。
取得金鑰 ID:
gcloud kms keys list \ --location=$CONTROL_PLANE_LOCATION \ --keyring=$CONTROL_PLANE_KEY_RING_NAME \ --project=$PROJECT_ID
gcloud kms keys list \ --location=$CONSUMER_DATA_REGION \ --keyring=$CONSUMER_DATA_KEY_RING_NAME \ --project=$PROJECT_ID
金鑰 ID 的語法如下 (類似於檔案路徑):
projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME
projects/PROJECT_ID/locations/CONSUMER_DATA_REGION/keyRings/CONSUMER_DATA_KEY_RING_NAME/cryptoKeys/CONSUMER_DATA_KEY_NAME
- 將金鑰 ID 放在環境變數中。您將在後續指令中使用此變數:
CONTROL_PLANE_KEY_ID=YOUR_CONTROL_PLANE_KEY_ID
CONSUMER_DATA_KEY_ID=YOUR_CONSUMER_DATA_KEY_ID
- 授予 Apigee 服務代理人使用新金鑰的權限:
gcloud kms keys add-iam-policy-binding $CONTROL_PLANE_KEY_NAME \ --location $CONTROL_PLANE_LOCATION \ --keyring $CONTROL_PLANE_KEY_RING_NAME \ --member "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project $PROJECT_ID
gcloud kms keys add-iam-policy-binding $CONSUMER_DATA_KEY_NAME \ --location $CONSUMER_DATA_REGION \ --keyring $CONSUMER_DATA_KEY_RING_NAME \ --member "serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com" \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project $PROJECT_ID
這項指令會將金鑰繫結至 Apigee 服務代理。成功完成這項要求後,gcloud 會傳回類似下列內容的回應:
Updated IAM policy for key [runtime]. bindings: - members: - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com role: roles/cloudkms.cryptoKeyEncrypterDecrypter etag: BwWqgEuCuwk= version: 1
如果收到類似下方的錯誤訊息:
INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.
請務必在服務帳戶電子郵件地址中使用專案編號,而非專案名稱。
-
如要建立機構,請將下列要求傳送至 Apigee 機構 API:
沒有資料落地機制
curl "https://apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID" \ -H "Authorization: Bearer $AUTH" \ -X POST \ -H "Content-Type:application/json" \ -d '{ "name":"'"$PROJECT_ID"'", "analyticsRegion":"'"$ANALYTICS_REGION"'", "runtimeType":"CLOUD", "billingType":"'"$BILLING_TYPE"'", "authorizedNetwork":"'"$NETWORK_NAME"'", "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'" }'
其中:
-d定義要求的資料酬載。這項酬載必須包含下列項目:name:用來識別新機構。名稱必須與專案 ID 相同。analyticsRegion:指定儲存 Analytics 資料的實體位置。runtimeType:將這個值設為CLOUD。billingType:指定所建立機構的帳單類型。authorizedNetwork:識別您在「設定服務網路」中指定的對等互連網路。runtimeDatabaseEncryptionKeyName:您在上一個步驟中建立的應用程式加密金鑰 ID。請注意,ID 的結構類似檔案路徑。例如:projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
資料落地
curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations?parent=projects/$PROJECT_ID" \ -H "Authorization: Bearer $AUTH" \ -X POST \ -H "Content-Type:application/json" \ -d '{ "name":"'"$PROJECT_ID"'", "runtimeType":"CLOUD", "billingType":"'"$BILLING_TYPE"'", "controlPlaneEncryptionKeyName":"'"$CONTROL_PLANE_KEY_ID"'", "apiConsumerDataLocation":"'"$CONSUMER_DATA_REGION"'", "apiConsumerDataEncryptionKeyName":"'"$CONSUMER_DATA_KEY_ID"'", "authorizedNetwork":"'"$NETWORK_NAME"'", "runtimeDatabaseEncryptionKeyName":"'"$RUNTIMEDB_KEY_ID"'" }'其中:
-d定義要求的資料酬載。這個酬載必須包含下列項目:name:用來識別新機構。名稱必須與專案 ID 相同。runtimeType:將這個值設為CLOUD。billingType:指定所建立機構的帳單類型。controlPlaneEncryptionKeyName:是控制平面金鑰 ID。apiConsumerDataLocation:您也必須指定子區域,供內部資源使用。如需支援的值,請參閱「 資料落地區域」。apiConsumerDataEncryptionKeyName:消費者資料區域金鑰 ID。authorizedNetwork:識別您在「設定服務網路」中指定的對等互連網路。runtimeDatabaseEncryptionKeyName:您在上一個步驟中建立的應用程式加密金鑰 ID。請注意,ID 的結構類似於檔案路徑。例如:
projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
執行這項指令後,Apigee 會啟動長時間執行的作業,可能需要幾分鐘才能完成。
如果發生錯誤,請檢查資料酬載中的變數值是否以半形引號括住。請務必在 $PROJECT_ID 變數前後加上雙引號,如以下範例所示:
"'"$PROJECT_ID"'"
如果要求值使用純字串 (而非環境變數),您可以在單引號括住的酬載字串中,以雙引號括住這些值,如下列範例所示:
'{ "name":"my-gcp-project", ... }' - 請稍候片刻。
- 如要查看建立要求狀態,您可以將
GET要求傳送至 Apigee List organizations API,如下列範例所示:沒有資料落地機制
curl -H "Authorization: Bearer $AUTH" "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID"
資料落地
curl -H "Authorization: Bearer $AUTH" "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID"
如果看到這則回應,表示機構尚未建立完成:
{ "error": { "code": 403, "message": "Permission denied on resource \"organizations/apigee-docs-m\" (or it may not exist)", "status": "PERMISSION_DENIED" } }如果 Apigee 成功建立新機構,您會收到類似下列內容的回應:
沒有資料落地機制
{ "name": "my-cloud-project", "createdAt": "1592586495539", "lastModifiedAt": "1592586495539", "environments": [], "properties": { "property": [ { "name": "features.hybrid.enabled", "value": "true" }, { "name": "features.mart.connect.enabled", "value": "true" } ] }, "analyticsRegion": "us-west1", "runtimeType": "CLOUD", "subscriptionType": "PAID", "caCertificate": "YOUR_CERTIFICATE", "authorizedNetwork": "my-network", "projectId": "my-cloud-project" }資料落地
{ "name": "my-cloud-project", "createdAt": "1681412783749", "lastModifiedAt": "1681412783749", "environments": [ "test-env" ], "properties": { "property": [ { "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" } ] }, "authorizedNetwork": "default", "runtimeType": "CLOUD", "subscriptionType": "PAID", "caCertificate": "YOUR_CERTIFICATE", "runtimeDatabaseEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name", "projectId": "my-cloud-project", "state": "ACTIVE", "billingType": "PAYG", "addonsConfig": { "advancedApiOpsConfig": {}, "integrationConfig": {}, "monetizationConfig": {}, "connectorsPlatformConfig": {} }, "apiConsumerDataEncryptionKeyName": "projects/my-cloud-project/locations/us-central1/keyRings/my-key-ring/cryptoKeys/my-key-name", "controlPlaneEncryptionKeyName": "projects/my-cloud-project/locations/us/keyRings/my-key-ring/cryptoKeys/my-key-name", "apiConsumerDataLocation": "us-central1", "apigeeProjectId": "i0c2a37e80f9850ab-tp" }如果 Apigee 傳回 HTTP 錯誤回應,請參閱「 建立 Apigee 機構」。
請按照下列步驟建立控制層加密金鑰環和金鑰。
另請參閱: CMEK 疑難排解。
步驟 6:建立執行階段執行個體
執行階段例項會儲存 Apigee 專案和相關服務,並為服務提供面向使用者的端點。如要建立新的執行階段例項,請按照下列步驟操作:
-
確認 Apigee 已完成建立機構。您已在「建立 Apigee 機構」中提交建立新機構的要求,但請務必確認要求已完成,再繼續操作。
如要執行這項操作,請將下列要求傳送至機構 API:
沒有資料落地機制
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID"資料落地
curl -i -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID"如果機構存在 (且您有適當的權限可查看),Apigee 會回覆機構的詳細資料。如果 Apigee 回應錯誤,請稍候幾分鐘,然後再次傳送要求。
- 與先前為資料庫建立加密金鑰的作業類似,現在您需要建立
Cloud KMS 金鑰,用於加密伺服器端的資料。如要開始使用,請定義下列環境變數:
INSTANCE_NAME=YOUR_INSTANCE_NAME
RUNTIME_LOCATION=YOUR_RUNTIME_LOCATIONDISK_KEY_RING_NAME=YOUR_DISK_KEY_RING_NAMEDISK_KEY_NAME=YOUR_DISK_KEY_NAME - INSTANCE_NAME:新執行個體的名稱。例如:
my-runtime-instance。名稱開頭須為小寫英文字母,最多包含 32 個字元,且只能使用小寫英文字母、數字和連字號。開頭或結尾不得為連字號,且長度至少須為兩個半形字元。 - RUNTIME_LOCATION 是叢集代管的實體位置。
有效值為 Compute Engine 允許的任何位置。(請參閱可用地區和區域)。本範例使用
us-west1。 - DISK_KEY_RING_NAME 是磁碟加密金鑰環的名稱。
- DISK_KEY_NAME 是磁碟加密金鑰的名稱。
- 建立磁碟加密金鑰:
- 建立新的磁碟金鑰環:
gcloud kms keyrings create $DISK_KEY_RING_NAME \ --location $RUNTIME_LOCATION \ --project $PROJECT_ID
磁碟金鑰環必須設為與執行個體相同的位置。每個執行個體和金鑰環都應有自己的位置。
- 建立新的磁碟金鑰:
gcloud kms keys create $DISK_KEY_NAME \ --keyring $DISK_KEY_RING_NAME \ --location $RUNTIME_LOCATION \ --purpose "encryption" \ --project $PROJECT_ID
金鑰可透過金鑰路徑參照。您可以使用下列指令取得金鑰路徑:
gcloud kms keys list \ --location=$RUNTIME_LOCATION \ --keyring=$DISK_KEY_RING_NAME \ --project=$PROJECT_ID
金鑰路徑看起來會與下列內容相似:
projects/PROJECT_ID/locations/RUNTIME_LOCATION/keyRings/my-disk-key-ring/cryptoKeys/my-disk-key
將金鑰路徑放在環境變數中。您將在後續指令中使用這個變數:
DISK_KEY_ID=YOUR_DISK_KEY_ID
例如:
DISK_KEY_ID=projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key授予 Apigee 服務代理人使用新金鑰的權限:
gcloud kms keys add-iam-policy-binding $DISK_KEY_NAME \ --location $RUNTIME_LOCATION \ --keyring $DISK_KEY_RING_NAME \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project $PROJECT_ID
這項指令會將金鑰繫結至 Apigee 服務代理。
詳情請參閱「關於 Apigee 加密金鑰」。
- 建立新的磁碟金鑰環:
- 將要求傳送至 Apigee Instances API,為專案建立新的執行階段執行個體:
POST沒有資料落地機制
curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances" \ -X POST -H "Authorization: Bearer $AUTH" \ -H "Content-Type:application/json" \ -d '{ "name":"'"$INSTANCE_NAME"'", "location":"'"$RUNTIME_LOCATION"'", "diskEncryptionKeyName":"'"$DISK_KEY_ID"'", "consumerAcceptList":["'"$PROJECT_ID"'"] }'
資料落地
curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances" \ -X POST -H "Authorization: Bearer $AUTH" \ -H "Content-Type:application/json" \ -d '{ "name":"'"$INSTANCE_NAME"'", "location":"'"$RUNTIME_LOCATION"'", "diskEncryptionKeyName":"'"$DISK_KEY_ID"'", "consumerAcceptList":["'"$PROJECT_ID"'"] }'其中:
consumerAcceptList(選用) 指定可私下連線至 Apigee VPC 服務附件的 Google Cloud 專案 ID 清單。服務連結是搭配 Google Cloud Private Service Connect 使用的實體,可讓服務供應商 (在本例中為 Apigee) 向消費者 (在本例中為您擁有的 Cloud 專案) 公開服務。 根據預設,我們會使用已與 Apigee 機構相關聯的 Cloud 專案。例如:"consumerAcceptList": ["project1", "project2", "project3"]請注意,您也可以在執行個體 UI 中設定及變更接受的專案清單。詳情請參閱「 管理執行個體」。
這項要求最多可能需要 20 分鐘才能完成,因為 Apigee 必須建立及啟動新的 Kubernetes 叢集、在該叢集上安裝 Apigee 資源,並設定負載平衡。
如果 Apigee 傳回錯誤,請參閱「 建立新執行個體」。
如要檢查執行個體建立要求狀態,請執行下列指令。狀態為「ACTIVE」時,即可繼續執行下一個步驟。
沒有資料落地機制
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME"資料落地
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME"
其中:
步驟 7:建立環境
如要建立環境並透過指令列將其附加至執行階段,請執行下列操作:
定義本節中使用的環境變數。
如果是隨用隨付環境,請建立下列變數:
ENVIRONMENT_NAME="YOUR_ENV_NAME"
ENVIRONMENT_TYPE="YOUR_ENV_TYPE"ENV_GROUP_NAME="YOUR_ENV_GROUP_NAME"ENV_GROUP_HOSTNAME="YOUR_ENV_GROUP_HOSTNAME"其中:
ENVIRONMENT_NAME是字串名稱。例如:testENVIRONMENT_TYPE是這個環境的環境類型,僅適用於Pay-as-you-go使用者,且必須指定下列其中一個值:BASE、INTERMEDIATE或COMPREHENSIVE。其他使用者應省略環境類型。ENV_GROUP_NAME是字串名稱。例如:test-groupENV_GROUP_HOSTNAME是有效的網域主機名稱。例如:foo.example.com
- 使用 Environments API 建立新環境。
如為新的隨用隨付環境,請使用下列指令:
沒有資料落地機制
curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \ -H "Authorization: Bearer $AUTH" \ -X POST \ -H "Content-Type:application/json" \ -d '{ "name":"'"$ENVIRONMENT_NAME"'", "type":"'"$ENVIRONMENT_TYPE"'" }'資料落地
curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments" \ -H "Authorization: Bearer $AUTH" \ -X POST \ -H "Content-Type:application/json" \ -d '{ "name":"'"$ENVIRONMENT_NAME"'", "type":"'"$ENVIRONMENT_TYPE"'" }'Apigee 會建立新環境。
- 繼續操作前,請呼叫 Environments API,確認 Apigee 已建立新環境:
沒有資料落地機制
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments"資料落地
curl -i -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments"Apigee 會傳回可用環境的清單。舉例來說,如果您的環境名稱是
test,Apigee 會傳回下列內容:[ "test" ]
提示:如要檢查特定環境的狀態,可以傳送類似下列的指令: -
沒有資料落地:
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME" -
資料落地:
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME"
Apigee 只會回覆該環境的詳細資料,例如:
{ "name": "my-cloud-project", "createdAt": "1592589683002", "lastModifiedAt": "1592589683002", "state": "ACTIVE" } -
- 將新環境連結至執行階段執行個體:
沒有資料落地機制
curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments" \ -X POST -H "Authorization: Bearer $AUTH" \ -H "content-type:application/json" \ -d '{ "environment":"'"$ENVIRONMENT_NAME"'" }'資料落地
curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments" \ -X POST -H "Authorization: Bearer $AUTH" \ -H "content-type:application/json" \ -d '{ "environment":"'"$ENVIRONMENT_NAME"'" }'這項作業可能需要幾分鐘才能完成。如要檢查附件是否已完成,請執行下列指令:
沒有資料落地機制
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments"
資料落地
curl -i -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances/$INSTANCE_NAME/attachments"
看到類似下列內容的輸出內容時,即可前往下一個步驟:
{ "attachments": [ { "name": "ed628782-c893-4095-b71c-f4731805290a", "environment": "test", "createdAt": "1641604447542" } ] } - 使用下列指令建立新的環境群組。詳情請參閱「關於環境和環境群組」:
沒有資料落地機制
curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups" \ -H "Authorization: Bearer $AUTH" \ -X POST \ -H "Content-Type:application/json" \ -d '{ "name": "'"$ENV_GROUP_NAME"'", "hostnames":["'"$ENV_GROUP_HOSTNAME"'"] }'資料落地
curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups" \ -H "Authorization: Bearer $AUTH" \ -X POST \ -H "Content-Type:application/json" \ -d '{ "name": "'"$ENV_GROUP_NAME"'", "hostnames":["'"$ENV_GROUP_HOSTNAME"'"] }'提示:將環境附加至群組,只會讓該環境中的 Proxy 可透過群組中的主機名稱轉送。 - 等待作業完成,您可以使用類似下列的請求,查看新群組的狀態:
沒有資料落地機制
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME"資料落地
curl -i -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME" - 使用下列指令,將新環境連結至新環境群組:
沒有資料落地機制
curl "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments" \ -X POST \ -H "Authorization: Bearer $AUTH" \ -H "content-type:application/json" \ -d '{ "environment":"'"$ENVIRONMENT_NAME"'" }'資料落地
curl "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments" \ -X POST \ -H "Authorization: Bearer $AUTH" \ -H "content-type:application/json" \ -d '{ "environment":"'"$ENVIRONMENT_NAME"'" }' - 如要查看作業狀態,請呼叫下列 API:
沒有資料落地機制
curl -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments"資料落地
curl -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups/$ENV_GROUP_NAME/attachments"
步驟 8:設定轉送
在這個步驟中,您將設定用戶端應用程式與 Apigee 的通訊方式。用戶端到 Apigee 的流量也稱為「北向」流量。北向設定選項包括: 前往要使用的設定選項,然後按照該選項的步驟操作:
| 存取權類型 | 設定和部署程序說明 |
|---|---|
| 內部 (透過虛擬私有雲對等互連) |
只允許內部存取 API Proxy。 您必須在網路中建立新的 VM,並連線至該 VM。您可以使用新的 VM,將要求傳送至 Apigee API Proxy。 |
| 外部 (含 MIG) |
允許外部存取 API Proxy。 使用代管執行個體群組 (MIG),將全域負載平衡器後端服務的 API 流量傳送至 Apigee。完成這項設定後,Apigee 只能連線至對等互連的虛擬私有雲。完成這項設定後,您就能從任何啟用網路的機器傳送 Apigee API Proxy 要求。 |
| 內部與 PSC (新) |
使用 Private Service Connect (PSC),只允許從任何 Google Cloud 專案內部存取 API Proxy。 PSC 可在服務供應商 (Apigee) 和服務消費者 (對等互連的虛擬私有雲專案,和/或您控管的一或多個其他 Cloud 專案) 之間建立私人連線。使用這種方法時,要求會通過服務端點或區域內部負載平衡器,傳送至單一附加點 (稱為服務附件)。完成這項設定後,內部用戶端就能從任何啟用網路的機器傳送 Apigee API Proxy 要求。 |
| 外部 (含 PSC) (新) |
使用 Private Service Connect (PSC) 允許外部存取 API Proxy。 使用 Private Service Connect (PSC) 在服務供應商 (Apigee) 和服務消費者 (對等互連的 VPC 專案和/或您控管的一或多個其他 Cloud 專案) 之間啟用私人連線。使用這種方法時,要求會通過全域外部負載平衡器或區域外部負載平衡器,傳送至單一連結點 (稱為「服務連結」)。完成這項設定後,您就能從任何啟用網路的機器傳送 Apigee API Proxy 要求。 |
下方的操作說明將介紹這些路由方法。
內部路徑轉送 (虛擬私有雲)
如要將內部用戶端的流量轉送至 Apigee,您可以選擇是否使用 TLS 終止:
- 傳輸層安全標準 (TLS) 選項:如要從啟用 TLS 的內部用戶端發出 API Proxy 呼叫,有兩種做法:
- (選項 1) 設定內部負載平衡器 (ILB):
- 在專案中建立代管執行個體群組 (MIG)。如要建立 MIG,請按照「External routing (MIG)」(外部路徑 (MIG)) 分頁中的步驟 8a、8b 和 8c 操作。
- 建立及設定內部 HTTPS(S) 負載平衡器 (ILB),並將您建立的 MIG 附加至 ILB 的後端服務,如「
使用 VM 執行個體群組後端設定內部 HTTP(S) 負載平衡」一文所述。透過 ILB 設定,您可以完全控管 ILB 使用的 CA 憑證。
注意:設定 ILB 時,請務必指定 HTTPS做為通訊協定,並提供 SSL 憑證,讓負載平衡器與 Apigee 後端通訊。 - 前往「 呼叫僅限內部存取的 API Proxy」測試設定。
- (選項 2) 使用內部預設完整網域名稱和 Apigee 執行個體的內部負載平衡器 IP。這個案例僅建議用於測試,不適用於正式環境。在本例中,系統會使用 Apigee 建立的自行簽署憑證,搭配 Apigee 的內部負載平衡器,且您無法變更這些憑證。請參閱「 呼叫僅限內部存取的 API Proxy」。
- (選項 1) 設定內部負載平衡器 (ILB):
- 非 TLS 選項:如果您不需要 TLS 終止,可以略過 TLS 憑證驗證,叫用 API Proxy。舉例來說,
curl指令列工具的-k選項會停用憑證驗證,但 TLS 通訊協定在連線期間仍會保持啟用狀態。請注意,系統不支援透過通訊埠 80 上的純 HTTP 存取 Apigee Ingress,這與 Apigee Hybrid 類似。請參閱「 呼叫僅限內部存取的 API Proxy」。
外部轉送 (MIG)
本節說明如何設定路由,允許外部存取 API Proxy,並使用代管執行個體群組 (MIG),將來自全域負載平衡器後端服務的 API 流量傳送至 Apigee。您必須先完成這項操作,才能從外部用戶端將要求傳送至 Apigee 執行階段例項。
一般程序如下:
步驟 8a:為虛擬私有雲網路的子網路啟用 Private Google Access
步驟 8b:設定環境變數
步驟 8c:建立受管理執行個體群組
步驟 8d:為負載平衡器建立 SSL 憑證和金鑰
步驟 8e:建立全域負載平衡器
步驟 8f:取得保留的 IP 位址並建立防火牆規則
以下各節將說明這些步驟。
步驟 8a:為虛擬私有雲網路的子網路啟用 Private Google Access
如要為虛擬私有雲網路的子網路啟用 Private Google Access,請按照「啟用 Private Google Access」一文中的步驟操作。
步驟 8b:設定環境變數
本節的操作說明會使用環境變數,參照重複使用的字串。建議您先設定這些項目,再繼續操作:
MIG_NAME=apigee-mig-MIG_NAME # You can choose a different name if you likeVPC_NAME=default # If you are using a shared VPC, use the shared VPC nameVPC_SUBNET=default # Private Google Access must be enabled for this subnetREGION=RUNTIME_REGION # The same region as your Apigee runtime instanceAPIGEE_ENDPOINT=APIGEE_INSTANCE_IP# See the tip below for details on getting this IP address value
在剩餘程序中,您會多次使用這些變數。如要設定多個區域,請建立變數,並為每個區域指定值。
-
沒有資料落地:
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances" -
資料落地:
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
Apigee 會回覆執行個體的詳細資料,例如:
{
"instances": [
{
"name": "my-runtime-instance",
"location": "us-west1",
"host": "10.16.0.2",
"port": "443"
},
...
]
}您可以將執行個體 IP 位址指派給 $APIGEE_ENDPOINT 環境變數,這個位址就是 host 欄位的值。在本範例中,這個值為 10.16.0.2。
在多區域安裝中,API 呼叫會傳回每個區域位置的執行個體詳細資料。在這種情況下,請按照下一個章節的步驟,為每個地點建立個別的代管執行個體群組 (MIG)。
步驟 8c:建立代管執行個體群組
在這個步驟中,您會建立及設定代管執行個體群組 (MIG)。在後續步驟中,您會將 MIG 新增至後端服務,並附加至全域負載平衡器。如要將 API 流量從全域負載平衡器的後端服務傳送至 Apigee,必須使用 MIG。
建立 MIG:
- 執行下列指令,建立執行個體範本。
gcloud compute instance-templates create $MIG_NAME \ --project $PROJECT_ID \ --region $REGION \ --network $VPC_NAME \ --subnet $VPC_SUBNET \ --tags=https-server,apigee-mig-proxy,gke-apigee-proxy \ --machine-type e2-medium --image-family debian-12 \ --image-project debian-cloud --boot-disk-size 20GB \ --no-address \ --metadata ENDPOINT=$APIGEE_ENDPOINT,startup-script-url=gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh
如您從這項指令中看到,機器類型為
e2-medium。這些 VM 執行 Debian 12,並有 20 GB 的磁碟。startup-script.sh指令碼會設定 MIG,將負載平衡器的連入流量轉送至 Apigee 執行個體。 - 執行下列指令來建立代管執行個體群組:
gcloud compute instance-groups managed create $MIG_NAME \ --project $PROJECT_ID --base-instance-name apigee-mig \ --size 2 --template $MIG_NAME --region $REGION
- 執行下列指令,為群組設定自動調度資源:
注意: 使用 e2-medium 執行個體的地區 MIG 最多可支援 6 Gbps。如果這無法滿足您的處理量需求,請考慮調高 VM 大小和/或增加副本數量。 gcloud compute instance-groups managed set-autoscaling $MIG_NAME \ --project $PROJECT_ID --region $REGION --max-num-replicas 3 \ --target-cpu-utilization 0.75 --cool-down-period 90
- 執行下列指令,定義具名通訊埠:
gcloud compute instance-groups managed set-named-ports $MIG_NAME \ --project $PROJECT_ID --region $REGION --named-ports https:443
步驟 8d:為負載平衡器建立 SSL 憑證和金鑰
無論您是在單一或多個區域中安裝,都只需要建立一次憑證。在後續步驟中,您會將這些憑證與負載平衡器的目標 HTTPS Proxy 建立關聯。
您可以使用下列方式建立憑證:
- 憑證授權單位核發的憑證
- Google 代管的 SSL 憑證
- 自行簽署的憑證 (不建議用於正式環境)。
如要進一步瞭解如何為 Google Cloud 負載平衡器建立及使用 SSL 憑證,請參閱「SSL 憑證」和「SSL 憑證總覽」。
在下列範例中,我們建立了一個 Google 代管的 SSL 憑證:
- 建立下列環境變數:
CERTIFICATE_NAME=YOUR_CERT_NAME
DOMAIN_HOSTNAME=YOUR_DOMAIN_HOSTNAME將
DOMAIN_HOSTNAME設為您註冊的有效網域主機名稱。在後續步驟中,您會取得負載平衡器的 IP 位址,並更新網域 A 記錄,將網域指向該位址。舉例來說,網域主機名稱可能如下所示:foo.example.com。 - 執行
gcloud compute ssl-certificates create 指令:
gcloud compute ssl-certificates create $CERTIFICATE_NAME \ --domains=$DOMAIN_HOSTNAME \ --project $PROJECT_ID \ --global
佈建憑證最多可能需要一小時。如要檢查佈建狀態,請執行下列指令:
gcloud compute ssl-certificates describe $CERTIFICATE_NAME \ --global \ --format="get(name,managed.status, managed.Status)"
注意: 您可以為環境群組主機名稱建立多個 DNS A 記錄,這些記錄都會指向同一個負載平衡器 IP 位址。
步驟 8e:建立全域負載平衡器
- 建立健康狀態檢查:
gcloud compute health-checks create https HEALTH_CHECK_NAME \ --project $PROJECT_ID --port 443 --global \ --request-path /healthz/ingress
您可以使用這項健康狀態檢查,確保後端服務正在執行。如要針對特定 Proxy 設定更進階的健康狀態檢查,請參閱執行健康狀態檢查。
注意:嘗試建立健康狀態檢查時,如果收到下列錯誤訊息: ERROR: unrecognized arguments: --global,
請嘗試使用
gcloud components update指令更新gcloud。 - 建立後端服務:
gcloud compute backend-services create PROXY_BACKEND_NAME \ --project $PROJECT_ID \ --protocol HTTPS \ --health-checks HEALTH_CHECK_NAME \ --port-name https \ --timeout 302s \ --connection-draining-timeout 300s \ --global
注意: 如 Apigee 端點屬性參考資料所述,Apigee 的傳入流量 (內部負載平衡器) 預設逾時時間為 300 秒。將負載平衡器的後端服務逾時時間設為 302 秒,即可在有長時間執行的交易時,讓後端服務指令在 Apigee 中完整完成。如果將這個值設為較小的值 (例如 60 秒),負載平衡器可能會在要求完成前逾時,導致傳回 502 回應。 - 使用下列指令將 MIG 新增至後端服務:
多區域:如要設定多區域,您必須為每個區域建立個別的 MIG,然後重複這個步驟,將每個 MIG 新增至後端服務。請務必為每個區域代入適當的 REGION和MIG_NAME變數。gcloud compute backend-services add-backend PROXY_BACKEND_NAME \ --project $PROJECT_ID --instance-group $MIG_NAME \ --instance-group-region $REGION \ --balancing-mode UTILIZATION --max-utilization 0.8 --global
- 使用下列指令建立負載平衡網址對應:
gcloud compute url-maps create MIG_PROXY_MAP_NAME \ --project $PROJECT_ID --default-service PROXY_BACKEND_NAME
- 使用下列指令建立負載平衡目標 HTTPS Proxy:
gcloud compute target-https-proxies create MIG_HTTPS_PROXY_NAME \ --project $PROJECT_ID --url-map MIG_PROXY_MAP_NAME \ --ssl-certificates $CERTIFICATE_NAME
步驟 8f:取得預留 IP 位址並建立防火牆規則
您必須將 IP 位址指派給負載平衡器,然後建立規則,允許負載平衡器存取 MIG。無論您是在單一或多個區域中安裝,這個步驟都只需要執行一次。
- 為負載平衡器保留 IP 位址:
gcloud compute addresses create ADDRESSES_NAME \ --project $PROJECT_ID \ --ip-version=IPV4 \ --global
- 使用下列指令建立通用轉送規則:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --project $PROJECT_ID --address ADDRESSES_NAME --global \ --target-https-proxy MIG_HTTPS_PROXY_NAME --ports 443
- 執行下列指令,取得保留的 IP 位址:
gcloud compute addresses describe ADDRESSES_NAME \ --project $PROJECT_ID --format="get(address)" --global
- 重要步驟: 前往管理 DNS 記錄的網站、DNS 主機或網際網路服務供應商 (ISP),確認網域的 DNS 記錄會解析為 Google Cloud 負載平衡器的 IP 位址。這個位址是上一個步驟傳回的 IP 值。詳情請參閱「 更新 DNS A 和 AAAA 記錄,指向負載平衡器的 IP 位址」。
- 使用下列指令建立防火牆規則,允許負載平衡器存取 MIG:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --description "Allow incoming from GLB on TCP port 443 to Apigee Proxy" \ --project $PROJECT_ID --network $VPC_NAME --allow=tcp:443 \ --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=gke-apigee-proxy請注意,IP 位址範圍
130.211.0.0/22和35.191.0.0/16是 Google 負載平衡的來源 IP 位址範圍。這項防火牆規則可讓 Google Cloud Load Balancing 向 MIG 發出健康狀態檢查要求。
Apigee 佈建完成。請參閱「部署範例 Proxy」。
內部轉送 (PSC)
本節說明如何使用 Private Service Connect (PSC),只允許從任何 Google Cloud 專案內部存取 API Proxy。
您可以透過下列兩種方式,使用 PSC 設定內部存取權:
- 服務端點:要求會通過服務端點,傳送至單一連結點 (稱為服務連結)。
- 內部區域負載平衡器:要求會通過區域內部 HTTP(S) 負載平衡器。另請參閱全球性與地區性負載平衡。
選取下方分頁標籤,瞭解所選設定的步驟:
服務端點
為服務連結建立 PSC 服務端點
- 從先前建立的執行個體取得服務連結:
沒有資料落地機制
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
資料落地
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
在下列輸出範例中,
serviceAttachment值會以粗體顯示:{ "instances": [ { "name": "us-west1", "location": "us-west1", "host": "10.82.192.2", "port": "443", "createdAt": "1645731488019", "lastModifiedAt": "1646504754219", "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek", "state": "ACTIVE", "peeringCidrRange": "SLASH_22", "runtimeVersion": "1-7-0-20220228-190814", "ipRange": "10.82.192.0/22,10.82.196.0/28", "consumerAcceptList": [ "875609189304" ], "serviceAttachment": "projects/bfac74a67a320c43a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw1" } ] }
注意: 您用來建立 Apigee 機構的專案 ID 一律會顯示在 這是清單中唯一的專案。consumerAcceptList清單中。在上述範例輸出內容中, - 建立 PSC 服務端點,指向您在上一個步驟中從執行個體回應內容取得的服務連結,如「建立 Private Service Connect 端點」一文所述。
- 如要測試設定,請參閱「 呼叫僅限內部存取的 API Proxy」。
內部區域負載平衡器
- 這項設定不支援全域外部 HTTP(S) 負載平衡器 (傳統版)。
- 如果使用多個 PSC NEG 進行容錯移轉,系統不支援主動健康狀態檢查。請改用異常偵測。
- 透過 PSC 連線至 Apigee 執行個體的 Google Cloud 專案數量,以及每個專案可擁有的 PSC NEG 連線數量,都有相關限制。詳情請參閱「 Private Service Connect (PSC) 限制」。
- 如果從
consumerAcceptList移除 Google Cloud 專案,該專案中現有的 PSC NEG 仍可繼續運作。不過,系統會拒絕任何新的 NEG。如果從consumerAcceptList移除相關聯的專案,您必須刪除現有的 NEG。或者,您也可以重新建立 Apigee 執行個體,這會在 Apigee 專案中重新建立服務附件。
步驟 7a:設定環境變數
本節的操作說明會使用環境變數參照重複使用的字串。請務必在「定義環境變數」中設定變數。
此外,請設定下列環境變數:
NEG_NAME=YOUR_NEG_NAMENETWORK_NAME=YOUR_NETWORK_NAMESUBNET_NAME=YOUR_SUBNET_NAMETARGET_SERVICE=TARGET_SERVICE_ATTACHMENT
其中:
- NEG_NAME:網路端點群組的名稱。
- NETWORK_NAME:(選用) 建立 NEG 的網路名稱。如省略這個參數,系統會使用
default專案網路。 - SUBNET_NAME:用於與生產者建立私有連線的子網路名稱。
子網路大小可以很小:PSC NEG 只需要子網路中的一個 IP。如果是 Apigee,每個區域只需要一個 PSC NEG。VM 或其他實體可以共用及使用子網路。如未指定子網路,網路端點可能會屬於建立網路端點群組的區域中任何子網路。
注意: 如果指定 --network參數,則必須一併指定--subnet。 - TARGET_SERVICE:您要連線的服務連結。例如:
projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
TARGET_SERVICE 是在這個步驟中取得。步驟 7b:建立僅限 Proxy 的子網路
gcloud compute networks subnets create testproxyonlysubnet \ --purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE --region=$RUNTIME_REGION --network=$NETWORK_NAME \ --range=100.0.0.0/24 --project=$PROJECT_ID
步驟 7c:建立網路端點群組 (NEG)
- 從先前建立的執行個體取得服務連結:
沒有資料落地機制
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
資料落地
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"
在下列輸出範例中,
serviceAttachment值會以粗體顯示:{ "instances": [ { "name": "us-west1", "location": "us-west1", "host": "10.82.192.2", "port": "443", "createdAt": "1645731488019", "lastModifiedAt": "1646504754219", "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek", "state": "ACTIVE", "peeringCidrRange": "SLASH_22", "runtimeVersion": "1-7-0-20220228-190814", "ipRange": "10.82.192.0/22,10.82.196.0/28", "consumerAcceptList": [ "875609189304" ], "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7" } ] }
注意: 您用來建立 Apigee 機構的專案 ID 一律會顯示在 consumerAcceptList清單中。在上述範例輸出內容中,這是清單中唯一的專案。 建立 Private Service Connect NEG,指向您在上一個步驟中從執行個體回應主體取得的服務附件。
注意:下列指令會明確指定建立 NEG 時要使用的網路和子網路。如未指定這些值,系統會使用預設網路。如果預設網路已刪除,且未指定網路和子網路,指令就會失敗。 gcloud compute network-endpoint-groups create $NEG_NAME \ --network-endpoint-type=private-service-connect \ --psc-target-service=$TARGET_SERVICE \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID --network=$NETWORK_NAME --subnet=$SUBNET_NAME
地點
- $PROJECT_ID 可以是已與 Apigee 組織建立關聯的 Cloud 專案,也可以是建立 Apigee 執行階段例項時
consumerAcceptlist中包含的 Cloud 專案。
- $PROJECT_ID 可以是已與 Apigee 組織建立關聯的 Cloud 專案,也可以是建立 Apigee 執行階段例項時
步驟 7d:設定區域內部負載平衡器
- 為負載平衡器保留內部 IPv4 位址。
gcloud compute addresses create ADDRESS_NAME \ --ip-version=IPV4 --subnet=$SUBNET_NAME \ --region=$RUNTIME_LOCATION --project=$PROJECT_ID
將 ADDRESS_NAME 替換為 IP 位址資源的名稱。
執行下列指令,查看保留的 IP 位址:
gcloud compute addresses describe ADDRESS_NAME \ --format="get(address)" --region=$RUNTIME_LOCATION --project=$PROJECT_ID
- 為 NEG 建立後端服務。
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
- 將 NEG 新增至後端服務:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=$NEG_NAME \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
更改下列內容:
- NEG_NAME:網路端點群組的名稱。
- BACKEND_SERVICE_NAME 改為後端服務的名稱。
-
如要建立 HTTPS 負載平衡器,您必須擁有 SSL 憑證資源,才能在 HTTPS 目標 Proxy 中使用。
使用這個指令建立自行管理的 SSL 憑證資源。如要建立自行管理的 SSL 憑證,您需要本機私密金鑰檔案和本機憑證檔案。如需建立這些檔案,請參閱使用自行管理的 SSL 憑證的步驟 1。
注意: 內部區域負載平衡器不支援 Google 代管憑證。 gcloud compute ssl-certificates create CERTIFICATE \ --certificate LB_CERT \ --private-key LB_PRIVATE_KEY --region=$RUNTIME_LOCATION --project=$PROJECT_ID
更改下列內容:
- CERTIFICATE:憑證名稱。
- LB_CERT:PEM 格式的憑證檔案路徑,適用於自行管理的憑證。
- LB_PRIVATE_KEY:PEM 格式的私密金鑰檔案路徑,適用於自行管理的憑證。
-
為負載平衡器建立網址對應。
網址對應必須參照預設後端服務。將您剛建立的後端服務設為預設服務。
gcloud compute url-maps create URL_MAP_NAME \ --default-service=DEFAULT_BACKEND_SERVICE_NAME \ --region=$RUNTIME_REGION \ --project=$PROJECT_ID
更改下列內容:
- URL_MAP_NAME:網址對應的名稱。
- DEFAULT_BACKEND_SERVICE_NAME:負載平衡器預設後端服務的名稱。 如果沒有主機規則與要求的主機名稱相符,系統就會使用預設規則。
-
使用 SSL 憑證資源建立目標 HTTPS Proxy。
gcloud compute target-https-proxies create PROXY_NAME \ --url-map=URL_MAP_NAME \ --ssl-certificates=CERTIFICATE \ --region=$RUNTIME_LOCATION --project=$PROJECT_ID
更改下列內容:
- PROXY_NAME:目標 HTTPS Proxy 的名稱。
- URL_MAP_NAME:網址對應的名稱。
- CERTIFICATE:憑證資源的名稱。
- 建立轉送規則。
gcloud compute forwarding-rules create FWD_RULE \ --load-balancing-scheme=INTERNAL_MANAGED \ --address=ADDRESS_NAME \ --target-https-proxy=PROXY_NAME \ --ports=443 \ --target-https-proxy-region=$RUNTIME_REGION \ --region=$RUNTIME_REGION \ --project=$PROJECT_ID \ --network=$NETWORK_NAME \ --subnet=$SUBNET_NAME
更改下列內容:
- FWD_RULE:轉送規則的名稱。
- ADDRESS_NAME:您預留供轉送規則使用的 IP 位址資源。
- PROXY_NAME:目標 HTTPS Proxy 的名稱。
- NETWORK_NAME:(選用) 建立 NEG 的網路名稱。如省略這個參數,系統會使用
default專案網路。 - SUBNET_NAME:用於與生產者建立私有連線的子網路名稱。
注意: 如果指定 --network參數,則必須一併指定--subnet。
- Apigee 佈建完成。請參閱「部署範例 Proxy」。
將 BACKEND_SERVICE_NAME 替換為後端服務的名稱。
外部轉送 (PSC)
本節說明如何使用 Private Service Connect (PSC) 設定外部路由,允許 Apigee 與您控管的 VPC 進行通訊。您必須先完成這項操作,才能從外部用戶端將要求傳送至 Apigee 執行階段例項。
- 這項設定不支援全域外部 HTTP(S) 負載平衡器 (傳統版)。
- 如果使用多個 PSC NEG 進行容錯移轉,系統不支援主動健康狀態檢查。請改用異常偵測。
- 透過 PSC 連線至 Apigee 執行個體的 Google Cloud 專案數量,以及每個專案可擁有的 PSC NEG 連線數量,都有相關限制。詳情請參閱「 Private Service Connect (PSC) 限制」。
- 如果從
consumerAcceptList移除 Google Cloud 專案,該專案中現有的 PSC NEG 仍可繼續運作。不過,系統會拒絕任何新的 NEG。如果從consumerAcceptList移除相關聯的專案,您必須刪除現有的 NEG。或者,您也可以重新建立 Apigee 執行個體,這會在 Apigee 專案中重新建立服務附件。
步驟 7b:建立 NEG 並設定負載平衡器
您可以建立全域或區域負載平衡器。
全域外部負載平衡器
設定全域外部 HTTP(S) 負載平衡器 (負載平衡配置設為 EXTERNAL_MANAGED)。
雖然 Private Service Connect NEG 是區域性的,但這項設定中的所有其他負載平衡元件都是全域性的。
- 請確認您已在「定義環境變數」中設定環境變數。
- 從先前建立的執行個體取得服務連結:
沒有資料落地機制
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"資料落地
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"在下列輸出範例中,
serviceAttachment值會以粗體顯示:{ "instances": [ { "name": "us-west1", "location": "us-west1", "host": "10.82.192.2", "port": "443", "createdAt": "1645731488019", "lastModifiedAt": "1646504754219", "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek", "state": "ACTIVE", "peeringCidrRange": "SLASH_22", "runtimeVersion": "1-7-0-20220228-190814", "ipRange": "10.82.192.0/22,10.82.196.0/28", "consumerAcceptList": [ "875609189304" ], "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7" } ] }
注意: 您用於建立 Apigee 機構的專案 ID 一律會顯示在 這是清單中唯一的專案。consumerAcceptList清單中。在上方顯示的輸出範例中, 建立指向服務連結的 Private Service Connect NEG,該服務連結是您在上一個步驟中從執行個體回應本文取得。
gcloud compute network-endpoint-groups create NEG_NAME \ --network-endpoint-type=private-service-connect \ --psc-target-service=TARGET_SERVICE \ --region=$RUNTIME_LOCATION \ --network=NETWORK_NAME \ --subnet=SUBNET_NAME \ --project=$PROJECT_ID更改下列內容:
- NEG_NAME:網路端點群組的名稱。
- TARGET_SERVICE:要連線的服務附件。使用上一個指令傳回的服務連結值。例如:
projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7 - NETWORK_NAME:(選用) 建立 NEG 的網路名稱。如果省略這個參數,系統會使用
default專案網路。 - SUBNET_NAME:用於與生產者建立私有連線的子網路名稱。
子網路大小可以很小:PSC NEG 只需要子網路中的一個 IP。如果是 Apigee,每個區域只需要一個 PSC NEG。VM 或其他實體可以共用及使用子網路。如未指定子網路,網路端點可屬於建立網路端點群組的區域中任何子網路。
注意: 如果指定 --network參數,則必須一併指定--subnet。 - $PROJECT_ID:已與 Apigee 組織建立關聯的 Cloud 專案,或是建立 Apigee 執行階段例項時
consumerAcceptlist中包含的 Cloud 專案。如果尚未建立環境變數來保存專案 ID,請建立一個,因為後續大部分指令都會用到這個 ID。
- 為負載平衡器保留全域外部 IPv4 位址。
gcloud compute addresses create ADDRESS_NAME \ --ip-version=IPV4 --global --project=$PROJECT_ID將 ADDRESS_NAME 替換為 IP 位址資源的名稱。
執行下列指令,查看保留的 IP 位址:
gcloud compute addresses describe ADDRESS_NAME \ --format="get(address)" --global --project=$PROJECT_ID - 為 NEG 建立後端服務。
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global --project=$PROJECT_ID - 將 NEG 新增至後端服務。
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-region=REGION \ --global --project=$PROJECT_ID更改下列內容:
- BACKEND_SERVICE_NAME:後端服務的名稱。
- NEG_NAME:網路端點群組的名稱。
- REGION:網路端點群組的區域。
為負載平衡器建立網址對應。
網址對應必須參照預設後端服務。將您剛建立的後端服務設為預設服務。
gcloud compute url-maps create URL_MAP_NAME \ --default-service=DEFAULT_BACKEND_SERVICE_NAME \ --global --project=$PROJECT_ID更改下列內容:
- URL_MAP_NAME:網址對應的名稱。
- DEFAULT_BACKEND_SERVICE_NAME:負載平衡器預設後端服務的名稱。 如果沒有主機規則與要求的主機名稱相符,系統就會使用預設規則。
建立目標 HTTPS Proxy。
如要建立 HTTPS 負載平衡器,您必須擁有 SSL 憑證資源,才能在 HTTPS 目標 Proxy 中使用。您可以使用 Google 代管的 SSL 憑證或自行管理的 SSL 憑證,建立 SSL 憑證資源。建議使用 Google 代管的憑證,因為 Google Cloud 會自動取得、管理及更新這些憑證。
如要建立 Google 代管的憑證,您必須擁有網域。
使用這個指令建立 Google 代管的 SSL 憑證資源:
gcloud compute ssl-certificates create CERTIFICATE \ --domains DOMAIN --project=$PROJECT_ID更改下列內容:
- CERTIFICATE:憑證名稱。
- DOMAIN:負載平衡器的網域名稱。
使用這個指令建立自行管理的 SSL 憑證資源。如要建立自行管理的 SSL 憑證,您需要本機私密金鑰檔案和本機憑證檔案。如需建立這些檔案,請參閱使用自行管理的 SSL 憑證的步驟 1。
gcloud compute ssl-certificates create CERTIFICATE \ --certificate LB_CERT \ --private-key LB_PRIVATE_KEY --project=$PROJECT_ID更改下列內容:
- CERTIFICATE:憑證名稱。
- LB_CERT:PEM 格式的憑證檔案路徑,適用於自行管理的憑證。
- LB_PRIVATE_KEY:PEM 格式的私密金鑰檔案路徑,適用於自行管理的憑證。
使用 SSL 憑證資源建立目標 HTTPS Proxy。
gcloud compute target-https-proxies create PROXY_NAME \ --url-map=URL_MAP_NAME \ --ssl-certificates=CERTIFICATE --project=$PROJECT_ID更改下列內容:
- PROXY_NAME:目標 HTTPS Proxy 的名稱。
- URL_MAP_NAME:網址對應的名稱。
- CERTIFICATE:憑證資源的名稱。
- 建立轉送規則。
gcloud compute forwarding-rules create FWD_RULE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=ADDRESS_NAME \ --target-https-proxy=PROXY_NAME \ --ports=443 \ --global --project=$PROJECT_ID更改下列內容:
- FWD_RULE:轉送規則的名稱。
- ADDRESS_NAME:您預留供轉送規則使用的 IP 位址資源。
- PROXY_NAME:目標 HTTPS Proxy 的名稱。
將 BACKEND_SERVICE_NAME 改為後端服務的名稱。
區域外部負載平衡器
設定區域型外部 HTTP(S) 負載平衡器。另請參閱外部 HTTP(S) 負載平衡器總覽。
- 請務必在「定義環境變數」中設定變數。
- 建立僅限 Proxy 的子網路:
注意: 這項作業只能執行一次。對於任何以 Envoy 為基礎的區域負載平衡器,每個 Google Cloud 專案只需要這個 Proxy 專用子網路一次。另請參閱適用於 Envoy 負載平衡器的 Proxy 專用子網路。 gcloud compute networks subnets create SUBNET_NAME \ --purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE \ --region=$RUNTIME_LOCATION --network=NETWORK_NAME \ --range=100.0.0.0/24 --project=$PROJECT_ID更改下列內容:
- SUBNET_NAME:子網路名稱。
- (選用) NETWORK_NAME:子網路建立所在的網路名稱。如果省略這個參數,系統會使用預設專案網路。
- 從先前建立的執行個體取得服務連結:
沒有資料落地機制
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"資料落地
curl -i -X GET -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/instances"在下列輸出範例中,
serviceAttachment值會以粗體顯示:{ "instances": [ { "name": "us-west1", "location": "us-west1", "host": "10.82.192.2", "port": "443", "createdAt": "1645731488019", "lastModifiedAt": "1646504754219", "diskEncryptionKeyName": "projects/my-project/locations/us-west1/keyRings/us-west1/cryptoKeys/dek", "state": "ACTIVE", "peeringCidrRange": "SLASH_22", "runtimeVersion": "1-7-0-20220228-190814", "ipRange": "10.82.192.0/22,10.82.196.0/28", "consumerAcceptList": [ "875609189304" ], "serviceAttachment": "projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7" } ] }
注意: 您用於建立 Apigee 機構的專案 ID 一律會顯示在 這是清單中唯一的專案。consumerAcceptList清單中。在上方範例輸出內容中, - 建立網路端點群組。
gcloud compute network-endpoint-groups create NEG_NAME \ --network-endpoint-type=private-service-connect \ --psc-target-service=TARGET_SERVICE \ --region=$RUNTIME_LOCATION --project=$PROJECT_ID更改下列內容:
- NEG_NAME:網路端點群組的名稱。
- TARGET_SERVICE:要連線的服務附件名稱。
例如:
projects/bfac7497a40c32a12p-tp/regions/us-west1/serviceAttachments/apigee-us-west1-crw7
- 為 NEG 建立後端服務。
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
- 將 NEG 新增至後端服務。
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
更改下列內容:
- BACKEND_SERVICE_NAME:後端服務的名稱。
- NEG_NAME:網路端點群組的名稱。
為負載平衡器建立網址對應。
網址對應必須參照預設後端服務。將您剛建立的後端服務設為預設服務。
gcloud compute url-maps create URL_MAP_NAME \ --default-service=DEFAULT_BACKEND_SERVICE_NAME \ --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
更改下列內容:
- URL_MAP_NAME:網址對應的名稱。
- DEFAULT_BACKEND_SERVICE_NAME:負載平衡器預設後端服務的名稱。 如果沒有主機規則與要求的主機名稱相符,系統就會使用預設規則。
建立目標 HTTPS Proxy。
如要建立 HTTPS 負載平衡器,您必須擁有 SSL 憑證資源,才能在 HTTPS 目標 Proxy 中使用。
使用這個指令建立自行管理的 SSL 憑證資源。如要建立自行管理的 SSL 憑證,您需要本機私密金鑰檔案和本機憑證檔案。如需建立這些檔案,請參閱使用自行管理的 SSL 憑證的步驟 1。
注意: 內部區域負載平衡器不支援 Google 代管憑證。 gcloud compute ssl-certificates create CERTIFICATE \ --certificate LB_CERT \ --private-key LB_PRIVATE_KEY --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID
更改下列內容:
- CERTIFICATE:憑證名稱。
- LB_CERT:PEM 格式的憑證檔案路徑,適用於自行管理的憑證。
- LB_PRIVATE_KEY:PEM 格式的私密金鑰檔案路徑,適用於自行管理的憑證。
使用 SSL 憑證資源建立目標 HTTPS Proxy。
gcloud compute target-https-proxies create PROXY_NAME \ --url-map=URL_MAP_NAME --region=$RUNTIME_LOCATION \ --ssl-certificates=CERTIFICATE --project=$PROJECT_ID
更改下列內容:
- PROXY_NAME:目標 HTTPS Proxy 的名稱。
- URL_MAP_NAME:網址對應的名稱。
- CERTIFICATE:憑證資源的名稱。
- 為負載平衡器保留區域外部位址。請注意,網路層級必須設為
STANDARD。gcloud compute addresses create ADDRESS_NAME \ --region=$RUNTIME_LOCATION --network-tier=STANDARD \ --project=$PROJECT_ID將 ADDRESS_NAME 替換為 IP 位址資源的名稱。
執行下列指令,查看保留的 IP 位址:
gcloud compute addresses describe ADDRESS_NAME \ --format="get(address)" --region=$RUNTIME_LOCATION \ --project=$PROJECT_ID - 建立轉送規則。
gcloud compute forwarding-rules create FWD_RULE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --address=ADDRESS_NAME \ --target-https-proxy=PROXY_NAME \ --ports=443 --region=$RUNTIME_LOCATION \ --target-https-proxy-region=$RUNTIME_LOCATION --project=$PROJECT_ID
更改下列內容:
- FWD_RULE:轉送規則的名稱。
- ADDRESS_NAME:您預留供轉送規則使用的 IP 位址資源。
- PROXY_NAME:目標 HTTPS Proxy 的名稱。
將 BACKEND_SERVICE_NAME 改為後端服務的名稱。
Apigee 佈建完成。請參閱「部署範例 Proxy」。
步驟 9:部署範例 Proxy
如果您已完成下列設定,請按照這些步驟操作:
- 外部轉送 (MIG)
- 外部轉送 (PSC)
- 內部轉送 (PSC)
如果您已設定內部路由 (VPC),請略過這些步驟,並前往「 呼叫僅限內部存取的 API Proxy」。
- 從 GitHub 下載 範例 Proxy。Proxy 的目標是 httpbin.org 服務,這項服務是常用的公開要求和回應服務。
- 使用 Apigee
apisAPI,將 API Proxy 套件上傳至執行階段:沒有資料落地機制
curl -i -X POST -H "Authorization: Bearer $AUTH" \ -H "Content-Type:multipart/form-data" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/apis?name=httpbin&action=import" \ -F 'file=@PATH_TO_ZIP_FILE/httpbin_rev1_2020_02_02.zip'資料落地
curl -i -X POST -H "Authorization: Bearer $AUTH" \ -H "Content-Type:multipart/form-data" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/apis?name=httpbin&action=import" \ -F 'file=@PATH_TO_ZIP_FILE/httpbin_rev1_2020_02_02.zip'其中 PATH_TO_ZIP_FILE 是包含下載 ZIP 檔案的目錄路徑。
-
將 API Proxy 部署至先前建立的環境:
沒有資料落地機制
curl -i -H "Authorization: Bearer $AUTH" -X POST \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"資料落地
curl -i -H "Authorization: Bearer $AUTH" -X POST \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments" - 使用下列 API 呼叫,確認部署作業已順利完成:
沒有資料落地機制
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments"資料落地
curl -i -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/environments/$ENVIRONMENT_NAME/apis/httpbin/revisions/1/deployments" 呼叫 API Proxy:
從任何啟用網路的電腦執行下列指令,將要求傳送至 API Proxy:
curl -i -H "Host: ENV_GROUP_HOSTNAME" \ "https://ENV_GROUP_HOSTNAME/httpbin/headers"如有需要,您可以使用這個 API 取得 ENV_GROUP_HOSTNAME 值:
沒有資料落地機制
curl -i -H "Authorization: Bearer $AUTH" \ "https://apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups"資料落地
curl -i -H "Authorization: Bearer $AUTH" \ "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$PROJECT_ID/envgroups"如果收到類似這樣的錯誤:
CONNECT_CR_SRVR_HELLO:sslv3 alert handshake failure,請檢查先前建立的 SSL 憑證是否已佈建。 使用這項指令檢查 佈建狀態。憑證佈建完成後,狀態會顯示為ACTIVE。gcloud compute ssl-certificates describe CERTIFICATE \ --global \ --format="get(name,managed.status, managed.Status)"成功後,範例 API 代理程式會傳回類似以下內容的回應:
{ "headers": { "Accept": "*/*", "Grpc-Trace-Bin": "AAD/8WC/I4AUSrMEch0E9yj+AYck1x9afwckAgA", "Host": "httpbin.org", "Traceparent": "00-fff160bf2380144ab304721d04f728fe-8724d71f5a7f0724-00", "User-Agent": "curl/7.77.0", "X-Amzn-Trace-Id": "Root=1-61d785ef-7613aa8a7fde7a910441fab9", "X-B3-Sampled": "0", "X-B3-Spanid": "8724d71f5a7f0724", "X-B3-Traceid": "fff160bf2380144ab304721d04f728fe", "X-Cloud-Trace-Context": "fff160bf2380144ab304721d04f728fe/9738144823944087332;o=0", "X-Envoy-Attempt-Count": "1" } }
如要進一步瞭解如何部署 Proxy,包括其他疑難排解資訊,請參閱「 部署 API Proxy」。