Kubeflow는 멀티 사용자 기능을 지원하고 있습니다. 멀티 사용자 기능을 사용하기 위한 가장 간편한 방법은 멀티 사용자를 위한 배포 설정 파일을 이용하는 것입니다.
다음은 멀티 사용자를 지원하는 대표적인 설정 파일입니다.
- kfctl_istio_dex.v1.2.0.yaml : https://www.kubeflow.org/docs/started/k8s/kfctl-istio-dex/
이 설정 파일을 이용하여, 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