温馨提示×

centos k8s为何无法通信

小樊
42
2026-10-06 08:07:38
栏目: 智能运维

在 CentOS 上部署 Kubernetes(k8s)后“无法通信” 是一个比较常见但原因很多的问题。下面我按 常见场景 + 排查思路 给你系统梳理一下,你可以对照看是哪一类。


一、节点之间无法通信(Node → Node)

1️⃣ 防火墙未关闭(最常见)

CentOS 默认有 firewalld

systemctl status firewalld

✅ 解决:

systemctl stop firewalld
systemctl disable firewalld

⚠️ k8s 需要大量端口(6443、10250、30000–32767、pod cidr 等)


2️⃣ SELinux 未关闭

getenforce

✅ 解决:

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

3️⃣ 网络插件未正常工作(CNI)

常见插件:Calico / Flannel / Cilium

检查:

kubectl get pods -n kube-system
kubectl get nodes

如果节点是 NotReady:

kubectl describe node <node>

常见原因:

  • 忘记初始化 CNI
  • pod CIDR 冲突
  • 网卡名称不对(多网卡环境)

二、Pod 之间无法通信

1️⃣ Pod 跨节点不通(Flannel 常见)

原因:

  • kubeadm init 未指定 --pod-network-cidr
  • 网络插件 CIDR 不一致

✅ 正确示例(Flannel):

kubeadm init --pod-network-cidr=10.244.0.0/16

2️⃣ iptables 被修改

CentOS 默认用 iptables,但有些环境被改成 nftables

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

或 kube-proxy 使用 ipvs 但未加载模块。


三、Pod 无法访问外网(Internet)

1️⃣ 没有 NAT 出口

Master/Worker 节点:

iptables -t nat -L POSTROUTING

CentOS 可能需要:

sysctl -w net.ipv4.ip_forward=1

2️⃣ DNS 解析失败(CoreDNS)

kubectl get pods -n kube-system | grep dns

测试:

kubectl run test --image=busybox -it --rm -- sh
nslookup kubernetes.default

常见问题:

  • CoreDNS 没起来
  • resolv.conf 配置错误

四、Service 无法访问

1️⃣ ClusterIP 不通

  • kube-proxy 没运行
  • iptables/ipvs 异常
kubectl get pods -n kube-system | grep kube-proxy

2️⃣ NodePort 不通

  • firewalld 没关
  • 安全组(云厂商)没开端口

五、快速自检清单 ✅

# 1. 防火墙
systemctl stop firewalld

# 2. SELinux
setenforce 0

# 3. 转发
sysctl net.ipv4.ip_forward=1

# 4. 节点状态
kubectl get nodes

# 5. 网络插件
kubectl get pods -n kube-system

# 6. Pod 通信
kubectl exec -it <pod> -- ping <另一pod IP>

六、如果你愿意,我可以更精准帮你

你可以补充:

  1. CentOS 版本(7 / 8 / Stream)
  2. k8s 版本
  3. 网络插件(flannel / calico / cilium)
  4. 具体现象(节点不通?pod 不通?外网不通?)
  5. 部署方式(kubeadm / 二进制 / 云)

我可以直接给你 对应修复命令。

0 踩