Skip to content
All writing Part 06 of 12 · 在容器裡遙控 Chrome 的完整路由
Engineering · 3 min read

Port Contract 與 Helm 的 default() 陷阱

五層設定必須對齊 port 號碼。Helm 的 default() 會靜默填入錯誤的值。required() 在部署時就抓到錯誤。

五層設定鏈

帶 port relay 的容器化服務有五層設定。每一層必須和鄰居對齊。任何一層不對,都是靜默失敗:Pod 啟動,沒有報錯,但連線失敗。

Helm values(唯一的真相來源) port: 9222 debugPort: 9223 Deployment template CHROME_FORWARD_PORT = port(socat 聽的) CHROME_DEBUG_PORT = debugPort(Chrome 聽的) containerPort = port --remote-debugging-port Service targetPort = port 其他 Pod 打的 port 兩個 Helm values 控制全部五層

兩個 Helm values 控制一切。socat、Chrome、containerPort、Service.targetPort 全部追溯到這兩個數字。

default() 的陷阱

Helm 的 default 在值缺失時回傳 fallback。如果 fallback 合法但錯誤,template 正常渲染。Bug 只在 runtime 才出現。

{{ .somePort | default 8080 }} .somePort = 9222 結果:9222 正確 .somePort =(沒設定) 結果:8080 錯誤,但不報錯

default() vs required()

有沒有「任何合理的 fallback 都能用」? 可以 default() 安全 replica count、log level、timeout 不行 用 required() port 號碼、image tag、secret 名稱 default():值缺失時靜默使用 fallback required():值缺失時 template 直接失敗,訊息清楚 部署時報錯,永遠好過 runtime 靜默失敗。

「Review 時看到 default 接著一個不同的 port 號碼、不同的 image tag、或空字串的 secret name,那就是一顆地雷。」


參考來源:

Related:entrypoint 如何啟動 socat(這些值的下游消費者),或回到系列總覽

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