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

影響

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

稽核

使用 Google 雲端主控台:
  1. 前往 Kubernetes Engine 網站
  2. 點擊每個叢集,並點擊任何非預設配置的節點池。
  3. 在節點池詳細資訊頁面中,於節點池詳細資訊頁面的安全性標題下,檢查Sandbox with gVisor是否設為已啟動。
預設節點池無法使用 GKE Sandbox。
使用命令列:
執行此命令:
gcloud container node-pools describe $NODE_POOL --cluster $CLUSTER_NAME 
--zone $COMPUTE_ZONE --format json | jq '.config.sandboxConfig'
如果節點池正在運行沙箱,則上述命令的輸出將返回以下內容:
{ 
    "sandboxType":"gvisor" 
}
如果沒有沙盒,上述命令輸出將為空 ({ })。預設節點池無法使用 GKE 沙盒。

補救

一旦建立節點池,GKE Sandbox便無法啟動,必須建立新的節點池。預設節點池(即叢集建立時所建立的第一個節點池)無法使用GKE Sandbox。
使用 Google 雲端主控台:
  1. 前往 Kubernetes Engine 網站
  2. 選取叢集,然後按一下「ADD NODE POOL」
  3. 進行節點池的下列設定:
    • 對於節點版本,請選擇 v1.12.6-gke.8 或更高版本。
    • 對於節點映像,選擇Container-Optimized OS with Containerd (cos_containerd) (default)
    • 在安全性下,選擇「Enable sandbox with gVisor」
  4. 請視需要進行其他節點池設定。
  5. 點擊「SAVE」
使用命令列:
要在現有叢集上啟用 GKE Sandbox,必須建立新的節點池,可以使用以下方法完成:
gcloud container node-pools create <node_pool_name> --zone <compute-zone> 
--cluster <cluster_name> --image-type=cos_containerd --sandbox="type=gvisor"

其他資訊:

預設節點池(在叢集建立時創建的第一個節點池)無法使用 GKE Sandbox。
在使用 GKE Sandbox 時,您的叢集必須至少有兩個節點池。您必須始終至少有一個節點池未啟用 GKE Sandbox。即使您所有的工作負載都已沙箱化,該節點池也必須至少包含一個節點。
雖然是可選的,但建議您透過添加標誌--enable-stackdriver-kubernetes啟用 Stackdriver Logging 和 Stackdriver Monitoring。gVisor 訊息已被記錄。