目录

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

保存后会重启