首页 > 其他分享 >Kubernetes Calico网络重大故障排查实战

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

时间:2024-06-02 23:32:16浏览次数:26  
标签:calicoctl Kubernetes 故障 ip 排查 Pod ippool 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运维手记”

 

标签:calicoctl,Kubernetes,故障,ip,排查,Pod,ippool,Calico
From: https://blog.csdn.net/weixin_41350845/article/details/139399388

相关文章

  • ProcDump工具的基本用法和功能,并掌握如何利用它进行进程监视、性能分析和故障排查,从而
    ProcDump初级应用的大纲:1.ProcDump简介与基本用法介绍ProcDump工具的基本作用和功能。演示如何使用ProcDump来监视进程并在满足指定条件时生成转储文件。2.进程监视与性能分析探讨如何使用ProcDump监视进程的CPU利用率、内存占用等性能指标。演示如何利用ProcDump生成......
  • Kubernetes 多集群通信的五种方案
    Kubernetes多集群通信的五种方案原创 oilbeater 我的观点 2024-05-3108:03 北京 听全文oilbeater读完需要8分钟速读仅需3分钟随着企业的业务规模不断扩大,Kubernetes的使用也从单集群逐步扩展到多集群部署。多集群环境下,集群之间的通信成为一个重要的研究课......
  • 在Linux中,如何进行网络故障排查?
    在Linux中进行网络故障排查时,通常需要遵循一系列步骤来确保能够准确定位并解决问题。以下是一个详细的网络故障排查流程:1.检查物理连接确保网线连接稳固,无物理损坏,尝试更换网线或端口。检查网络设备(如交换机、路由器)的端口状态和连接,确保它们正常工作。2.使用ping命令测试......
  • 43-1 应急响应 - Windows入侵排查实验
     环境准备:(我之前学过b站web小迪安全的免费教程所以有点安全基础,这里就自己尝试搭建一下靶场吧)1.我这里使用CS随便生成一个木马,然后复制到windows虚拟机中运行黑客必备利器:如何在系统上安装和使用CobaltStrike(简称:CS)_cobaltstrike-CSDN博客2.然后在windows靶机中给......
  • 43-2 Linux入侵排查实验
    环境准备:老规则,我没有靶场就自己搭建了类似, 这里准备一台CentOS7虚拟机作为受害者,然后使用CS制作木马并在受害者主机上线,具体过程可以看我之前写的一篇文章:黑客必备利器:如何在系统上安装和使用CobaltStrike(简称:CS)_cobaltstrike-CSDN博客 最终的效果一、事件背景:客......
  • Kubernetes——YAML文件编写
    目录一、创建Kubernetes对象YAML文件必备字段1.apiVersion2.kind3.metadata4.spec二、YAML格式基本规范1.结构表示2.键值对3.列表(数组)4.字典(映射)5.数据类型6.注释7.多文档支持8.复杂结构9.示例 三、YAML文件编写1.YAML文件的组成2.生成YAML文件框架2.1--d......
  • Kubernetes 集群的节点安装 kubectl
    如果您在机器上没有kubectl,但您有权限访问Kubernetes集群的节点,并且您有集群的kubeconfig文件,您可以手动创建或者传输kubeconfig文件到您的机器上。kubeconfig文件包含了访问Kubernetes集群所需的配置信息,包括集群地址、认证信息、默认命名空间等。通常情况下,kubeconf......
  • error: no configuration has been provided, try setting KUBERNETES_MASTER environ
    1:问题kubernetes集群,一台master,一台node1,一台node2,重启电脑后,node1节点和node2节点报错如下error:noconfigurationhasbeenprovided,trysettingKUBERNETES_MASTERenvironmentvariable2:解决方法2.1:查看master节点进入到该目录下cd/etc/kubernetes把admi......
  • Kubernetes脑图
          对于非技术人员来说,Kubernetes(常简称为K8s或Kube)是一个开源平台,它能让Linux容器的操作变得更加自动化和高效。以下是针对非技术人员的Kubernetes介绍,用简洁明了的方式解释了其主要特点和功能:定义和起源:Kubernetes(发音类似于“koo-ber-nay-tees”)源自希腊语,意为“舵......
  • [转帖]一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问
     https://segmentfault.com/a/1190000044152595 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明。问题现象7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值85%),而我们是按容器内存60%(9.6G)的比例配置的JVM堆内存......