k8s/k3s/minikube coredns 启动报错listen tcp :53: bind: permission denied
目录
k8s coredns 启动报错listen tcp :53: bind: permission denied
一、问题
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
查看报错原因
[root@master ~]# kubectl -n kube-system describe pod coredns-2ssxlsqw122-qx222
从输出的结果可以看到: listen tcp :53: bind: permission denied
二、解决
listen tcp :53: bind: permission denied
这是因为 在 Linux 系统中,小于 1024 的端口被认为是特权端口,只有 root 用户 或具有相应权限的进程才能绑定。
报错主要原因:
- 部署的 k8s 的 coredns 服务默认监听 53 端口,并且是以非特权用户运行
- 您可能正在 Centos 系统上部署官方的 minukube(简易版的 k8s)
- 您可能正在 Centos 系统上部署 k3s
解决方法有以下几种,亲测有效
(一)重装更换系统(推荐)
亲测升级为 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
保存后会重启