Skip to content
All writing Part 09 of 12 · 在容器裡遙控 Chrome 的完整路由
Engineering · 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 是唯一的門鎖。


參考來源:

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

Tags #kubernetes #chrome-devtools #containers
// connect

Be brave | Be wise | Be grateful

21 BreakinCode

// elsewhere
LinkedInMedium (lang: en)Youtube
wh:~$William Hung· © 2026 Taipei · GMT+8 · Available for collaboration