ID 연계(GitLab)로 JupyterHub의 사용자 프로비저닝을 손쉽게

동기


  • Jupyter Notebook을 여러 사람이 사용하고 싶다고 말했다.
  • 대규모로는하지 않아도 좋다 (하고 싶지 않다) ··

  • JupyterHub의 차례이지만, 디폴트는 PAM 인증. 즉, 리눅스 사용자가 사전에 필요하다.
  • 몇 명 이용하고 싶은지 모르고, 준비가 귀찮다・・・

  • ID 연동하면 사용자 프로비저닝이 가능합니다. 즉, 자동화할 수 있어 락!
  • 이번에는 온프레에서 이용하고 있던 GitLab을 사용할 수 있었다.
  • 그 때의 비망록.


  • 환경


  • GitLab Community Edition 12.7.5
  • JupyterLab 1.2.6 + hub-extension (JupyterHub 1.1.0)
  • Docker 19.04
  • Docker Compose 1.25.3
  • 온프레 환경

  • 구축 절차



    1. GitLab: ID 공급자 설정


  • Admin (루트) 사용자로 로그인. (일반 사용자라도 좋을지도 모르지만, 검증되지 않음)
  • Admin Area → Application → New Application을 선택하여 신규 작성.
  • 「api」, 「read_user」를 허가한다.
  • "Callback URL"은 인증 후 Jupyter로 돌아가기위한 정보입니다. Jupyter에 액세스하는 호스트 정보를 채우고 보완.

  • Application 작성 후에 표시되는, 「Application ID」, 「Secret」를 삼가해 둔다.





  • 2. JupyterLab + hub-extension 시작



    설정 파일 만들기



    이번에는 특히 JupyterHub와 관련된 설정이므로 JupyterHub의 기본 설정에서 따릅니다.

    이하, 생성 커맨드 예. 다만, 출력한 설정 파일이 ROOT의 소유물이 된다. (chown라든지 필요)
    docker run --rm -v ${PWD}:/etc/jupyterhub jupyterhub/jupyterhub jupyterhub --generate-config -f /etc/jupyterhub/jupyterhub_config.py
    

    설정 파일 편집



    추가하는 설정은 이하. (자세한 내용은 그 아래.)

    jupyterhub_config.py에 추가 분
    from oauthenticator.gitlab import LocalGitLabOAuthenticator
    
    c.JupyterHub.authenticator_class = LocalGitLabOAuthenticator
    c.LocalAuthenticator.create_system_users = True
    
    c.Spawner.default_url = '/lab'
    c.Authenticator.admin_users = {'admin', }
    
  • 필수
  • c.JupyterHub.authenticator_class
  • c.LocalAuthenticator.create_system_users인증 및 프로비저닝을 위해.


  • OAuthenticator 정보
    ... Local이 붙어 있으면, 로컬 유저의 자동 생성이 효과가 있다. (처음 붙이지 않아서 빠졌다)
  • 선택
  • c.Spawner.default_url : 로그인 후 JupyterLab을 사용하기 위해.
  • c.Authenticator.admin_users : JupyterHub의 Admin 사용자 지정.


  • 각 파일 배치



    이하의 Dockerfile, YAML을 적절히 수정해, 설정 파일과 아울러 배치한다.

    ※ 예이므로, 데이터 영속화 등을 하지 않으므로 주의.

    배치 예
    . 
     |- dockerfile
     |      |- Jupyter.dockerfile
     |- docker-compose.yml
     |- jupyterhub_config.py
    

    Jupyter.dockerfile
    FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04
    
    RUN apt update && \
        apt install -y python3 python3-pip npm nodejs && \
        npm install -g configurable-http-proxy && \
        pip3 install jupyterlab oauthenticator && \
        jupyter labextension install @jupyterlab/hub-extension
    

    docker-compose.yml
    version: "2.3"
    
    services:
      jupyter:
        build:
          - context: dockerfile
          - dockerfile: Jupyter.dockerfile
        runtime: nvidia
        ports:
          - "8000:8000"
        volumes:
          - "./jupyterhub_config.py:/etc/jupyterhub_config.py"
        environment:
          - GITLAB_URL=http://<GitLabのURL>
          - OAUTH_CALLBACK_URL=先ほどの「Callback URL」
          - GITLAB_CLIENT_ID=先ほどの「Application ID」
          - GITLAB_CLIENT_SECRET=先ほどの「Secret」
        command: jupyterhub -f /etc/jupyterhub_config.py
    

    시작


    docker-compose build
    docker-compose up -d
    

    3. 동작 확인



    Jupyter 방문
    → GitLab로 리디렉션 화면이 나옵니다 (화면 1)
    → GitLab로 인증하기(화면 2)
    → JupyterHub로 리디렉션(화면 3)
    → 로그인 완료 완료 및 영역 자동 확보(Linux 사용자 자동 작성)(화면 4)






    4. 주의점



    GitLab의 유저명에 「. (dot)」가 포함되어 있으면, Linux측의 유저 작성에 실패해 JupyterLab가 일어나지 않기 때문에, 주의.

    예) pekora.usada는 NG입니다. pekora_usada OK.

    ※ 적어도 자신이 시도했을 때는.



    KubeFlow에서 뭔가하고 싶습니다. .

    좋은 웹페이지 즐겨찾기