K8S 踩坑經驗+1:Calico一直重啟,原因居然是這個....
今天分享一個Kubernetes部署時很基礎又很容易踩的坑:網段規劃。

1. 故障現象
昨天在給社群的運維同行答疑時,一個運維同行說他剛部署的Kubernetes集群的Calico顯示是 CrashLoopBackOff狀態,一直在不斷重啟。

2. 解決問題
我開始讓他describe看一下Pod的狀態。

看截圖是就緒檢測時失敗了,無法連接 API Server。
為了更快地解決問題,我通過遠程工具連接他的電腦進行操作。
我一開始看失敗的pod的日志。執行下面命令:
kubectl logs -n kube-system calico-kube-controllers-775fd85945-bx8fk查看到日志里的關鍵報錯。
Get "https://10.224.0.1:443/apis/crd.projectcalico.org/v1/clusterinformations/default": dial tcp 10.224.0.1:443: i/o timeout也就是說Calico 控制器(calico-kube-controllers)在 啟動時無法訪問 Kubernetes API Server(10.224.0.1:443)。
Calico 連不上 API Server。 這基本等同于網絡“斷了主干線”。
這時我已經考慮可能是網絡的原因,檢查了防火墻,結果都是關閉的,那很可能是Kubernetes網絡問題。
在群友提供的截圖還有一個pod沒有完全起來,那就是CoreDNS處于Running 但未就緒(Ready=False)狀態。
于是我順手看了下 CoreDNS 的信息:
kubectl describe po coredns-757cc6c8f8-4t6qt -n kube-system果然,熟悉的錯誤出現了:
Readiness probe failed: HTTP probe failed with statuscode: 503這時候可以肯定,問題不在鏡像,也不在探針。整個 Pod 網絡已經失聯。出現503狀態
接著我檢查了主機IP,找到了最根本的原因:Pod網絡和宿主機網絡沖突了

群友初始化時將Pod網段設置為192.168.0.0/16, 而他的宿主機的網卡就在 192.168.169.0/24,宿主機網段在Pod網段里。
這倆網段就重疊了!
3. 根本原因
最根本原因是網段沖突了,Pod流量被錯誤地送進了“虛擬網卡”
因為這次網段沖突,Pod 想訪問 API Server時,路由表判斷:“192.168?那是我 Calico 管的”,于是流量被錯誤地送進了虛擬網卡 caliXXX,然后直接丟包。
最后讓群友修改網段重新初始化后,Kubernetes集群所有的Pod都已正常運行。

4. 后續正確做法
為避免這種坑,記住一個原則:Pod 網段、Service 網段、宿主機網段,絕對不能重疊。
Kubernetes 的網絡設計,本質上有三層獨立的網段: 每一層都要 相互隔離、不重疊、不沖突。
網絡類型 | 用途說明 | 推薦網段示例 | 備注 |
宿主機網絡(Node Network) | 物理機、虛擬機、主機之間通信 |
或 | 取決于你公司內網規劃 |
Pod 網絡(Pod CIDR) | 容器之間通信(由 Calico/Flannel 分配) | 推薦: | 不要與宿主機或 VPN 網段重疊 |
Service 網絡(Service CIDR) | ClusterIP、kube-dns、kubernetes API 等虛擬 IP 段 | 推薦: | 不要與 Pod CIDR 或宿主機沖突 |
5. 其他啟示
本次排查過程,還可以得出下面三個啟示:
- Calico 不停重啟 ≠ 鏡像問題,很多時候是底層網絡沖突。
- 先看 CoreDNS、再查 Calico 路由表,能快速定位問題。
- 網段規劃要在集群初始化前定好,別用宿主機的同一段。






























