はじめに
Openshiftではoc get user
でユーザリソースが確認でき、事前に設定したパスワードを用いてoc login
することが可能です。本記事ではadmin権限を持つユーザを新規作成する手順について記載しました。
環境情報
- OpenShift Container Platform 4
方針
デフォルトではkubeadminユーザーのみがクラスターに存在するので、アイデンティティープロバイダーでユーザ認証できるために各ファイルを作成していきます。
大まかな流れは以下。
- ユーザー/パスワード情報を保持したhtpasswdファイルを作成
- htpasswdファイルを格納したSecretを作成
- アイデンティティープロバイダーをクラスターに追加
アイデンティティプロバイダーを使用するために、具体的にはOAuthリソースを新規作成します。
ユーザ名をadmin、パスワードをhogeで作成するとして作業前はもちろんログインできません。
$ oc login -u admin -p hoge Login failed (401 Unauthorized) Verify you have provided correct credentials.
htpasswdファイルのSecret作成
以下でファイルが新規作成されます。
$ htpasswd -c -B -b ~/htpasswd admin hoge Adding password for user admin
ファイルは以下のようにユーザ名とエンコードされたパスワードが一行で記載されています。
$ cat ~/htpasswd admin:$2y$05$uXTVCB4NK9yC24XXvKBef3J4ZrD83m
kubeadminでログイン後、以下のようにSecretを作成します。(更新時はset data secret myusers ...)
$ oc create secret generic myusers --from-file htpasswd=/home/test/htpasswd -n openshift-config secret/myusers created
確かにシークレットが作成されています。
$ oc get secrets -n openshift-config ... myusers Opaque 1 xxs
以下でcluster-adminのロールを割り当てます。(不要であればスキップ可)
$ oc adm policy add-cluster-role-to-user cluster-admin admin Warning: User 'admin' not found clusterrole.rbac.authorization.k8s.io/cluster-admin added: "admin"
アイデンティティープロバイダーを作成
以下のリソースを
$ oc get oauth NAME AGE cluster xx
YAML形式で出力すると
$ oc get oauth cluster -o yaml
spec欄が空欄のリソースが確認できますが
apiVersion: config.openshift.io/v1 kind: OAuth ... spec: {}
このspec部分を以下のように追記して反映すると
spec: identityProviders: - htpasswd: fileData: name: myusers mappingMethod: claim name: myusers type: HTPasswd
openshift-authenticationに展開されていたPodが再作成され
$ oc get pod -n openshift-authentication NAME READY STATUS RESTARTS AGE oauth-openshift-68799984ff-m2mjf 1/1 Terminating 0 xx oauth-openshift-68799984ff-pfrv7 1/1 Terminating 0 xx oauth-openshift-775cd9cf7-64fkd 1/1 Running 0 xxs oauth-openshift-775cd9cf7-76lnp 1/1 Running 0 xxs
ログインが通るようになります。
$ oc login -u admin -p hoge Login successful...
ログインが通るとuserやコンテキストが動的に作成されます。
$ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * default/xx:6443/admin xx:6443 admin default default/xx:6443/kube:admin xx:6443 kube:admin default
$ oc get users NAME UID FULL NAME IDENTITIES admin xx myusers:admin
終わりに
アイデンティティープロバイダーのユーザーとしてクラスターにログインする流れについて解説しました。
Kubernetesでは主にX.509クライアント証明書を用いた認証を行い、この手のOAuth認証は触らないことが多いのでOpenshiftを触る場合は覚えておきたいです。
以上、ご参考になれば幸いです。