Dex 기반의 Kubeflow에 사용자 추가하기

Kubeflow는 멀티 사용자 기능을 지원하고 있습니다. 멀티 사용자 기능을 사용하기 위한 가장 간편한 방법은 멀티 사용자를 위한 배포 설정 파일을 이용하는 것입니다.

다음은 멀티 사용자를 지원하는 대표적인 설정 파일입니다.

이 설정 파일을 이용하여, Kubeflow를 설치하면 멀티 사용자 기능을 사용할 수 있습니다. 사용자 인증을 위하여 dex 라는 것을 이용하고 있습니다. dex 는 OpenID Connect 를 지원하는 식별 서비스로서, LDAP, Github, SAML 등의 여러 가지의 인증 방식과 연동이 가능합니다. 기존에 사용하고 있는 인증 방식을 Kubeflow에 연동할 수 있습니다. 즉, 회사에서 LDAP 이라는 인증 방식을 사용하고 있었다면, dex와 LDAP 을 연동해서, LDAP에서 사용하던 계정으로, kubeflow에 로그인할 수 있다는 것입니다.

사용자 확인하기

Kubeflow와 함께 설치되는 dex 는 사용자 정보를 파일에 직접 저장하고 있습니다. 이 파일은 ConfigMap에 저장되어 있습니다.

dex는 쿠버네티스의 auth 라는 네임스페이스 설치됩니다. dex 라는 ConfigMap을 조회하면 설정 정보를 볼 수 있습니다.

다음 명령어를 실행하면, dex 의 설정 정보를 확인할 수 있습니다.

$ kubectl -n auth get cm dex -o yaml
apiVersion: v1
data:
  config.yaml: |
    issuer: <http://dex.auth.svc.cluster.local:5556/dex>
    storage:
      type: kubernetes
      config:
        inCluster: true
    web:
      http: 0.0.0.0:5556
    logger:
      level: "debug"
      format: text
    oauth2:
      skipApprovalScreen: true
    enablePasswordDB: true
    staticPasswords:
    - email: admin@kubeflow.org
      hash: $2y$12$ruoM7FqXrpVgaol44eRZW.4HWS8SAvg6KYVVSCIwKQPBmTpCm.EeO
      username: admin
      userID: 08a8684b-db88-4b73-90a9-3cd1661f5466
...
kind: ConfigMap
metadata:
  name: dex
  namespace: auth

staticPasswords 필드를 보면 사용자 이메일과 패스워드의 해시값을 확인할 수 있습니다. 패스워드는 “BCrypt”를 이용하여 해시값을 생성한 후 사용하고 있습니다. 참고로 설치할때 기본으로 생성되는 이메일은 “admin@kubeflow.org“이고, 패스워드는 “12341234”입니다.

이 정보를 이용해서 다음과 같은 화면에서 로그인할 수 있습니다.

만약, kubeflow를 외부망에 노출시킬것이라면, 꼭 이 기본 계정의 패스워드를 변경해야합니다.

패스워드 해시값 생성하기

패스워드 해시값은 다양한 방법으로 만들수 있습니다.

만약 파이썬을 사용하고 있다면 bcrypt 라이브러리를 사용할 수 있습니다.

다음은 bcrypt 패키지를 설치하고, “PASSWORD”의 해시값을 생성하는 예제입니다.

pip install bcrypt

python -c 'import bcrypt; print(bcrypt.hashpw(b"PASSWORD", bcrypt.gensalt(rounds=10)).decode("ascii"))'
$2b$10$y0qsW5zqhKobi4rsNMxqceG5zFqop27Z3wgdF/wjmmlF0ib53xwTS

다른 방법으로는 BCrypt Hash Generator( https://passwordhashing.com/BCrypt) 웹사이트를 이용하는것입니다. 가장 간단한 방법이기는 하지만, 패스워드가 서버로 전송될 수 있기때문에 추천은 하지 않습니다.

사용자 추가하기

dex에 새로운 사용자를 추가해 보겠습니다.

내용이 많지 않기 때문에 ConfigMap을 직접 수정하겠습니다.

다음 명령어를 실행하여, 편집 화면을 실행합니다.

kubectl -n auth edit cm dex

staticPasswords 필드에 새로운 사용자를 추가합니다. hash 필드에 생성한 패스워드의 해시값을 지정합니다. username은 적당한 이름을 지정하면 됩니다. userID는 고유한 값을 사용해야합니다. UID 같은것을 사용할 수 있습니다.

staticPasswords:
    - email: admin@kubeflow.org
      hash: $2y$12$ruoM7FqXrpVgaol44eRZW.4HWS8SAvg6KYVVSCIwKQPBmTpCm.EeO
      username: admin
      userID: 08a8684b-db88-4b73-90a9-3cd1661f5466
    - email: kangwoo@gmail.com
      hash: $2b$10$y0qsW5zqhKobi4rsNMxqceG5zFqop27Z3wgdF/wjmmlF0ib53xwTS
      username: kangwoo
      userID: kangwoo

변경할 설정 사항을 적용하기 위해서 dex를 재시작합니다.

kubectl -n auth rollout restart deployment dex