SELinux会限制容器进程的权限,导致K8s组件无法正常通信。需永久关闭SELinux:
setenforce 0 # 临时关闭 sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config # 永久关闭
K8s依赖iptables进行网络规则管理,若同时启用firewalld可能导致规则冲突。推荐方案:
systemctl stop firewalld && systemctl disable firewalld # 停止并禁用
firewall-cmd --permanent --add-port=6443/tcp # K8s API Server端口 firewall-cmd --permanent --add-port=2379-2380/tcp # etcd集群通信端口 firewall-cmd --permanent --add-port=10250/tcp # kubelet端口 firewall-cmd --permanent --add-port=10251/tcp # kube-scheduler端口 firewall-cmd --permanent --add-port=10252/tcp # kube-controller-manager端口 firewall-cmd --permanent --add-port=10255/tcp # kubelet只读端口 firewall-cmd --reload # 重新加载规则
若使用iptables作为防火墙工具,需清空现有规则以避免干扰K8s网络:
yum install -y iptables-services # 安装iptables服务 systemctl start iptables && systemctl enable iptables # 启动并开机自启 iptables -F # 清空所有规则 service iptables save # 保存规则
K8s需要开启IP转发、桥接流量调用iptables等功能,需修改内核参数:
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables=1 # 桥接流量调用iptables net.bridge.bridge-nf-call-ip6tables=1 # IPv6桥接流量调用ip6tables net.ipv4.ip_forward=1 # 开启IP转发 EOF sysctl --system # 生效配置
systemctl status firewalld
(应为inactive
)iptables -L -n
(应无冲突规则)kubectl get nodes
验证Master与Node节点是否正常通信。