目录
在 Linux(openEuler 24.03 LTS-SP1)上安装 Kubernetes + KubeSphere 的防火墙放行全攻略
一、为什么要先搞定防火墙?
二、目标环境
三、需放行的端口和协议列表
四、核心工具说明
1. 修正后的 exec.sh 脚本(支持管道/重定向)
2. 批量放行脚本:open_firewall.sh
五、使用示例
1. 批量放行端口
2. 查看当前防火墙规则
3. 仅开放单一端口(临时需求)
4. 检查特定端口监听状态
六、总结
在 Linux(openEuler 24.03 LTS-SP1)上安装 Kubernetes + KubeSphere 的防火墙放行全攻略
关键词:Kubernetes、KubeSphere、openEuler、防火墙、firewalld、Ansible、自动化运维
一、为什么要先搞定防火墙?
Kubernetes 和 KubeSphere 是分布式系统,对网络连通性要求非常严格。如果防火墙未提前放行关键端口,集群安装常常会卡在某个阶段,难以定位。常见问题包括:
-
控制面无法连上 etcd(2379/2380)
-
kubelet 报错 NotReady(10250)
-
Calico 网络不可用(BGP 179 或 IPIP 未通)
-
节点无法通过 NodePort 访问服务(30000-32767)
因此,部署前统一放行端口是集群成功的关键一步。
二、目标环境
项 | 说明 |
---|---|
操作系统 | openEuler 24.03 (LTS-SP1) |
节点数量 | 多台主机组成集群 |
安装方式 | 基于 Ansible 批量执行 |
网络方案 | Calico(支持 BGP 和 IPIP) |
三、需放行的端口和协议列表
服务 | 协议 | 端口范围 | 说明 |
---|---|---|---|
ssh | TCP | 22 | 基础连接 |
etcd | TCP | 2379-2380 | 控制平面内部通信 |
apiserver | TCP | 6443 | 客户端/节点访问 kube-apiserver |
calico | TCP | 9099-9100 | 健康检查端口 |
BGP | TCP | 179 | Calico 网络 |
nodePort | TCP | 30000-32767 | 暴露 Service 用 |
kubelet | TCP | 10250 | 节点健康、日志 |
控制组件 | TCP | 10258 | controller-manager |
CoreDNS | TCP/UDP | 53 | DNS 服务 |
metrics-server | TCP | 8443 | 集群指标 |
本地仓库 | TCP | 5000/5080 | 离线部署用 |
rpcbind/NFS | TCP | 111 | NFS 持久卷 |
IPIP | 协议 | ipip(协议4) | Calico 网络协议 |
四、核心工具说明
1. 修正后的 exec.sh
脚本(支持管道/重定向)
#!/usr/bin/env bash
# exec.sh —— 在指定主机组批量执行远程命令(自动识别管道)
# 可用环境变量:
# INV — inventory 文件(默认 hosts.ini)
# GROUP — 目标主机组(默认 all)set -euo pipefailINV="${INV:-hosts.ini}"
GROUP="${GROUP:-all}"[[ $# -eq 0 ]] && { echo "Usage: $0 <remote command>"; exit 1; }REMOTE_CMD="$*"# 自动判断是否包含 shell 元字符,选用 shell 模块
if [[ "$REMOTE_CMD" =~ [\|\&\;\<\>\(\)] ]]; thenMODULE=shell
elseMODULE=command
fiecho ">>> ansible -i \"$INV\" \"$GROUP\" -m $MODULE -b -a \"$REMOTE_CMD\""
ansible -i "$INV" "$GROUP" -m "$MODULE" -b -a "$REMOTE_CMD"
✅ 支持:
-
| grep
、> file
、&&
等 shell 操作 -
默认提权
-b
,无需写sudo
-
按
GROUP
分组执行命令
2. 批量放行脚本:open_firewall.sh
#!/usr/bin/env bash
# 批量放行所有 Kubernetes + KubeSphere 所需端口
# 使用 ./exec.sh 执行远程命令set -euo pipefailDIR="$(cd "$(dirname "$0")" && pwd)"
EXEC="${DIR}/exec.sh"rules=("firewall-cmd --permanent --add-port=22/tcp""firewall-cmd --permanent --add-port=2379-2380/tcp""firewall-cmd --permanent --add-port=6443/tcp""firewall-cmd --permanent --add-port=9099-9100/tcp""firewall-cmd --permanent --add-port=179/tcp""firewall-cmd --permanent --add-port=30000-32767/tcp""firewall-cmd --permanent --add-port=10250/tcp""firewall-cmd --permanent --add-port=10258/tcp""firewall-cmd --permanent --add-port=53/tcp""firewall-cmd --permanent --add-port=53/udp""firewall-cmd --permanent --add-port=8443/tcp""firewall-cmd --permanent --add-port=5000/tcp""firewall-cmd --permanent --add-port=5080/tcp""firewall-cmd --permanent --add-port=111/tcp""firewall-cmd --permanent --add-protocol=ipip"
)echo "=== 开始批量放行 firewalld 规则 ==="
for rule in "${rules[@]}"; doecho "--> 执行: $rule""${EXEC}" "$rule"
doneecho "--> 重载 firewalld"
"${EXEC}" "firewall-cmd --reload"echo "[✓] 防火墙规则放行完毕"
五、使用示例
1. 批量放行端口
chmod +x exec.sh open_firewall.sh
./open_firewall.sh
2. 查看当前防火墙规则
# 查看所有节点的防火墙状态
./exec.sh "firewall-cmd --list-all"# 查看是否启用了 IPIP 协议
./exec.sh "firewall-cmd --permanent --get-protocols | grep ipip"
3. 仅开放单一端口(临时需求)
./exec.sh "firewall-cmd --permanent --add-port=25000/tcp && firewall-cmd --reload"
4. 检查特定端口监听状态
./exec.sh "ss -lntp | grep 6443"
六、总结
优点 | 描述 |
---|---|
✅ 一次执行,全节点生效 | 用脚本统一执行所有规则,无需逐个操作 |
✅ 支持复杂命令 | 管道、重定向、逻辑与/或都能正常解析 |
✅ 清晰日志可追踪 | 每条规则执行均打印,方便定位问题 |
✅ 自动化 & 可扩展 | 可以集成到 CI/CD 或自建部署工具链中 |
脚本 + Ansible 的组合,大大提升了防火墙配置效率和准确性。未来如果组件升级、端口变更,只需维护 rules
数组即可,真正做到“一次写好,处处运行”。
推荐操作:将
exec.sh
和open_firewall.sh
纳入版本控制,并在每次节点加入或初始化前优先执行,确保防火墙配置零遗漏。