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

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

問題

  • API 產品、開發人員、應用程式不會在 Apigee UI 中填入。
  • 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 上進行,子網路可能未啟用 Private Google Access。
全部 不明網路故障 如果連線至網際網路時,叢集網路發生不明故障,就可能發生這個問題。

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

診斷

  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 安裝所在平台的防火牆是否已將 Apigee API 端點清單加入允許清單。如果是 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 檔案:

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