排解 GKE 中的網路隔離問題

Google Kubernetes Engine (GKE) 中不正確的網路隔離設定可能會導致叢集建立逾時、節點無法註冊、無法連線至控制層,或無法提取映像檔等問題。

本文提供疑難排解問題的指引,例如控制層存取權、CIDR 範圍重疊、從公開存放區提取映像檔時發生錯誤,以及與虛擬私有雲網路對接或 Private Service Connect 相關的問題。

平台管理員、平台操作員和網路管理員,在設定及管理網路隔離的 GKE 叢集時,必須瞭解這些資訊,才能符合安全性和法規遵循要求。如要進一步瞭解Google Cloud 內容中提及的常見角色和工作範例,請參閱「常見的 GKE 使用者角色和工作」。

GKE 叢集未運作

如果刪除允許叢集控制層透過通訊埠 10250 將輸入流量傳送至節點的防火牆規則,或是刪除預設網際網路閘道的預設路由,叢集就會停止運作。如果刪除預設路由,請務必確保流量會路由至必要的Google Cloud 服務。詳情請參閱「自訂轉送」。

建立叢集時逾時

問題
在 1.28 版或更早版本中建立的叢集,如果使用私人節點,則需要 VPC 之間的對等互連路由。不過,一次只能執行一項對接作業。如果嘗試同時建立多個具有上述特徵的叢集,叢集建立作業可能會逾時。
解析度

請使用下列其中一種解決方案:

  • 依序建立 1.28 以下版本的叢集,這樣每個後續叢集都會有虛擬私有雲對等互連路由,且沒有外部端點。如果 VPC 正在執行作業,嘗試建立單一叢集也可能會逾時。

  • 建立 1.29 以上版本的叢集。

不小心刪除虛擬私有雲網路對等互連連線

問題

如果不小心刪除虛擬私有雲網路對等連線,叢集會進入修復狀態,所有節點都會顯示 UNKNOWN 狀態。由於與控制層的連線已中斷,您無法對叢集執行任何作業。檢查控制層時,記錄會顯示類似下列的錯誤:

error checking if node NODE_NAME is shutdown: unimplemented
可能原因

您不小心刪除了虛擬私有雲網路對等互連連線。

解決方法

  1. 建立新的 GKE 叢集,版本須早於 PSC 切換,並使用特定設定。這項操作是為了強制重新建立虛擬私有雲對等互連連線,讓舊叢集恢復正常運作。
    • 請為新叢集使用下列特定設定:
      • 發布管道:擴充版
      • 叢集版本:1.29 之前的版本,例如 1.28.15-gke.2403000
      • 主要 IPv4 CIDR:特定 IP 位址範圍,例如 --master-ipv4-cidr=172.16.0.192/28
  2. 監控原始叢集狀態。
    • 建立新叢集 (並重新建立 VPC 對等互連) 後,原始叢集應會從修復狀態復原,節點也會恢復 Ready 狀態。
  3. 刪除暫時建立的 GKE 叢集。
    • 原始叢集完全還原並正常運作後,即可刪除暫時建立的 GKE 叢集。

不慎刪除 Private Service Connect 端點和轉送規則

問題

如果不小心刪除 Private Service Connect 端點或轉送規則,叢集會進入修復狀態,所有節點都會顯示 UNKNOWN 狀態。由於控制層的存取權已中斷,您將無法對叢集執行任何作業。檢查控制層時,記錄會顯示類似下列的錯誤:

error checking if node NODE_NAME is shutdown: unimplemented
可能原因

您不小心刪除了 Private Service Connect 端點或轉送規則。這兩項資源都命名為 gke-[cluster-name]-[cluster-hash:8]-[uuid:8]-pe,並允許控制層和節點私下連線。

解析度

輪替控制層 IP 位址。

叢集與使用中的對等互連重複

問題

嘗試建立沒有外部端點的叢集時,會傳回類似下列內容的錯誤:

Google Compute Engine: An IP range in the peer network overlaps with an IP
range in an active peer of the local network.
可能原因

您選擇的控制層 CIDR 重疊。

解析度

請使用下列其中一個解決方法:

  • 刪除叢集,然後使用不同的控制層 CIDR 重新建立叢集。
  • 在 1.29 版中重新建立叢集,並加入 --enable-private-nodes 標記。

