2. 部署环境准备:操作系统要求、硬件资源评估、网络规划与防火墙配置
部署策略执行点,说白了就是把软件塞进你的基础设施里。这一步要是没弄好,后面所有配置都是白搭。我见过太多团队,上来就装软件,结果跑起来才发现磁盘不够、端口冲突、操作系统版本不兼容——嗯,那感觉就像装修到一半发现墙是歪的。
这一章,咱们把地基打牢。我会从操作系统、硬件、网络三个维度,把该注意的点都过一遍。
2.1 操作系统要求
先说说操作系统。策略执行点对系统有硬性要求,不是随便找个 Linux 发行版就能跑的。
核心原则:生产环境请使用 RHEL 8.x 或 CentOS 8.x(Stream 版本也可以),Ubuntu 20.04 LTS 及以上。我个人习惯用 RHEL 系,因为 SELinux 和 firewalld 的集成更顺手。
| 操作系统 | 最低版本 | 推荐版本 | 备注 |
|---|---|---|---|
| RHEL / CentOS | 8.0 | 8.6+ | 需要启用 EPEL 仓库 |
| Ubuntu | 20.04 LTS | 22.04 LTS | 需要安装 linux-image-extra |
| Debian | 11 | 12 | 不建议生产环境使用 |
| SUSE Linux Enterprise | 15 SP3 | 15 SP5 | 需要额外配置 SLES SDK |
注意:不要使用 Alpine Linux。它的 musl libc 和我们的执行引擎有兼容性问题。我曾经有个客户非要用 Alpine,结果折腾了两天,最后还是换回了 CentOS。
系统安装完成后,有几个基础包必须装上:
# RHEL/CentOS 系
sudo dnf install -y epel-release
sudo dnf install -y curl wget net-tools bind-utils
sudo dnf groupinstall -y "Development Tools"
# Ubuntu/Debian 系
sudo apt update
sudo apt install -y curl wget net-tools dnsutils build-essential
另外,内核参数也要调一下。特别是 vm.max_map_count 和 fs.file-max,这两个值直接影响执行点的并发处理能力。
# /etc/sysctl.d/99-policy-executor.conf
vm.max_map_count = 262144
fs.file-max = 6553600
net.core.somaxconn = 1024
net.ipv4.tcp_tw_reuse = 1
# 立即生效
sudo sysctl -p /etc/sysctl.d/99-policy-executor.conf
2.2 硬件资源评估
硬件这块,很多人容易走极端。要么给得太多浪费钱,要么给得太少跑不动。我一般按「最小 + 推荐 + 高负载」三档来评估。
| 资源项 | 最小配置 | 推荐配置 | 高负载配置 |
|---|---|---|---|
| CPU | 2 核 | 4 核 | 8 核+ |
| 内存 | 4 GB | 8 GB | 16 GB+ |
| 磁盘(系统) | 40 GB SSD | 80 GB SSD | 120 GB SSD |
| 磁盘(数据) | 100 GB | 500 GB | 1 TB+ |
| 网络带宽 | 100 Mbps | 1 Gbps | 10 Gbps |
我的经验:磁盘 IO 比 CPU 更重要。策略执行点要频繁读写日志和策略缓存,建议用 NVMe SSD。如果预算有限,至少也要用 SATA SSD,千万别用机械盘。
磁盘分区建议这样规划:
# 示例分区方案(推荐)
/ : 40 GB (系统)
/var/log : 50 GB (日志,独立分区)
/data : 剩余空间 (策略数据、缓存、临时文件)
swap : 4 GB (按内存大小,建议 4-8 GB)
为什么要单独分 /var/log?因为日志写满磁盘导致系统崩溃的事,我遇到过不止一次。独立分区后,就算日志炸了,系统还能撑住。
2.3 网络规划与防火墙配置
网络规划是部署中最容易出幺蛾子的环节。端口冲突、DNS 解析失败、防火墙规则遗漏——每个坑我都踩过。
2.3.1 端口规划
策略执行点需要开放以下端口:
| 端口 | 协议 | 用途 | 来源 |
|---|---|---|---|
| 8443 | TCP | 管理 API(HTTPS) | 管理网段 |
| 9090 | TCP | 策略同步(gRPC) | 策略中心 |
| 9091 | TCP | 健康检查 | 负载均衡器 |
| 514 | UDP | Syslog 日志接收 | 日志服务器 |
| 123 | UDP | NTP 时间同步 | NTP 服务器 |
注意:管理 API 端口(8443)绝对不能暴露在公网。我见过有人图省事直接开在 0.0.0.0 上,结果被扫描到,差点出事。一定要绑定内网 IP 或者用 VPN。
2.3.2 防火墙配置
以 firewalld 为例,配置如下:
# 添加服务端口
sudo firewall-cmd --permanent --add-port=8443/tcp
sudo firewall-cmd --permanent --add-port=9090/tcp
sudo firewall-cmd --permanent --add-port=9091/tcp
sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --permanent --add-port=123/udp
# 限制来源 IP(重要!)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port port="8443" protocol="tcp" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16" port port="9090" protocol="tcp" accept'
# 重新加载
sudo firewall-cmd --reload
如果是 iptables,可以这样写:
# 允许管理网段访问 8443
iptables -A INPUT -p tcp --dport 8443 -s 10.0.0.0/8 -j ACCEPT
# 允许策略中心访问 9090
iptables -A INPUT -p tcp --dport 9090 -s 192.168.0.0/16 -j ACCEPT
# 拒绝其他所有
iptables -A INPUT -p tcp --dport 8443 -j DROP
iptables -A INPUT -p tcp --dport 9090 -j DROP
2.3.3 DNS 与 NTP
这两个容易被忽略,但缺了它们,系统会出各种奇怪问题。
- DNS:策略执行点需要解析策略中心的域名。建议用内网 DNS,不要依赖公网解析。我在 /etc/resolv.conf 里一般配两个内网 DNS,再加一个 114.114.114.114 做备用。
- NTP:时间不同步会导致证书验证失败、日志时间戳错乱。配置 chrony 或 ntpd,指向内网 NTP 服务器。
# /etc/chrony.conf 示例
server ntp.internal.company.com iburst
server 0.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
2.4 整体架构图
下面这张图把部署环境的核心关系串起来了。你可以看到操作系统、硬件、网络三个层面如何协同工作。
2.5 环境验证清单
部署前,建议按这个清单逐项检查。我每次上线前都会过一遍,省得半夜被叫起来救火。
- 操作系统版本 — 确认是受支持的发行版和版本号
- 内核参数 — 检查
sysctl配置是否生效 - 磁盘空间 — 确认分区大小和挂载点正确
- 网络连通性 — 测试到策略中心、NTP、DNS 的连通性
- 防火墙规则 — 确认端口开放且来源 IP 限制正确
- 时间同步 — 检查
chronyc tracking或ntpq -p输出 - DNS 解析 — 用
dig或nslookup验证域名解析 - 安全策略 — 确认 SELinux 或 AppArmor 处于 enforcing 模式
一个小技巧:写一个自动化检查脚本,把这些步骤串起来。我每次部署新节点,直接跑一遍脚本,5 分钟就能确认环境是否就绪。比手动一条条敲命令靠谱多了。
环境准备这块,说白了就是「别偷懒」。每一条规则背后,都有血的教训。把这一步做扎实了,后面的部署才会顺风顺水。