Post

升级ipa并保持用户与群组等数据同步,降低用户上手成本

升级ipa并保持用户与群组等数据同步,降低用户上手成本

背景

由于CentOS 7/8的EOL,IC设计环境的IT底座之一————操作系统,其升级被提上日程。其中涉及到在旧版本操作系统上的FreeIPA的升级。

思考

开始,计划在一台新操作系统上做fresh FreeIPA installation,给升级上去的操作系统使用即可。

后来,考虑在过渡期间需要维护两套FreeIPA,需要从旧FreeIPA里同步用户/群组到新FreeIPA,并且两套系统内用户的密码不能够保持统一。查阅了红帽官网升级的相关资料,决定使用Replica的方式来使得新旧FreeIPA数据同步,也能够保持用户的密码一致,降低用户的上手成本。

升级方案

架构图

升级的过渡期间,FreeIPA master-replica架构图,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
+---------------------+            +----------------------------+
|                     |            |                            |
|   CentOS 7 VM       |            |    AlmaLinux 8 VM          |
|                     |            |                            |
|   +-------------+   |            |   +--------------------+   |
|   |             |   |            |   |                    |   |
|   | FreeIPA     |   |            |   | AlmaLinux 8        |   |
|   | Server      |   |            |   | Container          |   |
|   | (Master)    |   |            |   |                    |   |
|   | version:    |   | Replication|   | +----------------+ |   |
|   | 4.6.8       <---------------------->                | |   |
|   +-------------+   |            |   | | FreeIPA        | |   |
|                     |            |   | | Server         | |   |
+---------------------+            |   | | (Replica)      | |   |
      |                            |   | | version:       | |   |
      |                            |   | | 4.9.12         | |   |
      |                            |   | +----------------+ |   |
      |                            |   |                    |   |
      |                            |   +--------------------+   |
      |                            |                            |
+------------+                     +----------------------------+
| Client Host|                                   |
| Group      |                                   |
| (for       |                                   |
| Master)    |                                   |
+------------+                                   |
                                        +---------------+
                                        | Client Host   |
                                        | Group         |
                                        | (for          |
                                        | Replica)      |
                                        +---------------+

其中,CentOS 7 VM里的是直接安装启动的FreeIPA Server。在AlmaLinux 8 VM里运行的AlmaLinux 8 Container里运行FreeIPA Server Replica。

这里使用容器来承载新FreeIPA Server,主要考虑到容器环境可以做到标准化,数据通过持久化到容器宿主机(AlmaLinux 8 VM)的目录下,再定期快照备份容器宿主机(AlmaLinux 8 VM)。

相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# CentOS 7.9虚拟机上,安装FreeIPA Master。
sudo su -
yum install -y freeipa-server ipa-server-dns >& /dev/null
firewall-cmd --add-service={freeipa-ldap,freeipa-ldaps,dns,mountd,rpc-bind} --permanent && firewall-cmd --reload
"172.16.0.100 centos-7-ipa-server.icinfra.cn" | tee -a /etc/hosts
cp -a /etc/hosts /etc/cloud/templates/hosts.redhat.tmpl 
ipa-server-install --setup-dns --domain=icinfra.cn --realm=ICINFRA.CN --hostname=centos-7-ipa-server.icinfra.cn --admin-password=12345678 --ds-password=12345678 --no-reverse --allow-zone-overlap --auto-forwarders -U


# AlmaLinux 8虚拟机上,运行容器并初始化安装FreeIPA Replica。
sudo su -
dnf install -y podman
firewall-cmd --add-service={freeipa-ldap,freeipa-ldaps,dns,mountd,rpc-bind} --permanent && sudo firewall-cmd --reload

# 初次运行
mkdir /var/lib/ipa-data
podman run -ti --rm \
    -h almalinux-8-ipa-server.icinfra.cn \
    --net=host \
    --dns 172.16.0.100 \
    --dns-search icinfra.cn \
    -v /var/lib/ipa-data:/data:Z \
    --add-host=centos-7-ipa-server.icinfra.cn:172.16.0.100 \
    --add-host=almalinux-8-ipa-server.icinfra.cn:172.16.0.101 \
    -e TZ=Asia/Shanghai \
    freeipa/freeipa-server:almalinux-8 
        ipa-replica-install \
            --force-join \
            --setup-ca \
            --setup-dns \
            --server centos-7-ipa-server.icinfra.cn \
            --domain icinfra.cn \
            --ip-address 172.16.0.101 \
            --no-forwarders \
            --no-ntp \
            --principal admin \
            --admin-password 12345678

# 这样安装的replica,比master少了ntpd server。看下如何将这个也安装上。补充原因:由于容器实际上使用的是宿主机的时间,因此可以忽略。
# 如果因定位问题,需要在容器里执行strace,则在宿主机以及容器里,都要将selinux关掉。sudo setenforce 0

# 初始化完成之后,即/var/lib/ipa-data目录已经populated数据,下一次可以以后台的方式运行。
podman run -d --rm \
    -h almalinux-8-ipa-server.icinfra.cn \
    --net=host \
    --dns 172.16.0.100 \
    --dns-search icinfra.cn \
    -v /var/lib/ipa-data:/data:Z \
    --add-host=centos-7-ipa-server.icinfra.cn:172.16.0.100 \
    --add-host=almalinux-8-ipa-server.icinfra.cn:172.16.0.101 \
    -e TZ=Asia/Shanghai \
    freeipa/freeipa-server:almalinux-8 \
        ipa-replica-install \
            --force-join \
            --setup-ca \
            --setup-dns \
            --server centos-7-ipa-server.icinfra.cn \
            --domain icinfra.cn \
            --ip-address 172.16.0.101 \
            --no-forwarders \
            --no-ntp \
            --principal admin \
            --admin-password 12345678


# 新客户端系统加入 almalinux-8-ipa-server.icinfra.cn 这个FreeIPA
dnf install -y freeipa-client podman
cat > /etc/resolv.conf << EOF
search icinfra.cn
nameserver 172.16.0.101
EOF
ipa-client-install --force-join --hostname=almalinux-8-ipa-client.icinfra.cn --domain=icinfra.cn --server=almalinux-8-ipa-server.icinfra.cn --enable-dns-updates --principal=admin --password=12345678 -U

测试项

用户/群组同步

包括用户/群组的ID/Subordinate ID以及相关信息的同步。

需要注意的是,CentOS 7 VM里自带的FreeIPA Server是不支持Subordinate ID的,因此需要重点关注对它的测试————比如在AlmaLinux 8 Container上的FreeIPA Server创建的Subordinate ID能否被持久化保存,并被正常使用。

测试通过,见打开ipa用户的subid(subordinate id)以运行rootless容器

域名解析

DNS forwarder遇到些问题,需要进一步定位。

时间同步

TODO

其它项

参考资料

IdM从非RHEL发行版迁移至RHEL8

FreeIPA Replica Setup

IdM Replica安装

This post is licensed under CC BY 4.0 by the author.

支持创作者

如果本文帮助到你,可以通过以下收款码支持我:

收款码

感谢你的支持!