無法連線至沒有外部端點的叢集控制層

實作任何叢集端點存取設定,提高叢集控制層可連線的可能性。詳情請參閱「叢集端點存取權」。

問題

建立沒有外部端點的叢集後,嘗試對叢集執行 kubectl 指令會傳回類似下列其中一項的錯誤:

Unable to connect to the server: dial tcp [IP_ADDRESS]: connect: connection
timed out.
Unable to connect to the server: dial tcp [IP_ADDRESS]: i/o timeout.
可能原因

kubectl 無法與叢集控制層通訊。

解析度

請使用下列其中一種解決方案:

  • 啟用 DNS 存取權,簡化叢集安全存取方式。詳情請參閱「以 DNS 為基礎的端點」。

  • 確認已為 kubeconfig 產生叢集的憑證,或已啟用正確的環境。如要進一步瞭解如何設定叢集憑證,請參閱「產生 kubeconfig 項目」。

  • 確認系統允許使用 IP 型外部端點存取控制層。停用叢集控制層的外部存取權,可將叢集與網際網路隔離。採用這項設定後,只有授權的內部網路 CIDR 範圍或預留網路可以存取控制層。

    1. 確認來源 IP 位址已獲得授權,可連線至控制層:

        gcloud container clusters describe CLUSTER_NAME \
            --format="value(controlPlaneEndpointsConfig.ipEndpointsConfig.authorizedNetworksConfig)"\
            --location=COMPUTE_LOCATION
      

      更改下列內容:

      如果來源 IP 位址未獲授權,輸出內容可能會傳回空白結果 (只有大括號),或不含來源 IP 位址的 CIDR 範圍

      cidrBlocks:
        cidrBlock: 10.XXX.X.XX/32
        displayName: jumphost
        cidrBlock: 35.XXX.XXX.XX/32
        displayName: cloud shell
      enabled: true
      
    2. 新增授權網路,以便存取控制層。

  • 如果您從地端部署環境或與叢集位置不同的區域執行 kubectl 指令,請務必啟用控制層私人端點全域存取權。詳情請參閱「從任何區域透過控制層的內部 IP 位址存取」。

    1. 描述叢集,查看控制存取權設定的回應:

      gcloud container clusters describe CLUSTER_NAME \
          --location=COMPUTE_LOCATION \
          --flatten "controlPlaneEndpointsConfig.ipEndpointsConfig.globalAccess"
      

      更改下列內容:

      成功輸出結果會與下列內容相似:

        enabled: true
      
    2. 如果傳回 null,請從任何區域透過控制層的內部 IP 位址啟用存取權。

IPv4 CIDR 區塊重疊,因此無法建立叢集

問題

gcloud container clusters create 會傳回類似下列內容的錯誤:

The given master_ipv4_cidr 10.128.0.0/28 overlaps with an existing network
10.128.0.0/20.
可能原因

您指定的控制層 CIDR 區塊與虛擬私有雲中的現有子網路重疊。

解析度

為 --master-ipv4-cidr 指定 CIDR 區塊,不得與現有子網路重疊。

已有其他叢集使用服務範圍,因此無法建立叢集

問題

嘗試建立叢集時,系統會傳回類似下列的錯誤:

Services range [ALIAS_IP_RANGE] in network [VPC_NETWORK], subnetwork
[SUBNET_NAME] is already used by another cluster.
可能原因

下列設定可能會導致這項錯誤:

  • 您選擇的服務範圍仍由其他叢集使用,或叢集未遭刪除。
  • 某個叢集使用該服務範圍,但該叢集已刪除,且次要範圍中繼資料未正確清除。GKE 叢集的次要範圍會儲存在 Compute Engine 中繼資料中,並應在叢集刪除後移除。即使叢集已成功刪除,中繼資料可能也不會移除。
解析度

步驟如下:

  1. 檢查現有叢集是否正在使用服務範圍。您可以使用 gcloud container clusters list 指令搭配 filter 旗標搜尋叢集。如果現有叢集使用服務範圍,您必須刪除該叢集或建立新的服務範圍。
  2. 如果現有叢集未使用服務範圍,請手動移除與要使用的服務範圍相符的中繼資料項目。

無法建立子網路

問題

嘗試使用自動子網路建立叢集,或建立自訂子網路時,可能會遇到下列任一錯誤:

