排解 Looker (Google Cloud Core) 網路問題

您可以診斷及解決 Looker (Google Cloud Core) 執行個體常見的連入和連出連線問題,包括公開、私人和混合式網路設定。排解自訂網域、Private Service Connect、私人服務存取權和受控輸出內容的問題,有助於還原使用者對執行個體的存取權,並維持與身分識別提供者、外部服務和資料庫後端的連線。

自訂網域驗證失敗,並顯示代碼 9 錯誤

為使用公開連線的 Looker (Google Cloud Core) 執行個體設定自訂網域時,網域驗證可能會失敗並顯示 code: 9 錯誤。

問題

在 Looker (Google Cloud Core) 執行個體的「CUSTOM DOMAIN」(自訂網域) 分頁中,按一下「VERIFY DOMAIN」(驗證網域) 時,驗證會失敗,並顯示類似下列內容的錯誤訊息:

DNS record is not created or not the same as public IP address (code: 9)

自訂網域狀態也會維持「未驗證」或顯示為「無法使用」。

原因

雖然錯誤訊息指出 DNS A 記錄遺失或有誤,但這項錯誤通常是因下列原因之一而發生:

  • 限制性 CAA 記錄:網域的 DNS 設定包含憑證授權單位授權 (CAA) 記錄,但這些記錄未授權 Google 的憑證授權單位核發 SSL/TLS 憑證。由於 Looker (Google Cloud Core) 會為公開執行個體使用 Google 代管的憑證,因此憑證佈建作業會失敗。
  • 第三方 CDN 或 Proxy:僅使用公開連線的 Looker (Google Cloud Core) 執行個體,會專門使用負載平衡器 (LB) 授權來取得 Google 代管的憑證。如要授權負載平衡器,自訂網域的 DNS A 記錄必須直接解析為 Looker (Google Cloud Core) 的 Ingress 公用 IP 位址。如果透過第三方內容傳遞網路 (CDN)、網頁應用程式防火牆 (WAF) 或反向 Proxy (例如 Akamai 或 Cloudflare) 傳送流量,自動 LB 授權就會失敗。

解析度

請根據失敗原因,使用下列方法解決問題:

在 CAA 記錄中授權 Google 憑證授權單位

如果網域使用 CAA 記錄,請驗證並更新 DNS 記錄,允許 Google 的憑證供應商:

  1. 使用 DNS 查詢工具 (例如 dig) 檢查網域現有的 CAA 記錄:

    dig CAA DOMAIN_NAME +short
    

    將 DOMAIN_NAME 替換成自訂網域名稱 (例如 example.com 或 looker.example.com)。

  2. 新增 CAA 記錄,授權 pki.goog 和 letsencrypt.org:

    DOMAIN_NAME. IN CAA 0 issue "pki.goog"
    DOMAIN_NAME. IN CAA 0 issue "letsencrypt.org"
    

    同時允許這兩個 CA,可確保自動佈建和續訂作業順利進行。

  3. 更新 CAA 記錄後,請等待 DNS 傳播,然後在 Google Cloud 控制台中再次點選「驗證網域」。

使用 Private Service Connect 搭配第三方 CDN 和 Proxy

第三方 CDN 和反向 Proxy 無法直接放在公開 Looker (Google Cloud Core) 執行個體的前方,因為自動負載平衡器授權需要直接將 DNS 解析至執行個體的公開 IP 位址。

如要透過第三方 CDN 或 WAF 轉送傳入流量,請使用Private Service Connect 架構部署 Looker (Google Cloud Core),而非公開連線:

  1. 部署已啟用 Private Service Connect 的 Looker (Google Cloud Core) 執行個體。
  2. 在虛擬私有雲網路中,設定具備 Private Service Connect 後端的外部應用程式負載平衡器。
  3. 佈建自行管理或 Google 代管的 SSL 憑證,並附加至外部應用程式負載平衡器。這個架構可讓您控管 TLS 終止作業,並透過 CDN 或 WAF 傳送流量。

使用受控輸出時,OpenID Connect 驗證失敗

在設定了 Private Service Connect 且啟用受控輸出功能的 Looker (Google Cloud Core) 執行個體上設定 OpenID Connect 驗證時,驗證可能會失敗。

問題

