您目前查看的是 Apigee 和 Apigee Hybrid 說明文件。
這個主題沒有對應的
Apigee Edge 說明文件。
問題
在某些情況下,外部用戶端無法以所需方式存取/連線至 Apigee。包括網路連線失敗 (TLS 握手失敗) 或 Apigee 傳回 4xx/5xx 回應。
錯誤訊息
從用戶端傳送 API 要求至 Apigee 時,您會看到 TLS 交握失敗或 4xx/5xx 回應,即使 API Proxy 在 Apigee UI 中看似正常運作也一樣。
可能原因
| 原因 | 說明 | 錯誤代碼 |
|---|---|---|
| HTTPS 負載平衡器的 TLS 錯誤 | 您可以管理 HTTPS 負載平衡器的 TLS 設定。調查 HTTPS 負載平衡器記錄中的任何 TLS 錯誤。 | 負載平衡器 IP 位址發生 TLS 握手錯誤 |
| Google Cloud Armor 封鎖要求 | 如果您使用 Google Cloud Armor,可能是某項規則封鎖了要求。 |
API 回應代碼可能因 Google Cloud Armor 設定而異。拒絕規則可能會傳回 HTTP 403 (未授權)、404 (拒絕存取) 或 502 (閘道錯誤) 回應,甚至是其他回應代碼。 |
| Apigee Proxy VM 無法將流量轉送至 Apigee 執行個體 | Apigee API 流量路由器 Proxy 設定及其健康狀態需要調查 | 502 Server Error |
| 網路設定有誤 | 確認正確的網路已與 Apigee 虛擬私有雲對等互連。 | 502 Server error |
| 在區域擴展期間建立的新 Apigee 執行個體上,未附加的環境 | 建立新執行個體 (例如第二個區域) 後,您必須將環境附加至該執行個體,否則執行個體無法回應 API 要求。 | 503 error response |
原因:HTTPS 負載平衡器發生 TLS 錯誤
診斷
- 找出與負載平衡器相關聯的 TLS 憑證。
- 使用 Google Cloud 控制台:
-
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
-
按一下負載平衡器的「名稱」。「負載平衡器詳細資料」頁面隨即開啟。
- 在「Frontend」(前端) 區域的「IP:Port」(IP:通訊埠) 欄中,確認您查看的負載平衡器 IP 位址和通訊埠正確無誤。
- 在「憑證」欄中,按一下憑證名稱即可查看 TLS 憑證。
-
-
使用 gcloud 指令:
-
使用下列
gcloud 指令列出負載平衡器。這個指令也會顯示與每個負載平衡器相關聯的
SSL_CERTIFICATES。gcloud compute target-https-proxies list --project=PROJECT_NAME
將
PROJECT_NAME替換為您的專案名稱。系統會傳回類似以下的回應:
NAME: example-proxy-https-proxy SSL_CERTIFICATES: example-ssl-cert URL_MAP: example-proxy-url-map REGION: CERTIFICATE_MAP:
-
使用下列
gcloud 指令查看 TLS 憑證 (假設您已在電腦上安裝
jq或類似工具):gcloud compute ssl-certificates describe CERTICATE_NAME \ --project PROJECT_NAME --format json | jq -r '.certificate' | openssl x509 -text -noout
將 CERTIFICATE_NAME 替換為憑證名稱。例如:
example-ssl-cert。系統會傳回類似以下的回應:
certCertificate: Data: Version: 3 (0x2) Serial Number: 51:3b:a4:60:fe:49:34:a2:09:af:14:85:96:a2:4f:d9 Signature Algorithm: sha256WithRSAEncryption Issuer: C = US, O = Google Trust Services LLC, CN = GTS CA 1D4 Validity Not Before: Jul 11 11:51:52 2023 GMT Not After : Oct 9 12:44:45 2023 GMT Subject: CN = 34.149.207.105.nip.io Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) . . Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: A5:DB:7C:6A:8B:0B:7A:22:45:52:1E:85:29:32:77:18:A3:9D:87:76 X509v3 Authority Key Identifier: keyid:25:E2:18:0E:B2:57:91:94:2A:E5:D4:5D:86:90:83:DE:53:B3:B8:92 Authority Information Access: OCSP - URI:http://ocsp.pki.goog/s/gts1d4/qMhEcTt7LjA CA Issuers - URI:http://pki.goog/repo/certs/gts1d4.der X509v3 Subject Alternative Name: DNS:34.149.207.105.nip.io X509v3 Certificate Policies: Policy: 2.23.140.1.2.1 Policy: 1.3.6.1.4.1.11129.2.5.3 X509v3 CRL Distribution Points: Full Name: URI:http://crls.pki.goog/gts1d4/LjtNmxrQfWE.crl
請確認憑證中的一般名稱 (CN) 與 Apigee 中設定的主機名稱相符 (依序點選「Apigee」>「管理」>「環境」>「群組」)。請確認憑證有效且未過期。您可以使用
openssl執行這些檢查。
-
使用下列
gcloud 指令列出負載平衡器。這個指令也會顯示與每個負載平衡器相關聯的
- 使用 Google Cloud 控制台:
-
如要檢查負載平衡器傳回的 TLS 憑證,請從用戶端電腦執行下列
openssl指令。 檢查這個憑證是否與上述步驟 1 中傳回的憑證相符。openssl s_client -connect LB_HOSTNAME_OR_IP:443 -servername LB_HOSTNAME -showcerts
更改下列內容:
-
LB_HOSTNAME_OR_IP:負載平衡器主機名稱或 IP 位址。例如:
my-load-balancer。 -
LB_HOSTNAME:負載平衡器主機名稱。例如:
my-hostname。
如要確認憑證是否相符,請從用戶端執行下列指令:
echo | openssl s_client -connect HOST_NAME:443 -servername HOST_NAME | openssl x509 -noout -text | openssl md5
將 HOST_NAME 替換為 Apigee 中設定的主機名稱 (依序點選「管理」>「環境」>「群組」)。
然後執行下列 gcloud 指令,確認
md5是否相符:gcloud compute ssl-certificates describe CERTIFICATE_NAME --project PROJECT_NAME --format json | jq -r '.certificate' | openssl x509 -noout -text | openssl md5
將 CERTIFICATE_NAME 替換為憑證名稱。例如:
my-certificate -
LB_HOSTNAME_OR_IP:負載平衡器主機名稱或 IP 位址。例如:
-
如果步驟 1和步驟 2 的憑證相符 (即
md5值相符),請繼續在用戶端收集packet capture,以調查 TLS 交握失敗問題。您可以使用 Wireshark、tcpdump 或任何其他可靠的工具,在用戶端擷取封包。 - 按照「 啟用現有後端服務的記錄功能」一文中的操作說明,啟用負載平衡器的記錄功能。
- 查看負載平衡器 記錄,瞭解是否有任何錯誤。
解析度
- 如果負載平衡器上的自行管理憑證已過期或 CN/SAN 值不正確,您可能需要 更換負載平衡器上的憑證。
-
如果步驟 1 中負載平衡器傳回的憑證與步驟 2 中的憑證不符,可能表示負載平衡器提供的是過時/不正確的憑證,請向 Google Cloud 客戶服務提出支援要求。
-
如果
tcpdump表示 TLS 握手失敗,請調查連線失敗的原因是負載平衡器還是用戶端。- 如果失敗或連線重設是來自用戶端,請檢查用戶端應用程式,瞭解其行為異常的原因。舉例來說,您可以檢查用戶端的網路設定,或確認用戶端應用程式是否能連線至 Apigee。
- 如果看到負載平衡器本身的失敗/重設訊息,請參閱「 排解一般連線問題」,並視需要向 Google Cloud Customer Care 提交支援單。
- 如果在負載平衡器記錄中看到錯誤,請參閱「 不明原因的 5XX 錯誤」,並視需要向 Google Cloud Customer Care 提交支援單。
如果仍需要協助,請參閱「必須收集診斷資訊」。
原因:Cloud Armor 封鎖要求
診斷
如果根據 Cloud Armor 設定看到 403、404 或 502 錯誤回應,請檢查負載平衡器和 MIG 設定,確認設定正確且狀態良好。
- 如果您在 Google Cloud 環境中使用 Google Cloud Armor,請檢查 Google Cloud Armor 設定,找出可能封鎖要求的規則。安全性政策位於「 設定 Google Cloud Armor 安全性政策」一節。
- 如果不確定是哪項規則拒絕流量,可以嘗試在負載平衡器啟用記錄功能,如「 在現有後端服務上啟用記錄功能」一文所述。
-
啟用記錄後,請執行記錄查詢,找出遭 Google Cloud Armor 政策封鎖的要求:
-
前往 Google Cloud 控制台的「Logs Explorer」頁面。
-
將下列內容貼入「查詢」窗格:
jsonPayload.enforcedSecurityPolicy.outcome="DENY"
- 點選「執行查詢」
-
強制執行的政策名稱會顯示在「Query results」(查詢結果) 窗格的
jsonPayload.enforcedSecurityPolicy.name中:
-
解析度
修改 Google Cloud Armor 規則/設定,以符合您的需求,解決這個問題。如需這方面的協助,請與 Google Cloud Customer Care 團隊聯絡。
原因:Apigee Proxy VM 無法將流量轉送至 Apigee 執行個體
診斷
-
如果 API 用戶端收到
HTTP 502錯誤,並顯示下列錯誤訊息,則 Apigee API 流量路由器 Proxy VM 可能處於異常狀態。用戶端可能會收到
502錯誤,例如:<html><head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>502 Server Error</title> </head> <body text=#000000 bgcolor=#ffffff> <h1>Error: Server Error</h1> <h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.</h2> <h2></h2> </body></html>
查看負載平衡器記錄,瞭解是否有下列錯誤訊息:
statusDetails: "failed_to_pick_backend" severity: "WARNING"
有一組 VM (前置字元為
apigee-proxy) 在代管執行個體群組 (MIG) 中執行,可將流量轉送至 Apigee 執行個體。如果看到上述訊息,請按照下列步驟檢查執行個體群組中apigee-proxyVM 的健康狀態:-
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
-
按一下負載平衡器的「名稱」。「負載平衡器詳細資料」頁面隨即開啟。
-
在「Backend」(後端) 區段中,確認所有負載平衡器後端的「Healthy」(健康狀態良好) 欄都顯示綠色勾號。
-
-
確認 MIG 範本中的端點 IP 位址與 Apigee 執行個體 IP 位址相符。
apigee-proxyVM 是使用執行個體範本建立,範本會定義連線至 Apigee 執行個體 IP 位址的ENDPOINTIP 位址。-
取得 Apigee 執行個體 IP 位址:
curl -s -H "Authorization: Bearer (gcloud auth print-access-token)" \ "https://apigee.googleapis.com/v1/organizations/ORG_NAME/instances/INSTANCE_NAME"
更改下列內容:
-
ORG_NAME:機構名稱。例如:
my-org。 -
INSTANCE_NAME:執行個體的名稱。例如:
apigee-proxy-example。
-
ORG_NAME:機構名稱。例如:
-
或者,您也可以使用 Apigee 使用者介面取得 Apigee 執行個體 IP 位址:
- 在 Apigee 使用者介面中,依序點選「管理」>「執行個體」。
-
「IP addresses」(IP 位址) 欄會列出 IP 位址:
-
從範本取得
ENDPOINTIP 位址:-
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 按一下負載平衡器的「名稱」。「負載平衡器詳細資料」頁面隨即開啟。
- 在「Backend」(後端) 區域中,按一下後端服務名稱。
-
在「Instance group members」(執行個體群組成員) 區域中,按一下「Template」(範本) 名稱。
-
在範本頁面中,捲動至「自訂中繼資料」,即可查看「ENDPOINT」IP 位址:
-
確認 ENDPOINT IP 位址與步驟 2 中傳回的 Apigee IP 位址相符。如果不相符,請前往「解決方法」。
-
取得 Apigee 執行個體 IP 位址:
解析度
-
如果執行個體群組中的
apigee-proxyVM 顯示健康狀態不良,請確認您已設定防火牆規則,允許負載平衡 IP 位址範圍130.211.0.0/22和35.191.0.0/16存取 MIG。 -
前往 Google Cloud 控制台的「Firewall」(防火牆) 頁面。
-
確認是否已設置輸入防火牆規則,允許透過
443 TCP通訊埠,從130.211.0.0/22和35.191.0.0/16等來源 IP 範圍,輸入gke-apigee-proxy和target-tag等流量:
如果 MIG 的標記與
gke-apigee-proxy不同,請確認標記已新增至防火牆規則中的target-tag。如果沒有,請新增防火牆規則。
- 如果 ENDPOINT IP 位址與 Apigee 執行個體 IP 位址不符,可能是因為執行個體已刪除並重新建立,導致 IP 位址與範本中的 IP 位址不符。如要更新範本以使用新的 IP 位址,請按照「 變更執行個體 IP」一文中的操作說明進行。
原因:網路設定有誤
診斷
-
執行下列 API 呼叫,找出
authorizedNetwork的值:curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME"
系統會傳回類似以下的回應:
{ "name": "apigee-example-org", "createdAt": "1621287579456", "lastModifiedAt": "1674063833580", "environments": [ "test" ], "properties": { "property": [ { "name": "features.mart.connect.enabled", "value": "true" }, { "name": "features.hybrid.enabled", "value": "true" } ] }, "analyticsRegion": "us-west1", "authorizedNetwork": "default", "runtimeType": "CLOUD", "subscriptionType": "PAID", "caCertificate": "certificate-number", "runtimeDatabaseEncryptionKeyName": "projects/apigee-example-org/locations/us-west1/keyRings/my-database-key-ring/cryptoKeys/my-database-key", "projectId": "apigee-example-org", "state": "ACTIVE", "billingType": "SUBSCRIPTION", "addonsConfig": { "advancedApiOpsConfig": {}, "integrationConfig": {}, "monetizationConfig": {} }, "apigeeProjectId": "l09587a43efde330cp-tp" }在本範例中,
authorizedNetwork的值為預設值。 -
確認
authorizedNetwork值與對等互連的servicenetworking網路相同:-
在主專案的 Google Cloud 控制台中,前往「VPC network peering」(虛擬私有雲網路對等互連) 頁面。
-
您的 VPC 網路中列出的
servicenetworking-googleapis-com值,應與 API 呼叫傳回的值相同。例如:default。
-
-
如果您使用共用 VPC,請確認
authorizedNetwork值是與servicenetworking對等互連的代管專案中實際 VPC 的值。-
前往 Google Cloud 控制台的「Shared VPC」(共用 VPC) 頁面。
- 選取主專案。
-
「您的 VPC 網路」中列出的
servicenetworking-googleapis-com值,應與 API 呼叫傳回的authorizedNetwork值相同。例如:default。
-
-
確認與負載平衡器相關聯的執行個體群組與
authorizedNetwork值位於相同網路:-
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
-
按一下負載平衡器名稱。「Load balancer details」(負載平衡器詳細資料) 頁面隨即開啟。「後端」區域會顯示執行個體群組清單:
- 按一下執行個體群組的名稱。系統會顯示執行個體群組的「總覽」頁面。
- 點按「Details」(詳細資料) 分頁標籤。
-
捲動至「網路」部分:
-
確認這裡的「主要網路」與
authorizedNetwork值相同。例如:default。 - 按一下「總覽」分頁標籤。
- 在「Instance Group Members」(執行個體群組成員) 區段中,按一下執行個體的名稱。系統隨即會顯示「詳細資料」頁面。
-
捲動至「網路介面」部分:
-
確認「網路」值與
authorizedNetwork值相同。例如:default。 - 前往「Overview」(總覽) 分頁,針對「Instance Group Members」(執行個體群組成員) 區段中的每個執行個體,重複步驟 h 至步驟 j。
-
解析度
-
如果在步驟 2 或步驟 3 中,
authorizedNetwork值與對等互連的servicenetworking網路不同,請按照「 步驟 4:設定服務網路」中的步驟,確認您已將正確的虛擬私有雲網路與servicenetworking對等互連。 -
如果在步驟 4f 和 4j 中,網路值與
authorizedNetwork值不同,請確認authorizedNetwork是與servicenetworking.對等互連的網路。如果對等互連正確,但網路仍與authorizedNetwork,不同,表示執行個體群組建立有誤,請與 Google Cloud 客戶服務聯絡。
原因:在區域擴展期間建立的新 Apigee 執行個體上,環境未附加
診斷
-
用戶端顯示
503錯誤。例如:HTTP/2 503 date: Thu, 08 Jun 2023 07:22:15 GMT content-length: 0 via: 1.1 google alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
-
如果區域擴展後,第二個區域立即顯示
503錯誤,請按照下列步驟操作:-
執行下列
API 呼叫,確保環境已附加至新執行個體:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/instances/NEW_INSTANCE/attachments"
例如:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/apigee-example-org/instances/apigee-proxy-example/attachments"
系統會傳回類似以下的回應:
{ "attachments": [ { "name": "9ed157df-5ef2-4cdc-b1d5-2643b480eb33", "environment": "dev", "createdAt": "1628153855420" }, { "name": "a9e04dff-4ca4-4749-902f-5058e28c26a5", "environment": "prod", "createdAt": "1664517347106" } ] }在本範例中,名為
apigee-proxy-example的執行個體會附加至兩個環境:dev和prod。 -
確認第二個區域的代管執行個體群組 (MIG) 已建立,且顯示為健康狀態良好:
-
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 按一下負載平衡器的「名稱」。「負載平衡器詳細資料」頁面隨即開啟。
-
在「後端」下方,您應該會看到兩個 MIG,分別對應區域 1 和區域 2。確認兩者皆為正常運作狀態:
- 按照「Apigee Proxy VM 無法將流量轉送至 Apigee 執行個體」一文中的步驟,驗證第二個 MIG。
-
-
執行下列
API 呼叫,確保環境已附加至新執行個體:
解析度
-
如果新執行個體未連結至環境,請按照「 將環境連結至新執行個體」一文中的操作說明,將執行個體連結至環境。
另一種做法是確保負載平衡器將要求轉送至已附加環境的正確後端。例如,非正式環境的。您可能只想將這項設定附加至一個區域,但負載平衡器可能會將要求轉送至錯誤的區域。您需要更新負載平衡器設定,確保負載平衡器將流量導向正確的區域。
- 如果 MIG 狀況不佳,請參閱「診斷」和「解決方式」,瞭解「Apigee Proxy VM 無法將流量轉送至 Apigee 執行個體」。
必須收集診斷資訊
如果按照上述操作說明後問題仍未解決,請收集下列診斷資訊,然後與 Google Cloud Customer Care 團隊聯絡:
- Apigee 組織
- 發生問題的環境和 API Proxy
- 下載的偵錯工作階段 (如果問題斷斷續續發生)
- 失敗要求的詳細 curl 輸出內容。
- 負載平衡器已設定為將 API 呼叫傳送至 Apigee