环境信息
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