Engineering · 3 min read
Port Contract 與 Helm 的 default() 陷阱
五層設定必須對齊 port 號碼。Helm 的 default() 會靜默填入錯誤的值。required() 在部署時就抓到錯誤。
五層設定鏈
帶 port relay 的容器化服務有五層設定。每一層必須和鄰居對齊。任何一層不對,都是靜默失敗:Pod 啟動,沒有報錯,但連線失敗。
兩個 Helm values 控制一切。socat、Chrome、containerPort、Service.targetPort 全部追溯到這兩個數字。
default() 的陷阱
Helm 的 default 在值缺失時回傳 fallback。如果 fallback 合法但錯誤,template 正常渲染。Bug 只在 runtime 才出現。
default() vs required()
「Review 時看到
default接著一個不同的 port 號碼、不同的 image tag、或空字串的 secret name,那就是一顆地雷。」
參考來源:
Related: 見 entrypoint 如何啟動 socat(這些值的下游消費者),或回到系列總覽。