Kubernetes Calico网络重大故障排查实战

引言

    在当前的Kubernetes实践环境中,Calico作为优选的网络解决方案应用非常广泛,它提供了高效的网络连接和安全策略管理,是构建和维护大规模云基础设施的关键组件,所以其稳定运行至关重要。

Calico的简介与原理

    Calico是一个纯三层的数据中心网络方案,它提供了高性能、大规模的网络解决方案,支持动态路由、网络策略和网络隔离等功能。Calico利用标准的IP路由,简化了网络布局,同时也支持广泛的私有云和公有云平台。

核心原理:

  • IP路由:Calico使用基于IP的路由而不是传统的overlay网络,这减少了封包封装的开销,提高了网络性能。

  • 网络策略:提供细粒度的网络安全策略,可以控制哪些Pod可以通信。这是通过直接与Kubernetes API集成来实现的,使得策略定义既直观又灵活。

  • BGP(Border Gateway Protocol):Calico使用BGP来广播和学习路由,这使得它能够在不同的物理和云基础设施上无缝工作。

    Calico在Kubernetes环境中尤其重要,因为它不仅提供容器网络接口(CNI),还提供网络安全策略,确保Pod间的安全通信。

故障描述

    最近,在技术交流群里有兄弟反馈他们生产环境的k8s集群出现Calico Controller无法正常启动的情况,报cannot find a qualified ippool,业务Pod也无法正常重启,这是一个很严重且比较罕见的故障,Calico的故障可能导致Pod与Pod的通信中断、新启动的Pod无法正常获取ip导致启动失败等问题,如果不及时处理或者处理姿势不对,将有可能升级为更大的故障。

故障排查

    看到下图的报错内容,起初想到的是可能是ip地址池满了,亦或ip地址池被删?被禁用?于是,我们开始沿着这个思路进行排查,但关键是我们要怎么查看Calico ip地址池的状态呢? 

是的,我们需要借助一个工具叫calicoctl,如下是二进制安装方法

# 下载calicoctl二进制文件
curl -o calicoctl -O -L "https://github.com/projectcalico/calico/releases/download/v3.24.1/calicoctl-linux-amd64" 

# 赋予可执行权限
chmod +x calicoctl

# 将calicoctl复制到/usr/bin目录下
mv calicoctl /usr/bin/

安装完成后,我们可以根据如下指令查看ipPool状态

calicoctl get ipPool -o wide

从结果我们得知ip地址池是有的,只是被禁用了,DISABLED的状态被设置为true,将其改为false后故障估计就能恢复

解决过程

在定位到问题后,我们尝试着通过下面的指令将ip地址池状态修改为启用

calicoctl patch ippool default-ipv4-ippool -p '{"spec": {"disabled": false}}'

在执行指令后通过calicoctl get ippool -o yaml查看ip地址池状态,发现未能得偿所愿,disabled还是true,Why???这就有点蛋疼了。。。

要怎么办呢?反正地址池也用不了,要么我们重建一个?但是直接删吗?不,运维人员要有备份的习惯,我们通过calicoctl get ippool -o yaml将配置进行备份,然后通过下面的指令删除现有的ip地址池

calicoctl delete ippool default-ipv4-ippool

接着,我们用下面的指令进行创建

calicoctl create -f - <<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: default-ipv4-ippool
spec:
  cidr: 10.233.64.0/18
  ipipMode: Always
  natOutgoing: true
EOF

在创建完成后,我们再次执行calicoctl get ippool -o wide观察到ip地址池已经启用了,牛逼!!!

接着,就是重启Calico Controller的Pod,然后可以从Pod事件日志中我们看到Calico Controller已经正常启动了,重新启动的业务Pods也可以正常获取到ip并完成启动,故障解决。

总结

    当涉及到生产环境,尤其是核心组件的变更时,我们必须持有敬畏之心。在进行任何关键变更之前,都应该进行充分的预演,以确保我们了解变更的影响和可能的风险。特别是在遇到Calico故障时,务必保持冷静,不要仓促行动。切记不要随意重启容器,因为这可能导致容器无法启动。在执行任何操作之前,必须确保操作符合我们的认知,不清楚的情况下,绝对不要随意尝试,分享就到这里,谢谢!

欢迎订阅我的公众号「SRE运维手记」,可扫下方二维码,或者微信搜“SRE运维手记”

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值