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 整体架构图

下面这张图把部署环境的核心关系串起来了。你可以看到操作系统、硬件、网络三个层面如何协同工作。

策略执行点部署环境架构图 策略执行点部署环境架构 操作系统层 RHEL 8.x / CentOS 8.x Ubuntu 20.04 LTS+ 内核参数调优 基础工具包 SELinux / AppArmor 文件描述符限制 硬件资源层 CPU: 4核+ 内存: 8 GB+ 磁盘: NVMe SSD 网络: 1 Gbps+ 独立 /var/log 分区 /data 独立数据盘 网络与防火墙层 端口 8443/9090/9091 来源 IP 限制 firewalld / iptables 内网 DNS 解析 NTP 时间同步 三层依赖关系:操作系统提供运行环境 → 硬件保障性能 → 网络确保连通与安全

2.5 环境验证清单

部署前,建议按这个清单逐项检查。我每次上线前都会过一遍,省得半夜被叫起来救火。

  1. 操作系统版本 — 确认是受支持的发行版和版本号
  2. 内核参数 — 检查 sysctl 配置是否生效
  3. 磁盘空间 — 确认分区大小和挂载点正确
  4. 网络连通性 — 测试到策略中心、NTP、DNS 的连通性
  5. 防火墙规则 — 确认端口开放且来源 IP 限制正确
  6. 时间同步 — 检查 chronyc tracking 或 ntpq -p 输出
  7. DNS 解析 — 用 dig 或 nslookup 验证域名解析
  8. 安全策略 — 确认 SELinux 或 AppArmor 处于 enforcing 模式

一个小技巧:写一个自动化检查脚本,把这些步骤串起来。我每次部署新节点,直接跑一遍脚本,5 分钟就能确认环境是否就绪。比手动一条条敲命令靠谱多了。

环境准备这块,说白了就是「别偷懒」。每一条规则背后,都有血的教训。把这一步做扎实了,后面的部署才会顺风顺水。