An IP range in the peer network overlaps
with an IP range in one of the active peers of the local network.
Error: Error waiting for creating GKE cluster: Invalid value for field
PrivateClusterConfig.MasterIpv4CidrBlock: x.x.x.x/28 conflicts with an
existing subnet in one of the peered VPCs.
可能原因

您指定的控制層 CIDR 範圍與叢集中的其他 IP 範圍重疊。如果您嘗試重複使用最近刪除的叢集所用的 master-ipv4-cidr CIDR,也可能發生這個子網路建立錯誤。

解析度

請嘗試使用不同的 CIDR 範圍。

無法從公開 Docker Hub 中提取映像檔

問題

在叢集中執行的 Pod 會在 kubectl describe 中顯示警告:

Failed to pull image: rpc error: code = Unknown desc = Error response
from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
while waiting for connection (Client.Timeout exceeded while awaiting
headers)
可能原因

只有私人 IP 位址的節點需要額外設定,才能符合網路連線能力需求。不過,如果您啟用 Private Google Access 並符合網路需求,節點就能存取 Google Cloud API 和服務,包括 Artifact Registry。

解析度

請使用下列其中一個解決方法:

  • 將叢集中的映像檔從 Docker Hub 複製到 Artifact Registry。詳情請參閱「從第三方登錄檔遷移容器」。

  • GKE 會自動檢查 mirror.gcr.io,找出經常存取的 Docker Hub 映像檔快取副本。

  • 如果必須從 Docker Hub 或其他公開存放區提取映像檔,請使用 Cloud NAT 或以執行個體為基礎的 Proxy,做為靜態 0.0.0.0/0 路徑的目標。

無法建立新的外部 Webhook

嘗試建立 ValidatingWebhookConfigurations 或 MutatingWebhookConfigurations,並使用 clientConfig.url 欄位與叢集外的 Webhook 伺服器聯絡時,會發生下列錯誤:

ValidatingAdmissionPolicy 'gke-restrict-webhook-url' denied request: Egress
traffic from the API server through the control plane is disabled. As a result,
direct API server calls to external webhook servers are blocked. To connect to
external webhooks, update any webhook configurations that use clientConfig.url
to use clientConfig.service instead.

如果叢集設定停用控制層 VM 執行個體的外部 IP 位址,導致 Kubernetes API 伺服器無法直接傳送 egress 流量,就會發生這項錯誤。GKE 會使用 ValidatingAdmissionPolicy,禁止建立或更新使用 clientConfig.url 欄位的 Webhook 設定。

如要確認這項錯誤的原因,請說明叢集設定:

gcloud container clusters describe CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --format='value(controlPlaneEgress)'

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集所在的區域或可用區,例如 us-central1 或 us-central1-a。

如果 API 伺服器的輸出流量已停用,輸出內容會是 NONE。

如要解決這項錯誤,請更新網路鉤子設定,使用 clientConfig.service 欄位。這個欄位可讓 API 伺服器將准入要求傳送至叢集中的 Service,而非 IP 位址或網址。如要進一步瞭解如何設定 Webhook 和服務,請參閱「外部 Webhook 設定」。

如果刪除 ValidatingAdmissionPolicy,建立或更新 Webhook 的要求就會成功,但傳送至 Webhook 伺服器的准入要求會失敗。

外部准入 Webhook 要求失敗

如果您嘗試部署 Kubernetes 資源,而該資源會觸發叢集虛擬私有雲網路以外的許可 Webhook 伺服器,就會發生下列錯誤:

Error from server (InternalError): error when creating "STDIN": Internal error occurred: failed calling webhook WEBHOOK_NAME": failed to call webhook: Post "WEBHOOK_URL": proxyconnect tcp: dial tcp: lookup master-internet-access-unavailable.localhost on 169.254.169.254:53: no such host

如果符合下列所有條件,就會發生這項錯誤:

  • Webhook 設定會使用 IP 位址或網址,與外部 Webhook 伺服器聯絡。
  • 叢集設定會停用控制層 VM 執行個體的外部 IP 位址,防止 Kubernetes API 伺服器直接傳送輸出流量。

如要確認這項錯誤的原因,請說明叢集設定:

gcloud container clusters describe CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --format='value(controlPlaneEgress)'

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集所在的區域或可用區,例如 us-central1 或 us-central1-a。

