排解內部部署連接器設定問題

本頁面提供逐步操作說明,協助您排解 IAP 地端部署連接器設定問題。如需其他疑難排解資訊,請參閱「Traffic Director 偵錯」。

排解錯誤 500 問題

以下是各種問題和可能的解決方法,可協助您解決嘗試存取應用程式時收到的 500 錯誤。

內部部署應用程式未連線至 Google Cloud 網路

您的內部部署應用程式可能未連上 Google Cloud 網路。從其中一個內部部署連接器 Compute Engine 執行個體,對內部部署應用程式執行 Ping 作業,藉此驗證連線能力。如果無法連線至內部連接器端點,請先對網路連線和設定進行偵錯,再繼續操作。

Envoy 未正確安裝在 VM 中

請完成下列步驟,確認 Envoy 已正確安裝:

  1. 透過內部部署連接器登入其中一個 Compute Engine VM。內部部署連接器 VM 名稱開頭為 opc-on-prem-app-deployment-ig-${app}
  2. 在 Cloud 控制台中,確認 opc-on-prem-app-deployment-gclb-urlmap 負載平衡後端服務健康狀態檢查的狀態為綠色。
  3. 如果後端服務顯示為健康狀態,請在其中一個執行個體中執行 SSH:
     gcloud compute ssh instance-name --zone=zone name
  4. 請執行下列指令,確認 Envoy 已啟用並執行:

     ps aux | grep envoy
    
    除了 grep envoy 之外,應有其他執行中的程序。

    輸出內容範例:

    envoy      943  0.0  0.0   5488  3076 ?        Ss   06:25   0:00 /bin/bash /usr/local/bin/run-proxy.sh
    envoy      944  0.1  1.5 178928 57352 ?        Sl   06:25   1:23 /usr/local/bin/envoy --config-path /usr/local/etc/
    envoy/envoy-proxy-bootstrap.json --allow-unknown-static-fields --disable-hot-restart --log-level info --drain-time-
    s 60
    
  5. 確認 Envoy 記錄目錄已在 /var/log/envoy/ 建立。

  6. 請執行下列指令,確認 VM 可存取 gce-mesh 值區:

    gcloud storage cp gs://gce-mesh/service-proxy-agent/releases/service-proxy-agent-0.2.tgz .

如果此步驟中的任何驗證失敗,表示 Envoy 並未正確安裝。如需更多資訊,請查看 /var/log/daemon.log 中的啟動記錄。

如果您發現 Envoy 未在前面步驟中執行,原因之一可能是 VPC Service Controls。VM 中的啟動指令碼會從 gce-mesh 儲存桶下載 Envoy 映像檔。如果 VPC Service Controls 規則不允許連線,內部部署連接器就無法運作。

為確保 Envoy 正確安裝,請在主機專案的 VPC Service Controls 中,允許存取 gce-mesh 儲存體值區。此外,請確認 VPC 有路由規則,允許流量連線至公開網際網路。這樣一來,您就能部署 Envoy。詳情請參閱「入站和出站規則」。

您的內部部署應用程式未連結至 Envoy

如果您可以從 VM 對內部部署應用程式執行 PING 作業,但無法使用內部部署連接器,則 Envoy 可能無法連線至應用程式。

如要確認 Envoy 能否連線至您的內部應用程式,請嘗試從 Envoy 執行的電腦上呼叫 Envoy。透過 SSH 連線至 VM opc-on-prem-app-deployment-ig-${app},然後執行下列指令。您可以在「Instance Groups」>「Details」>「Port Name Mapping」中找到 Envoy 通訊埠編號。

shell curl -x -v localhost:${envoy_port}

如果無法連線至端點,請檢查下列項目:

  • /var/log/envoy/envoy.err.log 是否有任何錯誤記錄。如果沒有錯誤記錄,請執行下列指令,檢查 Traffic Director 是否已啟用,且能否設定 Envoy:
    sudo curl 0.0.0.0:15000/config_dump 
  • 確認是否已設定 TRAFFICDIRECTOR_INTERCEPTION_LISTENER。如果未設定 TRAFFICDIRECTOR_INTERCEPTION_LISTENER,Traffic Director 就無法設定 Envoy。
  • 檢查各個 Listener 是否有任何錯誤訊息。

未設定 Envoy 和 Traffic Director 帳戶權限

如果在 envoy.err.log 中看到 GRPC 403 錯誤,或是在 Envoy 設定中未看到 TRAFFICDIRECTOR_INTERCEPTION_LISTENER,表示您可能未設定正確的帳戶權限。

確認 VM 服務帳戶具有 xDS v3TD 存取權:

  • 驗證權限:https://cloud.google.com/traffic-director/docs/prepare-for-envoy-setup#grant
  • 驗證帳戶:https://cloud.google.com/traffic-director/docs/prepare-for-envoy-setup#enable-service

排解 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 錯誤

如果瀏覽器顯示 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 錯誤,但不會重新導向至登入頁面,請在 Google Cloud 負載平衡器詳細資料頁面上驗證憑證狀態。

請注意,佈建 Google 代管的憑證最多可能需要 60 分鐘。

排解 Envoy 安裝問題

如果已成功部署內部部署的連接器,且已佈建憑證,但連線仍失敗,這可能表示 Envoy 未正確安裝在 VM 上。

如要確認 Envoy 是否已安裝,請透過 SSH 連線至其中一個 VM,然後執行下列指令:

  •  ps aux | grep envoy 
    除了 grep envoy 之外,應有其他執行中的程序。
  •  netstat -tlpn 
    Envoy 管理員通訊埠 127.0.0.1:15000 應處於監聽狀態。

如果上述任一操作失敗,請採取下列行動來減輕問題:

  1. 請確認在要部署連接器的子網路上已啟用 私人 Google 存取權
  2. 確認已啟用 VM Manager (OS Config API)

排解 IamMemberBinding 資源的部署失敗問題

如果在部署或更新內部部署連接器時,發生與 IamMemberBinding 資源相關的 PERMISSION_DENIED 錯誤,可能是因為為內部部署應用程式啟用 IAP時,未為 Google APIs Service Agent 服務帳戶授予必要的 OWNER 角色。

部署錯誤示例:

bind-iam-policy: {"ResourceType":"gcp-types/cloudresourcemanager-v1:virtual.projects.iamMemberBinding","ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"message":"Policy update access denied.","status":"PERMISSION_DENIED","statusMessage":"Forbidden","requestPath":"https://cloudresourcemanager.googleapis.com/v1/projects/<project-ID>:setIamPolicy","httpMethod":"POST"}}
bind-storage-admin-account-iam-policy: {"ResourceType":"gcp-types/cloudresourcemanager-v1:virtual.projects.iamMemberBinding","ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"message":"Policy update access denied.","status":"PERMISSION_DENIED","statusMessage":"Forbidden","requestPath":"https://cloudresourcemanager.googleapis.com/v1/projects/<project-ID>:setIamPolicy","httpMethod":"POST"}}

如果部署作業出現這些錯誤,請確認 Google APIs Service Agent 服務帳戶已授予 OWNER 角色,然後重試。