如果驗證失敗,可能會出現下列任一情況:

  • 在瀏覽器中,Looker /openidconnect 端點會暫停約 60 秒,然後顯示錯誤或因逾時而出現 504 Upstream Request Timeout 或 504 Gateway Timeout 錯誤。
  • 識別資訊提供者顯示錯誤訊息,指出重新導向 URI 不相符,例如:

    AADSTS50011: The redirect URI specified in the request does not match the
    redirect URIs configured for the application
    

    您在身分識別提供者中設定的重新導向 URI 可能正確無誤,因此這則錯誤訊息會造成誤導。如果 Looker (Google Cloud Core) 在後端交換期間無法與身分提供者的權杖端點聯絡,就會發生實際的失敗情形。

原因

受控輸出內容的自動佈建工作流程有時會無法在 Looker (Google Cloud Core) 租戶專案中建立必要的 Secure Web Proxy 網路路徑 (looker-swp-route)。

如果缺少這條路徑,Looker (Google Cloud Core) 從後端傳送至身分識別提供者權杖端點的要求就會逾時,因為執行個體無法透過安全網頁 Proxy 將輸出流量導向公開網際網路。

解析度

如要解決這個問題,請按照下列步驟重設受控輸出設定,強制系統重新建立缺少的網路路徑:

  1. 前往 Google Cloud 控制台的「Looker」頁面:

    前往 Looker

  2. 按一下要更新的執行個體名稱。

  3. 按一下 [編輯]。

  4. 展開「連線」專區,然後前往「設定傳出連線」專區。

  5. 記錄「全域 FQDN」部分列出的所有現有完整網域名稱 (FQDN),例如身分識別提供者的端點。

  6. 刪除「全域 FQDN」部分列出的所有 FQDN。

  7. 取消勾選「啟用 Looker 連線至外部服務」核取方塊,即可停用受控 egress。

  8. 按一下 [儲存]。

  9. 等待執行個體更新完成,並清除設定變更。

  10. 再次點選「編輯」。

  11. 展開「連線」專區,然後勾選「啟用 Looker 連線至外部服務」核取方塊。

  12. 在「全域 FQDN」部分,重新新增身分識別提供者和任何其他外部服務所需的 FQDN。

  13. 按一下 [儲存]。

重設受控輸出會觸發自動佈建程序,重新建立缺少的 looker-swp-route 網路路徑。建立路徑後,即可完成對身分識別提供者的後端輸出要求。

504 上游請求逾時錯誤

在 Looker (Google Cloud Core) 執行個體上發出 API 呼叫、執行長時間查詢,或使用外部服務進行驗證時,要求可能會失敗,並顯示 HTTP 504 逾時錯誤。

問題

在下列任一情況下,您可能會收到 504 Upstream Request Timeout 或 504 Gateway Timeout 錯誤:

  • 傳入的 API 呼叫或查詢:在以負載平衡器為前端的執行個體上,對 Looker 端點 (例如 /result_format) 進行的 API 呼叫,或在 Looker UI 中執行的長時間查詢,大約 30 秒後會失敗並顯示 504 錯誤。
  • 輸出驗證或外部服務連線:從身分識別提供者的登入頁面返回後,或在啟用受控輸出功能的執行個體上連線至外部服務時,瀏覽器會顯示 504 錯誤。

原因

504 超時錯誤通常是下列原因所致:

  • 負載平衡器後端服務的連入要求逾時:透過 Cloud Load Balancing 負載平衡器存取 Looker (Google Cloud Core) 執行個體時,負載平衡器的後端服務預設後端服務逾時為 30 秒。如果資料庫查詢執行時間和 Looker 酬載算繪時間加總超過這個逾時限制,負載平衡器就會關閉連線,並傳回 HTTP 504 錯誤。
  • 受控輸出遭封鎖的外送網域:Looker (Google Cloud Core) 執行個體無法透過受控輸出連線至外部網域。與缺少路徑錯誤不同,在傳出要求期間發生 504 錯誤,通常表示網路路徑存在,但全域 FQDN 允許清單缺少必要網域,因此遭到封鎖,或是要求在閘道逾時。

解析度

請視錯誤原因完成下列各節的步驟,解決問題。

解決 API 呼叫或查詢的負載平衡器逾時問題

