目錄
在 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
納入版本控制,并在每次節點加入或初始化前優先執行,確保防火墻配置零遺漏。