CentOS 上 Kubernetes 无法访问 是很常见的问题,原因很多,需要分场景排查。下面我按最常见原因 + 排查思路给你一个系统性的说明,你可以对照看看是哪一种。
请先确认是哪种访问失败:
不同情况,原因完全不同。
CentOS 默认启用 firewalld,非常容易影响 k8s
systemctl status firewalld
✅ 建议(测试环境):
systemctl stop firewalld
systemctl disable firewalld
⚠️ 生产环境需放行端口(6443、10250、30000–32767 等)
CentOS 默认开启 SELinux,会导致网络/挂载异常
getenforce
✅ 建议:
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
ContainerCreatingkubectl get pods -n kube-system
常见 CNI:
✅ 检查:
kubectl logs -n kube-system calico-node-xxx
⚠️ 常见错误:
K8s 依赖以下内核参数:
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
否则:
检查:
kubectl get pods -n kube-system | grep kube-proxy
查看日志:
kubectl logs kube-proxy-xxx -n kube-system
常见问题:
✅ 建议:
update-alternatives --set iptables /usr/sbin/iptables-legacy
kubectl get svc
kubectl get endpoints
确认:
NodePort 访问方式:
http://节点IP:端口
⚠️ 注意:
现象:
nslookup kubernetes.default 失败检查:
kubectl get pods -n kube-system | grep coredns
常见原因:
CentOS 如果时间偏差大会导致:
timedatectl status
✅ 建议:
yum install -y chrony
systemctl enable chronyd
# 1. 防火墙
systemctl status firewalld
# 2. SELinux
getenforce
# 3. 节点状态
kubectl get nodes
# 4. Pod 状态
kubectl get pods -A
# 5. 网络
kubectl get pods -n kube-system
# 6. Service
kubectl get svc
你可以直接补充以下信息(最省时间):
kubectl get nodes 和 kubectl get pods -A 输出我可以按你这个环境一步一步帮你定位到 root cause ✅