如果 API 伺服器的 egress 流量已停用,輸出內容會是 NONE。

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

  1. 找出叢集中使用 clientConfig.url 欄位的 ValidatingWebhookConfigurations 或 MutatingWebhookConfigurations。
  2. 更新網路鉤子設定,使用 clientConfig.service 欄位。 這個欄位可讓 API 伺服器將傳送至許可控制器的要求傳送至叢集中的 Service,而不是將流量傳送至 IP 位址或網址。如要進一步瞭解如何設定 Webhook 和服務,請參閱「外部 Webhook 設定」。

觸發許可 Webhook 的 API 要求逾時

問題

如果 API 要求觸發的准入 Webhook 設定為使用 targetPort 不是 443 的服務,要求就會逾時,導致失敗:

Error from server (Timeout): request did not complete within requested timeout 30s
可能原因

根據預設,防火牆不允許 TCP 連線至節點,但通訊埠 443 (HTTPS) 和 10250 (kubelet) 除外。如果沒有允許流量的自訂防火牆規則,准入 Webhook 嘗試透過 443 以外的通訊埠與 Pod 通訊時就會失敗。

解析度

根據特定用途新增防火牆規則。

健康狀態檢查失敗,因此無法建立叢集

問題

使用私人節點集區建立標準叢集後,叢集會停滯在健康狀態檢查步驟,並回報類似下列其中一項的錯誤:

All cluster resources were brought up, but only 0 of 2 have registered.
All cluster resources were brought up, but: 3 nodes out of 4 are unhealthy
可能原因

下列設定可能會導致這項錯誤:

  • 叢集節點無法從 Cloud Storage API (storage.googleapis.com) 下載必要二進位檔。
  • 限制輸出流量的防火牆規則。
  • Shared VPC IAM 權限不正確。
  • 如要使用 Private Google Access,必須為 *.gcr.io 設定 DNS。
解析度

請使用下列其中一個解決方法:

kubelet 無法建立 Pod 沙箱

問題

建立含有私人節點的叢集後,系統會回報類似下列其中一項的錯誤:

Warning  FailedCreatePodSandBox  12s (x9 over 4m)      kubelet  Failed to create pod sandbox: rpc error: code = Unknown desc = Error response from daemon: Get https://registry.k8s.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
可能原因

calico-node或netd Pod 無法連線至「*.gcr.io」。

解析度

請確認您已完成 Container Registry 或 Artifact Registry 的必要設定。

已建立私人節點,但未加入叢集

如果叢集使用的節點僅有私人 IP 位址,通常在虛擬私有雲上使用自訂路由和第三方網路設備時,預設路由 (0.0.0.0/0) 會重新導向至設備,而非預設網際網路閘道。除了控制層連線能力之外,您還必須確保下列目的地可連線:

  • *.googleapis.com
  • *.gcr.io
  • gcr.io

為這三個網域設定 Private Google Access。這項最佳做法可讓新節點啟動並加入叢集,同時限制網際網路繫結流量。

GKE 叢集上的工作負載無法存取網際網路

在具有私人 IP 位址的節點中執行的 Pod 無法存取網際網路。舉例來說,從 Pod exec shell 執行 apt update 指令後,系統會回報類似下列內容的錯誤:

0% [Connecting to deb.debian.org (199.232.98.132)] [Connecting to security.debian.org (151.101.130.132)]

如果叢集中的 Pod 使用的子網路次要 IP 位址範圍未在 Cloud NAT 閘道上設定,則 Pod 無法連線至網際網路,因為 Cloud NAT 閘道未設定外部 IP 位址。

請務必設定 Cloud NAT 閘道,為叢集使用的子網路套用至少下列子網路 IP 位址範圍:

  • 子網路主要 IP 位址範圍 (由節點使用)
  • 叢集中 Pod 使用的子網路次要 IP 位址範圍
  • 用於叢集內服務的子網路次要 IP 位址範圍

詳情請參閱如何新增用於 Pod 的次要子網路 IP 範圍。

無法停用公開叢集的直接 IP 存取權

問題

停用 IP 位址端點後,您會看到類似下列的錯誤訊息:

Direct IP access can't be disabled for public clusters
可能原因

叢集使用舊版網路。

解析度

將叢集遷移至 Private Service Connect。如要進一步瞭解遷移狀態,請 聯絡支援團隊 。

