Share Notes

chundev

View the Project on GitHub latteouka/share-notes

K3s 部署前的 IP 規劃 — 4 節點不等於 4 個 IP

日期:2026-05-08 情境:客戶機房交付 K3s 叢集前的 IP 需求清單


TL;DR

跟客戶要 IP 時,「4 台 K3s 節點 = 4 個 IP」是常見低估。實際上至少要再加:1 個 Ingress VIP(對外入口)1 個 NAS / 共用儲存1 個管理跳板,必要時再加 1 個 control-plane VIP(HA 用)和每台機器的 BMC IP。一個 4 節點叢集典型佔用 6–11 個 IP,不是 4 個。


背景

K3s 跟標準 kubeadm 不同,server/agent 角色設計很彈性 — control-plane 可以同時跑 workload,所以工程師常以為「節點數就是 IP 數」。但部署到客戶機房時,IP 規劃要在裝機前就確定(防火牆、DNS、憑證),低估 IP 會讓上線延期一週。


K3s 的角色術語

K3s 文件用的詞跟 kubeadm 不一樣,先對齊:

K3s 用語 kubeadm 等價 跑什麼
Server node Control-plane node API server、scheduler、controller-manager、etcd(如果用 embedded etcd)
Agent node Worker node 只跑 workload pods
Server + workloads Control-plane + worker(taint 移除) 兩者都跑 — K3s 預設行為

關鍵差異:K3s 的 server node 預設沒有 NoSchedule taint,會直接接受一般 pod 排程。這代表 3 台 server node 同時就是 3 台 worker,省去獨立 control-plane 機器的成本。


IP 需求拆解

1. K3s 節點本身

每台實體機 / VM 一個 internal IP,這部分大家都會算。

拓撲 節點數 適合場景
單 server(dev / 邊緣) 1 POC、邊緣裝置
3 server + N agent 3+N 生產 HA 推薦(embedded etcd quorum)
1 server + N agent 1+N 預算受限、可容忍 control-plane 單點

為什麼 HA 要 3 個 server? Embedded etcd 用 Raft 共識,需要 odd number 維持 quorum:quorum = (n/2)+1。3 台 server 容忍 1 台壞掉;5 台容忍 2 台。2 台 server 不會更穩 — 反而失去 quorum,整個 cluster 卡死。

2. 對外服務入口(Ingress / LoadBalancer)

這是最常被忽略的一個 IP。

K3s 預設裝 Traefik + ServiceLB(Klipper),會在每個節點開 80/443 host port 收 traffic。但這代表:

正確做法是規劃一個專屬的 VIP

方案 工具 額外 IP
Cluster 內浮動 VIP kube-vip / MetalLB +1(從 LAN 撥一段給它)
外部硬體 LB F5、A10、雲廠商 LB +1(LB 對外 IP)
DNS round-robin 不推薦 0(但有 failover 問題)

→ 所有對外 hostname(app.example.comgrafana.example.comkibana.example.com)都 CNAME 到這個 VIP,由 Ingress 依 Host header 分流。1 個 VIP 服務 N 個應用

3. Control-plane VIP(選配,HA 才需要)

如果做 3 個 server node 的 HA,kubectl 和 agent 連 API server 時要連哪個 server IP?

→ HA 部署 +1 個 IP,單 server 可省。

4. 共用儲存(NFS / iSCSI)

CSI driver 連的儲存伺服器 IP。如果用:

→ 多數地端部署 +1 個 IP

5. 管理跳板(Jump Host)

「ctl 機」常被誤解為叢集內的角色,但實務上指的是叢集外kubectl 和 deploy script 的機器。

形態 是否需要 IP 說明
工程師 laptop(VPN) 0(已有) dev / staging 常見
機房內 VM +1 客戶資安要求常見 — 不允許工程師直連節點,必須經跳板
CI runner +1(如果要在內網) Self-hosted runner 跑部署

→ 客戶機房交付通常 +1 個 IP

6. BMC / iDRAC / IPMI(實體機才有)

每台實體機的帶外管理 IP,跟 OS 跑的 IP 是不同網卡。客戶機房通常會要求所有實體機都接 BMC 網段。

+N 個 IP(每台實體機一個)。


典型配置範例

範例 A:HA 生產(4 實體機)

3 × Server (control-plane + worker)  → 3 IP
1 × Agent (worker only)              → 1 IP
1 × Ingress VIP                      → 1 IP
1 × Control-plane VIP                → 1 IP
1 × NAS                              → 1 IP
1 × 跳板 VM                          → 1 IP
4 × BMC                              → 4 IP
─────────────────────────────────────────
總計                                 → 12 IP

範例 B:精簡部署(4 實體機,可容忍 control-plane 單點)

1 × Server (control-plane + worker)  → 1 IP
3 × Agent                            → 3 IP
1 × Ingress VIP                      → 1 IP
1 × NAS                              → 1 IP
1 × 跳板                             → 1 IP
─────────────────────────────────────────
總計                                 → 7 IP
(不含 BMC)

範例 C:dev / POC(單機)

1 × Single server                    → 1 IP
(用 ServiceLB 直接吃節點 80/443)
─────────────────────────────────────────
總計                                 → 1 IP

學到的事


參考資料