[k8s] Airflow API user 생성

털난 개발자·2022년 8월 3일
0

kubernetes airflow에서 API user를 생성하는 방법에 대해 포스팅해보려고 합니다.

airflow api를 활용해서 dag의 정보를 조회한다거나, 삭제, 중지, 트리거의 명령을 줄 수 있습니다.

kubernetes에서 airflow를 올려서 사용중인데 CICD에서 airflow rest api를 사용해서 api user 계정이 필요합니다.

제가 사용하는 버젼은 Airflow 1.10.4입니다....요즘은 Aiflow 2를 많이 쓰는데...아직 회사에서는 2버전으로 업그레이드와 마이그레이션 계획이 없습니다...

Airflow 1(이하 Airflow)에서는 일반 user(admin 포함)과 api user는 다릅니다. 즉, 두 user는 엄연히 다른것이며 따로 생성해주어야 합니다. 실제로 airflow와 같이 설치되는 postgresql을 확인해보면, 다른 테이블에서 관리하고 있습니다.


API user 생성 방법

1. helm 또는 기타 방법을 통해 해당 네임스페이스에 airflow를 올립니다. 기본적으로 스케쥴러, 웹서버, postgre가 생성됩니다. postgre에는 사용자, dag 실행 기록, 로그등의 정보가 저장됩니다.

2. 웹서비스 컨테이너에 접속해 "webserver_config.py"또는 유사한 파이썬 파일이 있는지 확인합니다.

2-1. 만약에 존재한다면 "cp -r webserver_config.py create_api_user.py" 파일을 복사한 후 사용자 이름, 이메일, 비밀번호를 2-2와 같이 수정하여 실행합니다.

2-2. 만약에 없다면 아래 스크립트를 실행해 API user를 추가합니다

# -*- coding: utf-8 -*-

import airflow
from airflow import models, settings
from airflow.contrib.auth.backends.password_auth import PasswordUser
user = PasswordUser(models.User())
user.username = 'test-user'   ### 유저이름 추가
user.email = tester@google.co.kr' ### 유저 이메일
user.password = '1q2w3e'   ### 비밀번호 설정
session = settings.Session()
session.add(user)
session.commit()
session.close()

유저이름, 이메일, 비밀번호를 설정한 후 python create_api_user.py로 실행하면 API user가 생성됩니다.

해당 정보를 helm의 경우 yaml파일에 추가하여 실행시킬 수 있습니다. 하지만, 이미 API user가 존재할때는 API user를 생성하지 않는다는 로직을 추가하여 코드를 작성해야하기 때문에 번거로움이 있습니다.

API 사용 여부 확인

API 요청하기 전에 api hearder의 접속토큰을 생성합니다.

접속토큰은 방금전에 생성한 [유저이름]:[비밀번호]의 조합으로 base64로 인코딩합니다.

base64는 리눅스나 파이썬 코드를 활용하거나 base64 인/디코더 사이트를 이용하셔도 됩니다.

저는 https://www.convertstring.com/ko/EncodeDecode/Base64Encode 에서 인/디코딩합니다.

test-user:1q2w3e으로 인코딩하니 dGVzdC11c2VyOjFxMnczZQ==라고 생성되었습니다. 해당 값이 header의 Authorization으로 사용됩니다.

bash에서 API Call 예시는 다음과 같습니다. API 다양한 기능은 Airflow docs를 참고해주시기 바랍니다

curl -X GET
  http://localhost:8080/api/experimental/latest_runs \
  -H 'Authorization: Basic dGVzdC11c2VyOjFxMnczZQ==' 

0개의 댓글