k8s/k3s/minikub coredns 启动失败报错 listen tcp :53: bind: permission denied
目录
一、问题
使用 k8s/k3s/minikub 部署启动时,服务 coredns 启动失败,如下:
[root@master ~]# kubectl get pod -A | grep coredns
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-2ssxlsqw122-qx222 0/1 CrashLoopBackOff 1 (15s ago) 17s
kube-system coredns-7212sx22sd2-cw2sf 0/1 CrashLoopBackOff 1 (14s ago) 16m
一直处于 CrashLoopBackOff 状态
二、原因
查看报错原因
[root@master ~]# kubectl -n kube-system describe pod coredns-2ssxlsqw122-qx222
从输出的结果可以看到: listen tcp :53: bind: permission denied
listen tcp :53: bind: permission denied
翻译过来的意思就是 53 端口权限不足
这是因为 在 Linux 系统中,小于 1024 的端口被认为是特权端口,只有 root 用户 或具有相应权限的进程才能绑定。
所以这里报错的主要原因可能是:
- 部署的 k8s 的 coredns 服务默认监听 53 端口,并且是以非特权用户运行
- 您可能正在 Centos 系统上部署官方的 minukube(简易版的 k8s)
- 您可能正在 Centos 系统上部署 k3s
三、解决
知道原因之后,那么相对应地也有一些解决方法,有以下几种(亲测有效)
(一)重装更换系统(推荐)
如果你现在用的操作系统刚好是 centos 7 版本及之前(有些不会出现这个问题)
那么可以升级操作系统为 Centos 8、OpenCloud OS8、OpenCloud OS9 等都可以解决(亲测可用)
(二)修改coredns 运行权限
既然没有特权,那么就给它特权:强制 CoreDNS 以 root 用户运行(可能带来安全风险):
kubectl edit deployment coredns -n kube-system
containers:
- name: coredns
image: coredns/coredns:1.8.6
securityContext: # 添加此部分
runAsUser: 0 # 使用 root 用户
capabilities:
add: ["NET_BIND_SERVICE"]
allowPrivilegeEscalation: false
保存后 coredns 会自动重启,然后就可以了
⚠️⚠️⚠️:该方式存在一定方式,不建议生产环境使用
版权声明
未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!