一次kubesphere集群网络故障的解决

前言

Kubesphere 是青云公司开源的一款 Kubernetes 发行版,有比较漂亮的 kubernetes 集群管理界面,我们用 Kubesphere 来作为开发平台。

本文记录了一次 kubesphere 环境下的网络故障的解决过程。

现象

开发同学反馈自己搭建的 harbor 仓库总是出问题,有时候可以 pull 镜像成功,有时候报 net/http: TLS handshake timeout , 通过 curl 的方式访问 harbor.xxx.cn ,也会随机频繁挂起。但是 ping 的反馈一切正常。

原因分析

接到错误报障后,经过了多轮分析,才最终定位到原因,应该是安装 kubesphere 时,使用了最新版的 kubernetes 1.23.1 。
虽然使用 ./kk version --show-supported-k8s 可以看到 kubesphere 3.2.1 可以支持 kubernetes 1.23.1 ,但实际上只是试验性支持,有坑的。

基本上分析过程如下:

  1. 出现 harbor registry 访问问题,下意识以为是 harbor 部署有问题,但是在检查 harbor core 的日志的时候,没有看到异常时有相应错误信息,甚至 info 级别的日志信息都没有。

  2. 又把目标放在 harbor portal , 查看访问日志,一样没有发现异常信息.

  3. 根据访问链,继续追查 kubesphere-router-kubesphere-system , 即 kubesphere 版的 nginx ingress controller ,同样没有发现异常日志。

  4. 尝试在集群内其他 pod 里访问 harbor 的集群内 service 地址,发现不会出现访问超时问题。初步判断是 kubesphere 自带的 ingress 的问题。

  5. 把 kubesphere 自带的 ingress controller 关闭,安装 kubernetes 官方推荐的 ingress-nginx-controller 版本, 故障依旧,而且 ingress 日志里也没有发现异常信息。

  6. 综合上面的分析,问题应该出现在客户端到 ingress controller 之间,我的 ingress controller 是通过 nodeport 方式暴露到集群外面。因此,测试其他通过 nodePort 暴露到集群外的 service,发现是一样的故障,至此,可以完全排除 harbor 部署问题了,基本确定是客户端到 ingress controller 的问题。

  7. 外部客户端通过 nodePort 访问 ingress controller 时,会通过 kube-proxy 组件,分析 kube-proxy 的日志,发现告警信息

can’t set sysctl net/ipv4/vs/conn_reuse_mode, kernel version must be at least 4.1

这个告警信息是因为我的 centos 7.6 的内核版本过低, 当前是 3.10.0-1160.21.1.el7.x86_64 ,与 kubernetes 新版的 ipvs 存在兼容性问题。

可以通过升级操作系统的 kernel 版本可以解决。

  1. 升级完 kernel 后,calico 启动不了,报以下错误信息
ipset v7.1: kernel and userspace incompatible: settype hash:ip,port with revision 6 not supported by userspace.

原因是安装 kubesphere 时默认安装的 calico 版本是 v3.20.0 , 这个版本不支持最新版的 linux kernel ,升级后的内核版本是 5.18.1-1.el7.elrepo.x86_64,calico 需要升级到 v3.23.0 以上版本。

  1. 升级完 calico 版本后,calico 继续报错
user "system:serviceaccount:kube-system:calico-node" cannot list resource "caliconodestatuses" in api group "crd.projectcalico.org"

还有另外一个错误信息,都是因为 clusterrole 的资源权限不足,可以通过修改 clusterrole 来解决问题。

  1. 至此,该莫名其妙的网络问题解决了。

解决过程

根据上面的分析,主要解决方案如下:

升级操作系统内核

  1. 使用阿里云的 yum 源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum -y update
  1. 启用 elrepo 仓库
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值