執行階段和控制層之間沒有網路連線

您正在查看 ApigeeApigee Hybrid 說明文件。
這個主題沒有對應的 Apigee Edge 說明文件。

問題

  • Apigee UI 中未填入 API 產品、開發人員和應用程式。
  • API Proxy 部署作業無法完成。
  • 執行用於讀取及寫入 API 產品、開發人員和應用程式的管理 API 要求失敗。

錯誤訊息

本節將說明在沒有網路連線時,可能會顯示的錯誤訊息。

ApigeeIssue

如果這個問題已回報為 ApigeeIssue,請執行下列指令:

kubectl -n APIGEE_NAMESPACE get apigeeissues

其中 APIGEE_NAMESPACE 是 Kubernetes 資源群組的名稱。

系統會顯示以下錯誤代碼:

NAME                               SEVERITY    AGE URL
control-plane-connectivity-failure Error       1hr https://cloud.google.com/apigee/docs/api-platform/troubleshoot/playbooks/no-network-connectivity

API 產品、開發人員和應用程式 Apigee UI 頁面

API 產品、開發人員和應用程式 Apigee UI 頁面會顯示下列錯誤:

Error: no connections available from the Apigee connect agent(s):
refer to documentation to triage further.

apigee-synchronizer 記錄

您可以在 apigee-synchronizer 記錄中看到下列錯誤訊息:

{"level":"SEVERE","thread":"Apigee-Timer-3","mdc":{"action":"SYNC","env":"dev",
  "org":"example-hybrid-dev"},"className":"com.apigee.httpclient.adaptor.RequestAdaptor",
  "method":"doSend","severity":"SEVERE","message":"request failed
  [CONTEXT ratelimit_period\u003d\"1 MINUTES [skipped: 1]\" ]",
  "formattedDate":"2023-02-01T06:27:48.700Z","logger":"SERVICES.HTTPCLIENTSERVICE",
  "exceptionStackTrace":"java.net.SocketTimeoutException: connect timed out
... com.apigee.httpclient.adaptor.RequestAdaptor.send(RequestAdaptor.java:251)
at com.apigee.hybrid.runtime.contract.sync.context.HttpContractDownloader.download(HttpContractDownloader.java:84)
at com.apigee.hybrid.runtime.contract.sync.context.ControlPlaneReplicationContext.getContract(ControlPlaneReplicationContext.java:66)

apigee-watcher 記錄

您可以在 apigee-watcher 記錄中看到下列錯誤訊息:

{"level":"error","ts":1675232549.5093117,"caller":"watcher/watcher.go:60",
"msg":"error during watch","name":"mpstatus","error":"INTERNAL: error sending
  mp status to mgmt: INTERNAL: failed to send runtime status
  Post \"https://apigee.googleapis.com/v1/organizations/example-hybrid-dev/instances/apigee-hybrid-australia-southeast1:reportStatus\":
  dial tcp 172.217.24.42:443: i/o timeout","stacktrace":
  "edge-internal.git.corp.google.com/apigee-watcher.git/watcher.
  (*Watcher).Start.func1.1\n\t/go/src/edge-internal/apigee-watcher/watcher/watcher.go:60"}

可能的原因

平台 原因 說明
全部 沒有可連上網際網路的網路路徑 如果沒有可連上網際網路的網路路徑,Apigee 執行階段控制層元件就無法與 Apigee 控制層 API 通訊。
全部 Apigee API 端點未列入許可清單 如果有防火牆,Apigee API 端點可能未列入許可清單。
GKE 未啟用私人 Google 存取權 如果部署在 GKE 上,則子網路可能未啟用私人 Google 存取權。
全部 不明的網路故障 如果叢集網路在連上網際網路時發生不明故障,就可能發生這個問題。

原因:沒有可連上網際網路的網路路徑

診斷

  1. 視使用的平台而定,確認叢集網路是否有可用來連線至網際網路的網路路徑。舉例來說,如要進一步瞭解 GKE 網路,請參閱「 網路總覽」一文。
  2. 請向基礎架構和網路團隊確認叢集網路是否使用轉送 Proxy 伺服器連上網際網路。

解決方法

  1. 請向網路管理員確認,並盡可能新增網路路徑至網際網路。
  2. 如果有用於叢集網路與網際網路之間通訊的轉送 Proxy 伺服器,請使用 overrides.yaml 檔案在 Apigee 中 設定轉送 Proxy 伺服器設定,然後使用 Helm 指令將該變更套用至執行階段平面:

    模擬測試:

    helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    --set envgroup=ENV_GROUP \
    -f OVERRIDES_FILE \
    --dry-run=server
    

    請務必加入所有顯示的設定,包括 --atomic

    您的安裝作業可能已使用與 ENV_GROUP 不同的 ENV_GROUP_RELEASE_NAME 進行設定。如需設定資訊,請參閱「使用 Helm 安裝 Apigee hybrid」。

    安裝圖表:

    helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    --set envgroup=ENV_GROUP \
    -f OVERRIDES_FILE
    

原因:Apigee API 端點未列入許可清單

診斷

請與網路管理員聯絡,確認 Apigee API 端點清單是否已列入 Apigee 安裝平台的防火牆許可清單。對於 GKE,這可能會是 Cloud Next Generation Firewall

解決方法

如果上述 Apigee API 端點未列入許可清單,請與網路管理員聯絡,並完成相關規定。

原因:未啟用私人 Google 存取權

診斷

  1. 如果 Apigee 部署在無法存取網際網路的 私人 GKE 叢集上,就必須啟用 私人 Google 存取權,讓 Apigee 執行階段平面元件能夠在內部存取 Google API。
  2. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  3. 按一下聯播網的名稱。
  4. 在「子網路」分頁的「私人 Google 存取權」欄中,確認已啟用相關子網路。如果不是,則是這項失敗的原因。

解決方法

  1. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 按一下聯播網的名稱。
  3. 按一下子網路的名稱。
  4. 按一下「Edit」(編輯)
  5. 選取「私人 Google 存取權已啟用」
  6. 按一下 [儲存]。啟用後,這個問題就會解決。

原因:不明的網路錯誤

診斷

請與網路管理員聯絡,確認叢集網路中是否有任何不明故障。

解決方法

請與網路管理員合作,解決叢集網路中的問題。網路問題解決後,這個問題就會解決。

必須收集診斷資訊

如果問題在您按照上述操作說明後仍未解決,請收集下列診斷資訊,然後與 Google Cloud Customer Care 團隊聯絡:

  1. Google Cloud 專案 ID。
  2. Apigee Hybrid 機構的名稱。
  3. 在所有 Kubernetes 叢集節點上執行下列指令的輸出內容:
    ping apigee.googleapis.com
    traceroute apigee.googleapis.com
    telnet apigee.googleapis.com 443
  4. overrides.yaml 檔案,用於遮蔽任何機密資訊。
  5. 所有命名空間中的 Kubernetes Pod 狀態:
    kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
  6. Kubernetes 叢集資訊傾印:

    產生 Kubernetes 叢集資訊傾印:

    kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump

    壓縮 Kubernetes 叢集資訊傾印:

    zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*