部署(模型 B)
playbook 在目标主机上做了什么、把东西放在哪、装完怎么验收、失败了怎么清干净,以及交付清单。
操作步骤在快速开始里。这一页讲 playbook 背后的事,排障和二次交付时用。
playbook 做了什么
deploy-ipaserver.yml 四段,全部幂等,重跑只补差异:
| 段 | 做什么 | 落在哪 |
|---|---|---|
| 离线 RPM 源 | 把包内 rpms/ 推到目标机,注册为本地 yum 源(签名校验开着) | /opt/idmatrix-rpms/,/etc/yum.repos.d/idmatrix-offline.repo |
| FreeIPA 服务端 | freeipa.ansible_freeipa 的 ipaserver 角色:装包、ipa-server-install(目录、KDC、CA、DNS、adtrust);开 oddjob-mkhomedir,用户首次登录自动建家目录 | FreeIPA 标准路径 |
| 管理台 | 推送 dist/ 到目标机,/etc/httpd/conf.d/ipa.conf 加 /ipa/modern-ui 别名指向它 | IDM_WEBUI_DIST_DST,默认 /opt/idmatrix/dist |
| 许可层 | 装校验脚本、嵌入公钥、状态端点、请求闸门、主机数插件、每日校验 timer,然后立刻跑一次校验 | /opt/idmatrix-license/,/var/lib/idmatrix-license/status.json |
| 每日备份 | 备份脚本 + idmatrix-backup.timer,每日 02:30 在线数据备份 | /var/lib/ipa/backup/ |
许可层三件东西的分工在许可里。
装完之后目标机上多了什么
| 路径 | 内容 |
|---|---|
/opt/idmatrix-license/ | gate_wsgi.py(请求闸门)、license_gate.py(分类器)、phonehome.py(校验)、public.pem(嵌入公钥)、rstlic/ SDK |
/var/lib/idmatrix-license/ | license.lic(激活后)、status.json(当前许可状态,管理台横幅和闸门都读它) |
/etc/httpd/conf.d/ipa.conf | WSGIScriptAlias /ipa 从 /usr/share/ipa/wsgi.py 改指向 /opt/idmatrix-license/gate_wsgi.py;/ipa/modern-ui 别名 |
/etc/httpd/conf.d/idmatrix-license.conf | 状态查询、指纹请求、许可上传三个端点 |
| FreeIPA 插件目录 | idmatrix_hostlimit.py,服务端硬限受管主机数 |
/etc/systemd/system/ | idmatrix-license.{service,timer}、idmatrix-backup.{service,timer} |
回滚许可层只要把 ipa.conf 里那一行 WSGIScriptAlias 改回 /usr/share/ipa/wsgi.py 再 systemctl reload httpd,FreeIPA 本体不受影响。
验收
六条全过才算装完:
sudo ipactl status # ① 11 个服务全 RUNNING
curl -sk -o /dev/null -w '%{http_code}\n' https://<FQDN>/ipa/modern-ui/ # ② 200 或 301
sudo systemctl list-timers idmatrix-backup.timer # ③ NEXT = 次日 02:30
sudo systemctl start idmatrix-backup.service && ls /var/lib/ipa/backup/ # 立刻跑一次,看到产物
cat /var/lib/idmatrix-license/status.json # ④ valid:false,未激活正常
echo '<admin口令>' | kinit admin && ipa pwpolicy-mod --minlength=9 # ⑤ 期望 Forbidden
chronyc sources # ⑥ 时间同步正常第 ⑤ 条是许可门控的存在性检查。未激活时写操作被拒是设计行为;它成功了说明 ipa.conf 的 WSGIScriptAlias 没改过来,或 status.json 不可读导致闸门失效开放。门控失效不报任何错。
11 个服务是:Directory Service、krb5kdc、kadmin、named、httpd、ipa-custodia、pki-tomcatd、ipa-otpd、ipa-dnskeysyncd、smb、winbind。IPA_SETUP_DNS=false 少 named 和 ipa-dnskeysyncd;IPA_SETUP_ADTRUST=false 少 smb 和 winbind。
装失败了
ipa-server-install 不是原子的,中途失败会留下半个目录实例、半个 KDC。不要直接重跑 playbook,先在目标机清干净:
sudo ipa-server-install --uninstall -U
ls -d /etc/dirsrv/slapd-* /etc/pki/pki-tomcat /etc/ipa/default.conf 2>&1 # 应全部 No such file
sudo getcert list | grep -c MONITORING # 应为 0有残留就手工补:dsctl slapd-<REALM> remove --do-it、rm -rf /etc/pki/pki-tomcat、getcert stop-tracking -i <id>。ipa-client-install --uninstall 会把 /etc/nsswitch.conf 还原成装前的备份,如果装前改过 hosts: 行(去 myhostname),卸载后要再改一次。
失败的常见原因按出现顺序:
| 卡在 | 原因 |
|---|---|
| 主机名检查 | hostname -f 与 IPA_HOSTNAME 不一致;FQDN 解析到 127.0.0.1 / ::1 |
| DNS 转发器检查 | IPA_FORWARDERS 不可达,或 IPA_AUTO_FORWARDERS=true 抓到 resolv.conf 里的坏地址 |
| 时间 | 与 NTP 源或域控时差超过 5 分钟 |
configuring mod_ssl | 目标机缺 mod_ssl,rpm -q mod_ssl 查,包内 RPM 仓有 |
setting up httpd keytab / pkispawn 建不出日志 | 目标机不是干净系统,/var/lib/ipa/gssproxy、/var/log/pki 这类目录被删过。`rpm -Va --nofiledigest |
交付清单
给客户:
- 管理台地址、
admin口令、Directory Manager 口令,写进客户的密码库 - 包内
docs/全部手册 COPYING与idmatrix-source.tar.gz。管理台是 GPLv3 的 freeipa-webui 二次开发,必须随附对应源码- 备份产物在
/var/lib/ipa/backup/,离机同步由客户自配
不给: customer.env(明文口令)、控制节点上的 ssh 私钥、厂商内部文档。