在 Linux(openEuler 24.03 LTS-SP1)上安装 Kubernetes + KubeSphere 的防火墙放行全攻略

发布于:2025-07-10 ⋅ 阅读:(24) ⋅ 点赞:(0)

目录

在 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 pipefail

INV="${INV:-hosts.ini}"
GROUP="${GROUP:-all}"

[[ $# -eq 0 ]] && { echo "Usage: $0 <remote command>"; exit 1; }

REMOTE_CMD="$*"

# 自动判断是否包含 shell 元字符,选用 shell 模块
if [[ "$REMOTE_CMD" =~ [\|\&\;\<\>\(\)] ]]; then
  MODULE=shell
else
  MODULE=command
fi

echo ">>> 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 pipefail

DIR="$(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[@]}"; do
  echo "--> 执行: $rule"
  "${EXEC}" "$rule"
done

echo "--> 重载 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.shopen_firewall.sh 纳入版本控制,并在每次节点加入或初始化前优先执行,确保防火墙配置零遗漏。


网站公告

今日签到

点亮在社区的每一天
去签到