如果叢集正在進行 PSC 遷移,就無法停用直接 IP 存取功能

問題

停用 IP 位址端點後,您會看到類似下列的錯誤訊息:

Direct IP access can't be disabled for public clusters
可能原因

叢集使用舊版網路。

解析度

請使用下列其中一種解決方案:

  • 手動以其他版本重新建立所有節點集區。
  • 等待 GKE 在維護事件期間自動升級節點集區。

無法啟用控制層內部端點

問題

嘗試啟用叢集控制層的內部端點時,您會看到類似下列內容的錯誤訊息:

private_endpoint_enforcement_enabled can't be enabled when envoy is disabled
private_endpoint_enforcement_enabled is unsupported. Please upgrade to the minimum support version
可能原因

叢集需要執行 IP 位址輪替或版本更新。

解析度

請使用下列其中一個解決方法:

定義組織政策時無法建立叢集

問題

嘗試建立叢集時,您會看到類似下列內容的錯誤訊息:

compute.disablePrivateServiceConnectCreationForConsumers violated for projects
可能原因

叢集端點或後端遭到消費者組織政策封鎖。

解析度

如要允許執行個體使用 compute.restrictPrivateServiceConnectProducer 限制建立端點,請完成「消費者端組織政策」中的步驟。

刪除叢集時,Private Service Connect 端點可能會洩漏

問題

建立叢集後,您可能會遇到下列其中一種情況:

  • 在以 Private Service Connect 為基礎的叢集中,您無法在 Private Service Connect 下方看到已連結的端點。

  • 如果叢集使用 Private Service Connect,您就無法刪除為內部端點分配的子網路或虛擬私有雲網路。系統會顯示類似下列內容的錯誤訊息:

    projects/<PROJECT_ID>/regions/<REGION>/subnetworks/<SUBNET_NAME> is already being used by projects/<PROJECT_ID>/regions/<REGION>/addresses/gk3-<ID>
    
可能原因

在採用 Private Service Connect 的 GKE 叢集上,GKE 會使用轉送規則部署 Private Service Connect 端點,該規則會分配內部 IP 位址,用於存取控制層網路中的叢集控制層。為使用 Private Service Connect 保護控制平面與節點之間的通訊,GKE 會隱藏端點,您無法在Google Cloud 控制台或 gcloud CLI 中看到端點。

解析度

為避免在叢集刪除前洩漏 Private Service Connect 端點,請完成下列步驟:

  1. 將 Kubernetes Engine Service Agent role 指派給 GKE 服務帳戶。
  2. 請確認 GKE 服務帳戶未明確拒絕 compute.forwardingRules.* 和 compute.addresses.* 權限。

如果發現 Private Service Connect 端點外洩,請 與支援團隊聯絡 。

無法剖析叢集的授權網路

問題

您無法在 1.29 以上版本中建立叢集。系統會顯示類似下方的錯誤訊息:

Unable to parse cluster.master_ipv4_cidr "" into a valid IP address and mask
可能原因

Google Cloud 專案使用以私人 IP 為基礎的 Webhook。因此,您無法使用 Private Service Connect 建立叢集。而是使用虛擬私有雲網路對等互連,剖析 master-ipv4-cidr 旗標。

解析度

請使用下列其中一種解決方案:

  • 繼續建立虛擬私有雲網路對等互連叢集,並加入 master-ipv4-cidr 來定義有效的 CIDR。這項解決方案有下列限制:

    • Google Cloud 控制台已淘汰 master-ipv4-cidr 旗標。如要更新這個旗標,只能使用 Google Cloud CLI 或 Terraform。
    • 虛擬私有雲網路對等互連在 GKE 1.29 以上版本中已淘汰。
  • 如要遷移以私人 IP 為基礎的 Webhook,請完成「Private Service Connect 限制」一文中的步驟。接著,請 與支援團隊聯絡 ,選擇加入使用具備 Private Service Connect 的叢集。

無法在具有公開節點的叢集中定義內部 IP 位址範圍

問題

您無法使用 --master-ipv4-cidr 旗標定義內部 IP 位址範圍。系統會顯示類似下方的錯誤訊息:

ERROR: (gcloud.container.clusters.create) Cannot specify --master-ipv4-cidr
  without --enable-private-nodes
可能原因

