容器网络不是黑盒子
很多人觉得容器跑起来就完事了,网络问题扔给平台就行。可真等到服务之间调不通、跨节点访问延迟高时,才发现路由配置早就乱成一锅粥。尤其是在Kubernetes这类编排系统里,Pod频繁创建销毁,IP来回变,靠手动记路由根本不现实。
比如你公司上线个促销活动,订单服务突然扩容到上百个实例,结果库存服务怎么都连不上新实例。查了一圈发现是节点上的iptables规则没更新,旧的路由条目还占着位置。这种时候就得明白:容器网络的路由,得有人盯。
路由表得跟着容器走
传统服务器改个静态路由,改完能用好几年。但容器不一样,一个Node上可能今天跑着Java应用,明天就换成Python微服务,IP段全变了。这时候如果还依赖手动配置,不出三天运维就得通宵。
常见的CNI插件像Calico、Flannel其实都在底层操作路由表。以Flannel为例,它会在每个节点上生成一个叫flannel.1的虚拟网卡,然后通过内核路由把目标Pod网段的流量引过去。一旦节点重启或者网络插件异常,这个路由项丢了,容器之间就断联了。
ip route show | grep 10.244.
10.244.1.0/24 via 10.244.1.0 dev flannel.1
10.244.2.0/24 via 10.244.2.0 dev flannel.1上面这行命令查出来的结果,就是当前节点知道的Pod网段转发路径。每天巡检一下这个列表,比等报警再冲进机房强得多。
别让策略冲突拖后腿
有些团队为了安全,在节点上加了严格的iptables规则,结果把CNI插件需要的VXLAN端口(通常是8472或8473)给封了。容器网络走不了隧道协议,只能在本机通信,跨主机直接歇菜。这种问题不在测试环境暴露,一上生产立马出事。
还有种情况是多个CNI插件混用,比如一边用Calico做网络策略,另一边又上了Cilium想试Service Mesh。两个都往路由表里写规则,谁也不服谁,最后路由表被反复覆盖,丢包率蹭蹭涨。这种情况得提前约定好单一数据面,别搞“双保险”反而变成双故障。
自动化检测比人工更靠谱
与其等业务报障说“调用超时”,不如自己写个脚本定时检查。比如从每个节点发个探测包到其他节点的Pod网段,看能不能通。不通就自动触发修复流程,重装CNI Pod或者重启kube-proxy。
我们组就写了个小工具,每天早上八点跑一遍全集群路由连通性测试,结果直接钉钉推送到群里。谁家服务路由异常,负责人名字后面就标个红标。几次下来,大家自己就主动去修了,不用等着被点名。
容器网络的路由维护,本质是动态环境下的持续同步。你没法一劳永逸,但可以做到快速发现问题、快速恢复。把路由当成活的东西来养,而不是设完就忘的静态配置,才是正路。