檢視次數:
設定檔適用性:等級 2
使用 GKE Sandbox 來限制不受信任的工作負載,作為在多租戶環境中運行時的額外保護層。
GKE Sandbox 提供額外的安全層,以防止不受信任的代碼影響您叢集節點上的主機核心。當您在節點池上啟用 GKE Sandbox 時,會為該節點池中節點上運行的每個 Pod 創建一個沙箱。
此外,運行沙盒化 Pods 的節點被禁止訪問其他 GCP 服務或叢集中繼資料。每個沙盒使用其自己的用戶空間核心。多租戶叢集和其容器運行不受信任工作負載的叢集比其他叢集更容易暴露於安全弱點。
範例包括SaaS提供商、網頁託管提供商或其他允許其使用者上傳和執行程式碼的組織。容器執行環境或主機核心中的缺陷可能會使在容器內運行的進程逃逸出容器並影響節點的核心,可能導致節點崩潰。
此缺陷可能會被惡意租戶利用,以存取和竊取其他租戶在記憶體或磁碟上的資料。
注意
注意
預設情況下,GKE Sandbox 是停用的。

影響

使用 GKE Sandbox 需要將節點映像設置為 Container-Optimized OS 並使用 containerd (cos_containerd)。
目前無法將 GKE Sandbox 與以下 Kubernetes 功能一起使用:
  • 加速器如 GPU 或 TPU
  • Istio
  • 在 Pod 或容器層級監控統計數據
  • Hostpath 存儲
  • 每個容器的 PID 命名空間
  • CPU 和記憶體限制僅適用於保證型 Pods 和可突發型 Pods,且僅在 Pod 中所有容器都指定了 CPU 和記憶體限制時才會生效
  • 使用指定主機命名空間的 PodSecurityPolicies 的 Pods,例如 hostNetworkhostPIDhostIPC
  • 使用 PodSecurityPolicy 設定(例如特權模式)的 Pods
  • 磁碟裝置
  • 埠轉發
  • Linux 核心安全模組,例如 Seccomp、Apparmor 或 Selinux Sysctl、NoNewPrivileges、雙向 MountPropagation、FSGroup 或 ProcMount

稽核

使用 Google Cloud 主控台:
  1. 前往 Kubernetes Engine,請造訪:Google Cloud Console Kubernetes Engine 頁面
  2. 點擊每個叢集,並點擊任何非預設配置的節點池。
  3. 在節點池詳細資訊頁面中,於安全性標題下,檢查 Sandbox with gVisor 是否已設為已啟動。
預設節點池無法使用 GKE Sandbox。
使用命令列:
首先定義三個變數:節點池、叢集名稱、位置資訊和專案,然後執行此命令:
gcloud container node-pools describe $NODE_POOL --cluster $CLUSTER_NAME -- 
location $LOCATION --project $PROJECT_ID --format json | jq '.config.sandboxConfig' 
如果節點池正在運行沙盒,上述命令的輸出將返回以下內容:
{ "sandboxType":"gvisor" }
如果沒有沙箱,上述命令輸出將為空 ({ })。預設節點池無法使用GKE Sandbox

補救

一旦建立節點池,GKE Sandbox便無法啟動,需建立新的節點池。預設節點池(即叢集中的第一個節點池,於建立叢集時建立)無法使用GKE Sandbox
使用 Google Cloud 主控台:
  1. 前往 Kubernetes Engine,請造訪:Google Cloud 文件
  2. 選擇叢集並點擊新增節點池。
  3. 使用以下設定配置節點池: o 對於節點版本,選擇 v1.12.6-gke.8 或更高版本。 o 對於節點映像,選擇 Container-Optimized OS with Containerd (cos_containerd)(預設)。 o 在安全性下,選擇啟用沙盒,使用 gVisor
  4. 請視需要進行其他節點池設定。
  5. 點擊儲存。
使用命令列:要在現有叢集上啟用GKE Sandbox,必須建立新的節點池,可以使用以下方法完成:
gcloud container node-pools create <node_pool_name> --location <location> - -cluster <cluster_name> --image-type=cos_containerd --sandbox="type=gvisor"

其他資訊

預設節點池(在建立叢集時創建的第一個節點池)無法使用 GKE Sandbox。
使用 GKE Sandbox 時,您的叢集必須至少有兩個節點池。您必須始終至少有一個節點池禁用 GKE Sandbox。即使所有工作負載都已沙盒化,此節點池也必須至少包含一個節點。
您可以選擇性地啟用 Stackdriver Logging 和 Stackdriver Monitoring,建議您透過加入標誌 --enable-stackdriver-kubernetes 來啟用。gVisor 訊息會被記錄。