要解决 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。尝试这些方法并查看效果,如果仍有问题,请提供更多详细信息。