1 机器
Kdc 主节点:k8s-01
kdc 从节点:k8s-02
2 主节点修改
2.1 主节点修改配置
/etc/krb5.conf
[realms]
TONGDUN.COM = {
kdc = k8s-01
kdc = k8s-02
…(如果有多从kdc,一行一个)
admin_server = k8s-01
}
2.2 添加 principal
kadmin.local
addprinc -randkey host/k8s-01
addprinc -randkey host/k8s-02
//将主、从节点的 princ 整合到 krb5.keytab 中
ktadd -k /etc/krb5.keytab host/k8s-01
ktadd -k /etc/krb5.keytab host/k8s-02
3 从节点搭建
从节点安装参考《KDC 服务安装及配置》
3.1 将 master 上配置同步到从节点
将 master 几个配置拷贝到从服务器:文件: krb5.conf、kdc.conf、kadmin5.acl、master key stash file
scp /etc/krb5.conf root@k8s-02:/etc
scp /etc/krb5.keytab root@k8s-02:/etc
scp /usr/local/krb5/var/krb5kdc/kdc.conf root@k8s-02:/usr/local/krb5/var/krb5kdc/
scp /usr/local/krb5/var/krb5kdc/kadm5.acl root@k8s-02:/usr/local/krb5/var/krb5kdc/
scp /usr/local/krb5/var/krb5kdc/.k5.TONGDUN.COM root@k8s-02:/usr/local/krb5/var/krb5kdc/
3.2 创建 Kerberos 数据库(密码要和主节点保持一致,否则会报错)
kdb5_util
create -r your_realm -s,注意,在Loading random data这里的时候可能会要比较久的时间
[root@ip-172-31-6-148 ~]# kdb5_util create –r TONGDUN.COM -s
Loading random data
4 从节点启动 kpropd 进程
kpropd -S
5 在 slave 上添加/usr/local/krb5/var/krb5kdc/kpropd.acl
cat > /usr/local/krb5/var/krb5kdc/kpropd.acl << EOF
host/k8s-01@TONGDUN.COM
host/k8s-02@TONGDUN.COM
EOF
6 同步数据至 slave db (主节点上执行)
主节点 dump 库信息:
kdb5_util dump /var/kerberos/krb5kdc/slave_data
将库信息拷贝至从节点:
scp /usr/local/krb5/var/krb5kdc/slave_data /usr/local/krb5/var/krb5kdc/slave_data.dump_ok k8s-02:/usr/local/krb5/var/krb5kdc/
让从主机加载主库信息(从库会被整库覆盖)
kprop -f /usr/local/krb5/var/krb5kdc/slave_data k8s-02
成功:提示:Database propagation to k8s-02: SUCCEEDED
注意:hostname 一定要单一。从日志中能看出来。
7 启动从节点 kdc
krb5kdc
8 多从节点数据同步样例
如果多个从节点,定期自动进行主、从库同步,脚本示例
如有两个从 kdc:dp200 和 dp201,在主 kdc 节点上定期执行如下脚本:
#!/bin/sh
kdclist = "dp200 dp201"
kdb5_util dump /usr/local/krb5/var/krb5kdc/slave_data
for kdc in $kdclist
do
scp slave_data slave_data.dump_ok $kdc:/usr/local/krb5/var/krb5kdc/
scp /etc/krb5.keytab $kdc:/etc/
kprop -f /usr/local/krb5/var/krb5kdc/slave_data $kdc
done
9 客户端搭建
将/etc/krb5.conf 拷贝至所有客户端主机的/etc 下。
10 测试
关闭主 kdc 服务,在客户端机器执行已有账号的 kinit 登录,可以正常登录。即说明 ha 生效了。
另外,kdc 的 ha 是根据 krb5.conf 中配置 kdc 的顺序决定的,客户端按配置顺序挨个发请求,第一个 kdc 能访问则不会向后面的 kdc 服务发请求(即:master 不是绑定死的)
如果第一个 kdc 请求不通,则再依次向后面 kdc 发请求。 如果第一个 kdc 再起起来,则下次请求还是会访问第一个 kdc(可以从 kdc 日志中看出来)