FreeIPA 는 무거운 서버가 아니라 2 vCPU · 4 GB · 20 GB 면 테스트 규모에서 충분하다. 문제는 위치다. Cloudera 워커 노드에 직접 설치하면 389-ds · KDC · named · Apache 가 클러스터 서비스와 포트를 다투고, 그 호스트가 재시작될 때 인증 전체가 같이 흔들린다. CM 노드도 사정은 비슷하다. 그래서 같은 물리 자원을 쓰더라도 가상 머신으로 격리하는 편이 낫다. 메모리 250 GB 중 190 GB 가 놀고 있고 egrep -c '(vmx|svm)' /proc/cpuinfo 가 0 이 아니면 KVM 을 쓸 수 있다.
FreeIPA 를 설치하면 도메인의 대문자로 Kerberos realm 이 만들어지고(hadoop.com → HADOOP.COM), _kerberos._tcp.hadoop.com 같은 SRV 레코드를 스스로 관리하려 한다. 그런데 사내에 이미 hadoop.com 의 권한 있는 DNS 가 따로 있다면 누가 정본인지 모호해진다.
| 방식 | 평가 |
|---|---|
분리된 도메인(ipa.test.local) |
기존 DNS 와 격리돼 가장 안전 |
| 클러스터와 같은 도메인 + FreeIPA DNS 미사용 | 가능. 기존 DNS 에 A · PTR · SRV 를 직접 넣는다 |
| 클러스터와 같은 도메인 + FreeIPA 가 DNS | 기존 DNS 와 충돌 위험 |
같은 도메인을 쓰되 기존 BIND 를 정본으로 두는 선택을 했다면, 그 DNS 에 정방향 A 와 역방향 PTR 을 넣고 named-checkconf -z /etc/named.conf 로 존이 로드되는지 확인한 뒤 reload 한다. 임시로는 클러스터 노드들의 /etc/hosts 에 매핑만 넣어도 동작한다.
게스트에서 아래가 모두 맞아야 ipa-server-install 이 통과한다. 특히 정방향과 역방향이 서로 맞는지가 핵심이다.
hostname -f # freeipa.hadoop.com
hostname -d # hadoop.com
cat /etc/hosts # 192.168.50.10 freeipa.hadoop.com freeipa
sysctl net.ipv6.conf.lo.disable_ipv6 # 0 이어야 한다. FreeIPA 는 IPv6 를 요구한다
dig freeipa.hadoop.com +short # 192.168.50.10
dig -x 192.168.50.10 +short # freeipa.hadoop.com.
timedatectl
게스트가 사내 DNS 로 질의했는데 응답이 안 돌아온다면 DNS 서버가 게스트 대역으로 가는 경로를 모르는 것이다. 그 목적지로 갈 때만 SNAT 를 걸어 해결한다.
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -d 192.168.10.18 -j MASQUERADE
SELinux 와 firewalld 는 완전히 끄지 말고 각각 Permissive 와 stop 정도로만 풀어 두는 편이 안전하다. 순수 disabled 로 두면 설치가 실패하거나 동작이 이상해질 수 있다.
ipa pwpolicy-show 만 치면 password policy not found 가 난다. FreeIPA 의 정책은 그룹 단위로 적용되고 기본 정책 이름이 global_policy 라 명시해야 한다.
kinit admin
ipa pwpolicy-show global_policy
ipa pwpolicy-mod global_policy --minlife=0
Min lifetime 이 0 이 아니면 CDP 가 만든 service principal 의 암호를 곧바로 바꿀 수 없어 Kerberos 활성화 마법사가 막힌다.
티켓 갱신 정책도 같이 본다.
ipa krbtpolicy-show
ipa krbtpolicy-mod --maxlife=86400 --maxrenew=604800
CDP 마법사가 하는 일과 똑같은 동작을 손으로 해 보면 권한 문제를 미리 걸러낼 수 있다.
kinit admin
ipa host-add test-cdp.hadoop.com --force --no-reverse
ipa service-add HTTP/test-cdp.hadoop.com
ipa service-del HTTP/test-cdp.hadoop.com
ipa host-del test-cdp.hadoop.com
각 클러스터 노드는 IPA 클라이언트로 등록한다. 등록이 끝나면 /etc/ipa/default.conf 와 /etc/sssd/sssd.conf 가 만들어지고 시스템 CA 저장소가 갱신되며 /etc/krb5.conf 가 default_realm = HADOOP.COM 으로 바뀐다.
ipa-client-install --mkhomedir --enable-dns-updates
kinit cdpadmin
ssh cdpadmin@freeipa.hadoop.com
이후 Cloudera Manager 의 Enable Kerberos 마법사에서 KDC 타입을 Red Hat IPA 로 두고 realm 과 admin 계정을 넣는다.
Ranger Usersync 나 서비스 LDAP 연동에는 같은 값을 쓴다.
LDAP URL ldap://freeipa.hadoop.com:389 (또는 ldaps://...:636)
Bind User DN uid=cdpadmin,cn=users,cn=accounts,dc=hadoop,dc=com
Users Base DN cn=users,cn=accounts,dc=hadoop,dc=com
Groups Base DN cn=groups,cn=accounts,dc=hadoop,dc=com
붙기 전에 ldapsearch 로 바인드가 되는지 먼저 확인한다. 암호는 -w 로 인자에 넣지 말고 -W 로 대화형 입력한다.
dnf install -y openldap-clients
ldapsearch -x -H ldap://freeipa.hadoop.com:389 \
-D "uid=cdpadmin,cn=users,cn=accounts,dc=hadoop,dc=com" -W \
-b "cn=users,cn=accounts,dc=hadoop,dc=com" "(uid=cdpadmin)" dn