温馨提示×

centos k8s为何无法访问

小樊
35
2026-08-04 21:25:43
栏目: 智能运维

CentOS 上 Kubernetes 无法访问 是很常见的问题,原因很多,需要分场景排查。下面我按最常见原因 + 排查思路给你一个系统性的说明,你可以对照看看是哪一种。


一、先明确“无法访问”是哪一类

请先确认是哪种访问失败:

  1. Pod 无法访问外网
  2. Pod 之间无法访问
  3. Service 无法访问
  4. NodePort / LoadBalancer 无法访问
  5. kubectl 无法连接 apiserver
  6. 集群内部 DNS 无法解析

不同情况,原因完全不同。


二、最常见原因汇总(CentOS 特有 + 通用)

1️⃣ 防火墙(CentOS 最常见)

CentOS 默认启用 firewalld非常容易影响 k8s

systemctl status firewalld

✅ 建议(测试环境):

systemctl stop firewalld
systemctl disable firewalld

⚠️ 生产环境需放行端口(6443、10250、30000–32767 等)


2️⃣ SELinux 未关闭

CentOS 默认开启 SELinux,会导致网络/挂载异常

getenforce

✅ 建议:

setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

3️⃣ 网络组件问题(CNI)

常见现象

  • Pod 一直 ContainerCreating
  • Pod 之间 ping 不通
  • Service 访问失败

检查 CNI

kubectl get pods -n kube-system

常见 CNI:

  • Calico
  • Flannel
  • Cilium

✅ 检查:

kubectl logs -n kube-system calico-node-xxx

⚠️ 常见错误:

  • 网卡名不匹配(CentOS 8+ 常见)
  • 内核模块缺失(ip_tables、br_netfilter)

4️⃣ 内核参数未开启(非常关键)

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

否则:

  • Service 不通
  • Pod 无法访问外网

5️⃣ kube-proxy / iptables 问题

检查:

kubectl get pods -n kube-system | grep kube-proxy

查看日志:

kubectl logs kube-proxy-xxx -n kube-system

常见问题:

  • iptables 被清空
  • 使用了 nftables(CentOS 8 默认)

✅ 建议:

update-alternatives --set iptables /usr/sbin/iptables-legacy

6️⃣ Service / NodePort 无法访问

检查顺序

kubectl get svc
kubectl get endpoints

确认:

  • Service selector 是否匹配 Pod label
  • Pod 是否 Ready

NodePort 访问方式:

http://节点IP:端口

⚠️ 注意:

  • 端口范围:30000–32767
  • 云服务器需放行安全组

7️⃣ DNS 无法解析(coredns)

现象:

  • Pod 内 nslookup kubernetes.default 失败

检查:

kubectl get pods -n kube-system | grep coredns

常见原因:

  • coredns CrashLoopBackOff
  • 网络 CNI 异常

8️⃣ 时间不同步

CentOS 如果时间偏差大会导致:

  • TLS 握手失败
  • apiserver 连接失败
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

四、我可以进一步精准帮你

你可以直接补充以下信息(最省时间):

  1. CentOS 版本(7 / 8 / Stream?)
  2. k8s 安装方式(kubeadm / 二进制 / rancher?)
  3. 错误现象(截图或日志)
  4. kubectl get nodeskubectl get pods -A 输出

我可以按你这个环境一步一步帮你定位到 root cause

0