(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【OpenShift】cluster-adminロールを持つユーザを新規作成してログインする流れ

スポンサーリンク

はじめに

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を触る場合は覚えておきたいです。

以上、ご参考になれば幸いです。