问题表现
K8S集群中的问题
需求在集群中挂载一个分布式文件存储系统,由于集群本身是rancher
,理所当然选择了longhorn
。
服务器系统为Centos7.6,在安装部署longhorn的时候发现这玩意能装上而且各项检查都正常,但是在PVC调度的时候会发现无法调度到具体的磁盘负载机器上去。
阅读官方资料之后发现在RHEL的机器上Rancher2.6.x的版本他们建议关闭防火墙,2.7.x的版本建议将防护墙升级到v7.x,否则会出现一些奇怪的问题。但是你安装官方文档中的脚本去执行只能将firewalld
升级到0.6.3
版本。然后在Github的issues中我找到了思路围观地址
DockerSwarm中的问题
DockerSwarm中的问题更加离谱,具体表现为三台机器的swarm集群,程序部署在第三台上面,你用第二台机器的IP去访问,本来是可以的,在 firewalld reload 之后你会发现只能用第三台机器的IP去访问了,而且集群内部的网络也出现了问题,整个overlay 的网络基本瘫痪了。复查iptables中的规则后发现所有的转发规则都丢了。只能重启Docker去解决这个问题。
解决思路
知道原理之后就简单了,直接简单粗暴,使用ufw替换firewalld,替换之后DockerSwarm与Rancher集群全部正常,iptables转发正常。
编写解决脚本
#! /bin/bash
uninstall_firewalld() {
systemctl stop firewalld
systemctl disable firewalld
}
install_ufw() {
yum install epel-release -y
yum install ufw -y
}
start_ufw() {
systemctl start ufw
systemctl enable ufw
ufw allow 22/tcp
ufw default deny
ufw reload
ufw status
}
#主函数
main() {
uninstall_firewalld
install_ufw
start_ufw
}
main
使用说明
ufw allow 8888/tcp # 开启tcp端口
ufw allow 8888/udp # 开启tcp端口
ufw allow 9998:9999/tcp # 开启一批端口
ufw allow 9998:9999/udp # 开启一批端口
ufw deny 8888/tcp # 关闭端口
ufw deny 8888/udp # 关闭端口
ufw deny 9998:9999/tcp # 关闭一批端口
ufw deny 9998:9999/udp # 关闭一批端口
sudo ufw allow from 15.15.15.0/24 to any port 22
sudo ufw allow from 15.15.15.1 to any port 22
sudo ufw deny from 15.15.15.0/24 to any port 22
sudo ufw deny from 15.15.15.1 to any port 22
ufw reload # 重启ufw
替换完之后全部正常,主要原因就是低版本的firewalld可能不太支持这么新的东西,毕竟好多年的玩意了,不支持也正常。