檢視次數:
設定檔適用性:等級 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 命名空間
  • 僅當為 Pod 中運行的所有容器指定了 CPU 和記憶體限制時,CPU 和記憶體限制才會應用於保證型 Pod 和可突發型 Pod
  • 使用指定主機命名空間的 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 訊息已被記錄。