您在未啟用 enable-private-nodes 旗標的叢集中,使用 master-ipv4-cidr 旗標定義控制層的內部 IP 位址範圍。如要建立定義 master-ipv4-cidr 的叢集,請務必使用 enable-private-nodes 旗標,將叢集設定為透過內部 IP 位址 (私人節點) 佈建節點。

解析度

請使用下列其中一個解決方法:

  • 使用下列指令建立叢集:

    gcloud container clusters create-auto CLUSTER_NAME \
        --enable-private-nodes \
        --master-ipv4-cidr CP_IP_RANGE
    

    更改下列內容:

    • CLUSTER_NAME:叢集名稱。
    • CLUSTER_NAME:控制層的內部 IP 位址範圍。
  • 更新叢集,只透過 IP 位址佈建節點。詳情請參閱「設定叢集」。

無法在 Autopilot 叢集上排定公開工作負載

問題
在 Autopilot 叢集上,如果叢集只使用私人節點,您就無法使用 cloud.google.com/private-node=false nodeSelector 在公開 Pod 中排定工作負載。
可能原因
只有 1.30.3 以上版本的叢集,才能在 Pod 的 nodeSelector 中,將 private-node 旗標設定為 false。
解析度
將叢集升級至 1.30 以上版本。

無法存取以 DNS 為基礎的端點

問題

嘗試對叢集執行 kubectl 指令時,會傳回類似下列內容的錯誤:

couldn't get current server API group list:
control_plane_endpoints_config.dns_endpoint_config.allow_external_traffic is
disabled
可能原因

叢集已停用 DNS 存取權。

解析度

使用控制層的 DNS 型端點,啟用控制層存取權。詳情請參閱「修改控制層存取權」。

節點在擴充期間無法分配 IP 位址

問題

嘗試將子網路的主要 IP 位址範圍擴充至授權網路清單時,會傳回類似下列的錯誤:

 authorized networks fields cannot be mutated if direct IP access is disabled
可能原因

您已停用叢集以 IP 為基礎的端點。

解析度

使用 enable-ip-access 旗標停用及啟用叢集以 IP 為基礎的端點。

CIDR 區塊過多

嘗試建立或更新 CIDR 區塊超過 50 個的叢集時,gcloud 會傳回下列錯誤:

ERROR: (gcloud.container.clusters.update) argument --master-authorized-networks: too many args

如要解決這個問題,請嘗試下列做法:

無法連線至伺服器

由於 CIDR 區塊設定錯誤,kubectl 指令逾時:

Unable to connect to the server: dial tcp MASTER_IP: getsockopt: connection timed out

當您建立或更新叢集時,請確保指定正確的 CIDR 區塊。

節點可存取公開容器映像檔,即使網路已隔離也沒問題

問題

您可能會發現,在設定為網路隔離的 GKE 叢集中,提取常見的公開映像檔 (例如 redis) 可以運作,但提取較不常見或私人映像檔則會失敗。

這是 GKE 預設設定的預期行為,並不表示 GKE 繞過了網路隔離。

可能原因

這種行為是由兩項功能共同作用所致:

  • Private Google Access:這項功能可讓具有內部 IP 位址的節點連線至 Google Cloud API 和服務,無須使用公開 IP 位址。在叢集節點使用的 VPC 內,於叢集的子網路上啟用 Private Google Access。使用 --enable-private-nodes 旗標建立或更新叢集或節點集區時,GKE 會自動在這個子網路上啟用 Private Google Access。唯一例外是使用 Shared VPC 時,您必須手動啟用 Private Google Access。
  • Google 的映像檔鏡像 (mirror.gcr.io):根據預設,GKE 會將節點設為優先嘗試從 mirror.gcr.io 提取映像檔。是 Google 代管的 Artifact Registry,會快取經常要求的公開容器映像檔。

當您嘗試提取 redis 等映像檔時,節點會使用 Private Google Access 的私有路徑連線至 mirror.gcr.io。由於 redis 是非常常見的映像檔,因此存在於快取中,且提取成功。不過,如果您要求不在這個公開快取中的圖片,提取作業就會失敗,因為隔離節點無法透過其他方式連線至原始來源。

解析度

如果需要的映像檔不在 mirror.gcr.io 快取中,請在自己的私人 Artifact Registry 存放區中代管。網路隔離節點可透過 Private Google Access 存取這個存放區。

後續步驟