如要解決負載平衡器後端服務逾時導致的 504 錯誤,請使用下列一或兩種方法:

  • 增加負載平衡器後端服務逾時值:

    1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面:

      前往「Load balancing」(負載平衡) 頁面

    2. 按一下「後端」,然後點選與 Looker (Google Cloud Core) 執行個體相關聯的後端服務名稱。

    3. 按一下 [編輯]。

    4. 在「Timeout」(逾時) 欄位中,將逾時值調高,例如從 30 秒調高至 300 秒,以配合執行時間最長查詢和 API 要求。

    5. 按一下 [儲存]。

  • 使用非同步 API 工作流程:如果您呼叫 Looker API 擷取查詢資料,但無法修改負載平衡器逾時,請使用非同步端點,而非同步要求。呼叫 create_query_task 以非同步方式啟動查詢,然後輪詢 query_task_results,在查詢完成後擷取結果。

解決受控 egress 超時問題

如要解決 Looker (Google Cloud Core) 無法連線至外部服務或身分識別提供者時發生的 504 錯誤 (已啟用受控輸出),請按照下列步驟操作:

  1. 驗證必要 FQDN:在 Google Cloud 控制台中,確認外部服務或身分識別供應商要求的所有網域,都已新增至全域 FQDN 清單。OIDC 驗證流程通常需要多個端點 (例如授權、權杖和使用者資訊端點),這些端點可能使用不同的網域。
  2. 擷取聯播網追蹤記錄:如果錯誤仍未解決,請在重現問題時擷取瀏覽器聯播網追蹤記錄 (HAR 檔案)。在追蹤記錄中搜尋 504 狀態碼或失敗的 HTTP 要求,找出在流程中遭到連線,但未列入「全域 FQDN」清單的網域。
  3. 重設設定:如果必要的 FQDN 存在,但要求持續逾時,請按照「解決方案」一節的步驟操作,解決 OpenID Connect 驗證失敗的問題,並重設受控輸出設定。

HttpClient:ConnectTimeoutError execution expired

在 Looker 管理面板中測試 OpenID Connect 連線或其他外部網路連線時,連線測試可能會失敗,並顯示逾時錯誤。

問題

在 Looker 管理面板中執行連線測試時 (例如在「OpenID Connect 驗證」頁面上),Looker 會傳回下列錯誤:

HttpClient:ConnectTimeoutError execution expired

原因

這項錯誤表示 Looker (Google Cloud Core) 執行個體缺少與外部服務或身分識別提供者通訊所需的網路路徑。發生這個問題的常見原因如下:

  • 缺少路徑傳播:Cloud Router 使用預設設定,且未將虛擬私有雲網路路徑 (例如自訂廣告路徑) 傳播至 Looker (Google Cloud Core) 執行個體。
  • 缺少網際網路 NEG:網際網路端點群組 (NEG) 未在虛擬私有雲網路中設定,無法將流量導向外部服務。

解析度

如要解決這個問題,請按照下列步驟操作:

  1. 設定 Cloud Router 路由傳播:設定自訂通告路由,確認 Cloud Router 已設為將必要的虛擬私有雲網路路由傳播至 Looker (Google Cloud Core) 執行個體。
  2. 設定網際網路 NEG:在虛擬私有雲網路中設定網際網路 NEG,允許 Looker (Google Cloud Core) 執行個體將輸出流量路由至外部身分識別提供者或服務。
  3. 驗證私人服務存取權:如果執行個體使用私人服務存取權,請確認虛擬私有雲網路已與 Google 服務正確對等互連。詳情請參閱「使用私人服務存取權存取外部服務」。

南向 Private Service Connect 連線問題

如果 Looker (Google Cloud Core) 執行個體使用 Private Service Connect,連線至資料庫後端或已發布的服務,即使端點狀態為 Accepted,您也可能會遇到連線錯誤。

常見問題包括:

  • 主機名稱解析錯誤:如果測試連線時,Looker (Google Cloud Core) 顯示 Unknown host 錯誤,請確認設定的主機名稱與私有網路中的 DNS 記錄相符,且後端負載平衡器運作正常。
  • 連線逾時:如果連線逾時,請檢查虛擬私有雲防火牆規則,確認允許從 Private Service Connect NAT 子網路輸入流量至負載平衡器的後端。
  • 「待處理」或「已關閉」狀態:如果服務連結狀態為 Pending 或 Closed,請檢查消費者專案是否位於服務連結的許可清單中,以及是否已設定強制性 TCP 健康狀態檢查。
  • 更新失敗並顯示內部錯誤 13:使用 Terraform 或 API 更新傳出服務附件時,如果傳入設定處於錯誤狀態,更新可能會失敗並顯示 Internal error 13。詳情請參閱「更新輸出服務附件時發生內部錯誤 13」。

