LinQ
发布于 2024-07-25 / 106 阅读 / 0 评论 / 0 点赞

RKE集群升级coredns问题处理

环境信息

RKE版本:v1.29.6
centos 7.9

故障现象

升级RKE集群: 从 v1.28.11-rancher1-1 升级到 v1.29.6-rancher1-1
升级后coredns无法启动,报错: listen tcp :53: bind: permission denied

解决方案

查找互联网关于解决该问题的方法,定位发现是由于在Linux系统中,非root用户通常不能绑定低于1024的端口。
RKE 安装时是创建了rancher 用户启动的docker。进一步查到发现github 上关于该问题的讨论:
https://github.com/kubernetes/kubernetes/issues/125226

关于同样问题的评论:

问题可能与我在 Centos7 节点上运行(使用 Docker 容器运行时)有关......

coreDNS 1.11.1(随 Rancher 1.29 一起提供)的 SecurityContext 发生了变化

解决办法:在 SecurityContext 中将“allowPrivilegeEscalation”设置为 true。
Notes: 笔记:

“Kubernetes v1.29.0+ 使用 CoreDNS v1.11.1,从 v1.11.0 开始,CoreDNS 以非 root 用户身份运行” 从添加默认 sysctls 到允许没有功能的特权端口 minikube#18421 
◊ RKE 1.29 中的版本:rancher/mirrored-coredns-coredns:1.11.1 
◊ RKE 1.28 中的版本:rancher/mirrored-coredns-coredns:1.10.1

“我认为它与 Centos 7 特别相关,Centos 7 将在本月末(2024 年 6 月)停产,因此可能无法向后移植必要的修复(例如,设置 net.ipv4.ip_unprivileged_port_start)” 

centos 7.9 中无法通过设置 net.ipv4.ip_unprivileged_port_start 解决,
最后解决选择了 修改 coredns 的 SecurityContext 的 allowPrivilegeEscalation 为 true

      securityContext:
        allowPrivilegeEscalation: true

评论