티스토리 뷰

반응형

하둡클러스터에 kerberos 인증이 있다면, kinit 명령을 통해서 인증을 거친후 hadoop 명령어를 사용할 수 있다. 

하지만, BashOperator 에서 매번 kinit 명령을 넣어서 DAG 를 구성하는건 꽤 번거로운일이다.

왜냐하면, 사용자가 암호를 생략하려면 keytab 파일을 사용해야 하는데 경로를 매번 기억해서 쓰는것도 번거롭다.

다행히 airflow 에서는 커버로스 인증을 주기적으로 하는 옵션이 존재한다.

 

airflow kerberos 사용하기

우선 airflow.cfg 설정에 커버로스 관련 인증 설정이 필요하다. 당연히 인증을 위한 keytab 파일도 존재해야한다.

[core]
...
security = kerberos
....

[kerberos]
ccache = /tmp/airflow_krb5_ccache
principal = myuser@MY.HOST.COM
reinit_frequency = 3600
kinit_path = kinit
keytab = /keytab/myuser.keytab

그리고 다음과 같이 실행하면 kerberos 인증을 내부적으로 주기적으로 실행되면서 인증을 유효하게 유지해준다.

(즉, 사용자가 kinit 을 실행하는것이 아니라 airflow kerberos 데몬이 주기적으로 갱신)

# 데몬형태로 띄우며려면 airflow kerberos -D 로 기동
$ airflow kerberos
[2022-08-22 19:07:20,530] {settings.py:260} DEBUG - Setting up DB connection pool (PID 49923)
[2022-08-22 19:07:20,530] {settings.py:362} DEBUG - settings.prepare_engine_args(): Using pool settings. pool_size=5, max_overflow=10, pool_recycle=1800, pid=49923
[2022-08-22 19:07:20,561] {cli_action_loggers.py:40} DEBUG - Adding <function default_action_log at 0x7f3da848ad30> to pre execution callback
[2022-08-22 19:07:20,976] {cli_action_loggers.py:66} DEBUG - Calling callbacks: [<function default_action_log at 0x7f3da848ad30>]
  ____________       _____________
 ____    |__( )_________  __/__  /________      __
____  /| |_  /__  ___/_  /_ __  /_  __ \_ | /| / /
___  ___ |  / _  /   _  __/ _  / / /_/ /_ |/ |/ /
 _/_/  |_/_/  /_/    /_/    /_/  \____/____/|__/
[2022-08-22 19:07:22,606] {kerberos.py:89} INFO - Re-initialising kerberos from keytab: kinit -f -a -r 3600m -k -t /keytab/myuser.keytab -c /tmp/airflow_krb5_ccache myuser@MY.HOST.COM

하둡명령 실행하면 오류가 발생?

분명 설정한 ccache 이름으로 커버로스인증을한 캐시가 생성되는것도 확인했는데, 문제는 hadoop 명령어를 실행했더니 다음과 같이 인증에 실패했다. 원인은 기본으로 airflow 에서 만들어낸 인증 캐시를 쓰는게 아니라, 시스템의 기본값을 사용하려고 했기 때문이었다.

$ hadoop fs -ls
2022-08-22 19:13:25,167 WARN ipc.Client: Exception encountered while connecting to the server 
org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
        at org.apache.hadoop.security.SaslRpcClient.selectSaslClient(SaslRpcClient.java:173)
        at org.apache.hadoop.security.SaslRpcClient.saslConnect(SaslRpcClient.java:390)

해결방법

원인은 airflow 설정에 사용한 "/tmp/airflow_krb5_ccache" 파일을 기본 Kerberos 인증 캐시이름으로 사용되도록 변경하면 된다. 

이를 해결하는 방법은 "KRB5CCNAME" 환경변수를 지정해서 실행하면 된다. 저것도 번거롭다면, 환경변수에 KRB5CCNAME 를 지정후 재기동하면 될것으로 보인다.

$ env KRB5CCNAME=/tmp/airflow_krb5_ccache hadoop fs -ls /
Found 16 items
...
drwxr-xr-x   - hdfs   hdfs            0 2022-06-22 16:21 /warehouse

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함