如需詳細的診斷工作流程和決策樹,請參閱「Troubleshooting southbound Private Service Connect connections」。

更新外送服務附件時發生內部錯誤 13

使用 Terraform 或 Looker (Google Cloud Core) API,在現有 Looker (Google Cloud Core) 執行個體上新增、更新或移除 Private Service Connect 外送 (輸出) 服務附件時,更新作業可能會失敗並顯示內部錯誤。

問題

您可能會觀察到下列症狀:

  • Terraform 或 API 更新失敗,並顯示類似下列內容的錯誤:

    Error: Error waiting for Updating Instance: Error code 13, message: an internal error has occurred
    
  • 即使生產者虛擬私有雲網路中的服務附件顯示 Accepted 連線狀態,Looker (Google Cloud Core) 執行個體仍無法與目標服務建立連線。

原因

當執行個體的 Private Service Connect 輸入設定 (allowed_vpcs) 在後端進入錯誤狀態時,就會發生這個錯誤。

使用 Terraform 或 API 用戶端更新輸出服務附件 (psc_service_attachments) 時,要求酬載通常會包含整個 psc_config 區塊,其中含有 allowed_vpcs 參數。Looker (Google Cloud Core) API 會在更新期間嘗試驗證傳入的設定。由於 allowed_vpcs 處於錯誤狀態,驗證會失敗,導致整個執行個體更新作業失敗,並顯示錯誤代碼 13,且無法套用輸出服務附件變更。

解析度

如要略過連入設定驗證錯誤,並套用連出服務附件更新,請完成下列解決方法:

  1. 在 Terraform 設定或 API 酬載中,暫時註解排除或移除 psc_config 區塊中的 allowed_vpcs 參數。
  2. 套用 Terraform 設定或重新提交 API 要求,更新輸出服務附件 (psc_service_attachments)。

    由於要求酬載省略 allowed_vpcs,API 會略過傳入設定的驗證,並套用傳出服務附件變更。

  3. 部署輸出服務附件並建立連線後,請還原 Terraform 設定或 API 酬載中的 allowed_vpcs 參數。

  4. 重新套用 Terraform 設定。

私人服務存取路徑和連線問題

對於使用私人服務存取權的 Looker (Google Cloud Core) 執行個體,與外部服務的傳出通訊需要適當的路徑傳播和網路基礎架構:

  • 路由傳播:確認 Cloud Router 已設為將虛擬私有雲網路路由傳播至 Looker (Google Cloud Core) 執行個體,例如自訂 advertise 路由。
  • 網際網路網路端點群組:如果執行個體需要透過私人服務存取權連線至外部端點,請確保虛擬私有雲網路中已設定網際網路網路端點群組 (NEG)。

如果缺少這些路徑或端點群組,連線至外部端點的測試就會失敗,並出現 HttpClient:ConnectTimeoutError execution expired 錯誤。

詳情請參閱「使用私人服務存取權存取外部服務」。

診斷工具和記錄

使用下列工具和記錄檔,協助診斷網路問題:

  • Cloud Logging:在 Cloud Logging 中查看執行個體層級的記錄,找出連線失敗和系統事件。詳情請參閱「查看執行個體記錄」。
  • Looker 系統活動:如果您可以管理員身分登入,請查看系統活動中的「使用者活動」資訊主頁。這個資訊主頁會顯示最近的登入失敗情形、使用的驗證方式和錯誤訊息。詳情請參閱「使用者活動資訊主頁」。
  • 虛擬私有雲流量記錄:查看虛擬私有雲流量記錄,判斷 Looker (Google Cloud Core) 的網路流量是否抵達目的地子網路,或遭到防火牆規則封鎖。
  • Cloud Customer Care:如果完成疑難排解步驟後問題仍未解決,請聯絡 Cloud Customer Care 團隊尋求協助。