CDE Private Cloud(ECS) 에서 사용자 keytab 을 등록하면 실패한다. 같은 keytab 으로 호스트에서 kinit -kt <keytab> <principal> 은 정상이다. dex-base 네임스페이스의 keytab 관리 Pod 로그에는 keytab_manager.go ... failed to verify keytab with kinit, err: exit status 1 이 남는다.
Pod 안의 /etc/krb5.conf 는 ConfigMap 으로 주입되며, 그 내용은 ECS 호스트의 /etc/krb5.conf 와 /etc/krb5.conf.d/* 를 합쳐 만들어진다. 정상 클러스터와 비교하니 비정상 클러스터에만 /etc/krb5.conf.d/kcm_default_ccache 가 있었고 그 안에 다음이 들어 있었다.
[libdefaults]
default_ccache_name = KCM:
Pod 안에는 SSSD KCM 데몬이 없으므로 kinit 이 티켓 캐시를 만들지 못해 검증에 실패한다.
CDE_BASE_NS=dex-base-<id>
KEYTAB_POD=$(kubectl get pods -n ${CDE_BASE_NS} -o name | grep -i keytab | head -1)
kubectl logs ${KEYTAB_POD} -n ${CDE_BASE_NS} | grep -i error
kubectl get cm -n ${CDE_BASE_NS} | grep -i krb
kubectl get cm <krb5-configmap> -n ${CDE_BASE_NS} -o yaml # binaryData.krb5.conf 를 base64 로 풀어 확인
# 호스트 쪽
grep -r "default_ccache_name" /etc/krb5.conf /etc/krb5.conf.d/
diff <(ssh <bad-host> "cat /etc/krb5.conf.d/*") <(ssh <good-host> "cat /etc/krb5.conf.d/*")
/etc/krb5.conf.d/kcm_default_ccache 의 default_ccache_name = KCM: 을 제거하거나 FILE:/tmp/krb5cc_%{uid} 로 바꾼다.krb5.conf 를 직접 고치고 keytab 관리 Pod 를 재시작한다.두 클러스터의 /etc/krb5.conf.d/ 차이 자체가 바람직하지 않으므로 나머지 파일도 맞춘다.