Skip to content
所有文章 ‹ Part 09 of 12 · 在容器裡遙控 Chrome 的完整路由
工程 · 2 min read

NetworkPolicy:鎖住沒密碼的前門

CDP 沒有密碼,socat 又對整個 cluster 敞開。一條 NetworkPolicy 限制 ingress 只放行 API Pod,再加上兩個要小心的坑。

風險

socat 聽 0.0.0.0:9222。接受 cluster 裡任何 Pod 的連線。CDP 沒有密碼。任何 Pod 連上來就能控制 Chrome:

  • 導航網址
  • 讀取頁面內容
  • 執行 JavaScript
  • 使用付費 proxy 的憑證
沒有 NetworkPolicy cluster 裡任何 Pod Chrome :9222(無認證) SSRF + 憑證外洩 有 NetworkPolicy 只有 render-api Chrome :9222 一個呼叫者,無橫向移動

修復

一條 NetworkPolicy 限制 ingress,只放行 render-api:

spec:
  podSelector:
    matchLabels:
      app: render-chrome
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: render-api
      ports:
        - port: 9222

這條規則告訴 Kubernetes:只有標籤 render-api 的 Pod 能連到 Chrome 的 9222 port。其他全擋。

兩個坑:

  • 共用 cluster 的名稱衝突。 dev 和 staging 在同一個 cluster 時,兩邊的部署都建立同名的 NetworkPolicy。第二個覆蓋第一個。用環境前綴命名:dev-chrome-devtools-ingress。
  • CNI 必須支援。 Calico、Cilium、GKE 預設都可以。Flannel 不行。Policy 會套用,但 traffic 照樣通過。

CDP 沒有密碼。socat 對所有人敞開。NetworkPolicy 是唯一的門鎖。


參考來源:

延伸閱讀: 看打開這扇門的 socat 接線員、路由到 Chrome 的 Headless Service,或回到系列總覽。

↑↓ 移動 ↵ 開啟 esc 關閉