要解决 coredns 无法绑定到低于 1024 的端口(如端口 53)的权限问题,可以通过启用 containerd 的配置选项来允许非特权端口绑定。具体步骤如下:

1. 编辑 containerd 配置文件

打开 containerd 的配置文件 /etc/containerd/config.toml

sudo nano /etc/containerd/config.toml

2. 修改配置文件

在配置文件中找到或添加 enable_unprivileged_ports 配置项,将其设置为 true。示例如下:

[plugins."io.containerd.grpc.v1.cri"]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd]
    ...
    enable_unprivileged_ports = true

3. 重启 containerd 服务

保存并关闭配置文件后,重启 containerd 服务以使配置生效:

sudo systemctl restart containerd

4. 确认配置生效

重启 coredns pod 并查看其状态和日志,确认是否解决了权限问题:

kubectl -n kube-system rollout restart deployment coredns
kubectl get pods -n kube-system
kubectl logs -n kube-system coredns-<pod-name>

其他方法

如果不希望修改 containerd 配置文件,还可以使用以下替代方法:

修改系统 sysctl 设置

直接修改系统的 sysctl 设置,允许非特权端口绑定:

sudo sysctl -w net.ipv4.ip_unprivileged_port_start=0

要使其永久生效,可以将其添加到 /etc/sysctl.conf 文件:

echo "net.ipv4.ip_unprivileged_port_start=0" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
修改 coredns deployment 以使用特权权限

如前文提到的,可以在 coredns deployment 中添加 securityContext 以增加 NET_BIND_SERVICE 权限。

执行上述步骤后,coredns 应该能够成功绑定到端口 53。尝试这些方法并查看效果,如果仍有问题,请提供更多详细信息。

06-04 05:13