NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Kubeflow に nutanix ユーザを作成してみる。

Kubeflow のデモ用に、nutanix ユーザを追加してみます。

今回の環境

Kubeflow は、下記のように Nutanix Kubernetes Engine(NKE)の Kubernetes クラスタに構築してあります。

1. パスワード ハッシュの作成

1-1. 作業環境の準備

Linux マシンを利用します。

$ cat /etc/redhat-release
Red Hat Enterprise Linux release 9.3 (Plow)

Python 3 を利用します。

$ python3 -V
Python 3.9.18

pip のバージョンです。

$ pip3 -V
pip 21.2.3 from /home/gowatana/pw/lib64/python3.9/site-packages/pip (python 3.9)

venv(Python の仮想環境)を作成します。

$ python3 -m venv pw

venv に切り替えます。

$ source pw/bin/activate

pip で passlib をインストールします。

$ pip3 install passlib
Collecting passlib
  Downloading passlib-1.7.4-py2.py3-none-any.whl (525 kB)
     |????????????????????????????????| 525 kB 3.6 MB/s
Installing collected packages: passlib
Successfully installed passlib-1.7.4
WARNING: You are using pip version 21.2.3; however, version 24.0 is available.
You should consider upgrading via the '/home/gowatana/pw/bin/python3 -m pip install --upgrade pip' command.

1-2. パスワード ハッシュの生成

パスワード ハッシュを生成します。

  • Password: nutanix/4u
$ python3 -c 'from passlib.hash import bcrypt; import getpass; print(bcrypt.using(rounds=12, ident="2y").hash(getpass.getpass()))'
Password: ★ハッシュ化するパスワードを入力
$2y$12$RH1gnEFhlSAApuypmw6cXeywowYus.EwPfZMh.hbPkkqGpnplaBO2

1-3. 作業環境の削除

venv から抜けておきます。

$ deactivate

venv を削除しておきます。

$ rm -rf pw

2. Dex へのユーザ追加

Kubeflow の認証で利用されている、Dex にユーザを追加します。

ConfigMap の YAML を取得します。

$ kubectl -n auth get configmap dex -o jsonpath='{.data.config\.yaml}' > kf_dex_config.yaml

ConfigMap に、ユーザ情報を追記します。

kf_dex_config.yaml

今回は、ユーザを3つ登録しておきます。ユーザ情報は、下記の 21行目~29行目のように追記しておきます。

  • L21-23: nutanix
  • L24-26: demo-01@example.com
  • L27-29: demo-02@example.com
  • hash は、さきほどの手順で生成したものです。

gist.github.com

ConfigMap を更新します。

$ kubectl -n auth create configmap dex --from-file=config.yaml=kf_dex_config.yaml --dry-run=client -o yaml | kubectl apply -f -
configmap/dex configured

dex Deployment の Pod を再起動します。

$ kubectl -n auth rollout restart deployment dex
deployment.apps/dex restarted

Pod が Running になったことを確認します。

$ kubectl -n auth get pods
NAME                   READY   STATUS    RESTARTS   AGE
dex-54b99b7998-46rm8   1/1     Running   0          30s

3. Kubeflow Profile の作成

ユーザが Kubeflow を利用できるように、Profile リソース オブジェクトを作成します。

3-1. nutanix ユーザ

nutanix ユーザむけに、Profile の YAML を作成します。

kf_profile_nutanix.yml

  • L5: ここで指定した Profile 名と同名の Namespace が作成される
  • L9: 通常はメールアドレス形式で入力します。

gist.github.com

YAML を適用します。

$ kubectl apply -f kf_profile_nutanix.yml
profile.kubeflow.org/nutanix created

Profile が作成されました。

$ kubectl get profiles.kubeflow.org
NAME                        AGE
kubeflow-user-example-com   9h
nutanix                     6s

「nutanix」Namespace と、Kubeflow 関連オブジェクトが自動作成されます。

$ kubectl -n nutanix get all
NAME                                                   READY   STATUS    RESTARTS   AGE
pod/ml-pipeline-ui-artifact-5c4b49cff9-98z4p           2/2     Running   0          117s
pod/ml-pipeline-visualizationserver-77f48b88c7-d7hrl   2/2     Running   0          117s

NAME                                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/ml-pipeline-ui-artifact           ClusterIP   172.19.236.49   < none>        80/TCP     117s
service/ml-pipeline-visualizationserver   ClusterIP   172.19.1.111    < none>        8888/TCP   117s

NAME                                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ml-pipeline-ui-artifact           1/1     1            1           117s
deployment.apps/ml-pipeline-visualizationserver   1/1     1            1           117s

NAME                                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/ml-pipeline-ui-artifact-5c4b49cff9           1         1         1       117s
replicaset.apps/ml-pipeline-visualizationserver-77f48b88c7   1         1         1       117s

Kubeflow UI に nutanix ユーザでログインすると・・・

「nutanix」Namespace が利用できるようになっています。

ただし、Google Chrome だと以前にパスワード侵害があったユーザとして認識されてしまうので、デモで利用するには微妙そうです。

Kubeflow UI の画面右上のボタンでログアウトします。

3-2. demo-01@example.com ユーザ

demo-01@example.com ユーザむけに、Profile の YAML を作成します。

kf_profile_demo-01.yml

  • L5: ここで指定した Profile 名と同名の Namespace が作成される
  • L9: ユーザはメールアドレス形式で指定

gist.github.com

YAML を適用します。

$ kubectl apply -f kf_profile_demo-01.yml
profile.kubeflow.org/demo-01 created

Profile が作成されました。

$ kubectl get profiles.kubeflow.org
NAME                        AGE
demo-01                     5s
kubeflow-user-example-com   9h
nutanix                     4m21s

「demo-01」Namespace と、Kubeflow 関連オブジェクトが自動作成されます。

$ kubectl -n demo-01 get all
NAME                                                   READY   STATUS    RESTARTS   AGE
pod/ml-pipeline-ui-artifact-5c4b49cff9-xh2bv           2/2     Running   0          13s
pod/ml-pipeline-visualizationserver-77f48b88c7-xsm67   2/2     Running   0          13s

NAME                                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/ml-pipeline-ui-artifact           ClusterIP   172.19.131.133   < none>        80/TCP     15s
service/ml-pipeline-visualizationserver   ClusterIP   172.19.4.209     < none>        8888/TCP   15s

NAME                                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/ml-pipeline-ui-artifact           1/1     1            1           14s
deployment.apps/ml-pipeline-visualizationserver   1/1     1            1           14s

NAME                                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/ml-pipeline-ui-artifact-5c4b49cff9           1         1         1       14s
replicaset.apps/ml-pipeline-visualizationserver-77f48b88c7   1         1         1       14s

Kubeflow UI に demo-01@example.com ユーザ(パスワード: nutanix/4u)でログインすると・・・

「demo-01」Namespace が利用できるようになっています。

以上。

©2023 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。