ゼロからはじめるOpenShift Virtualization(2)OpenShiftインストール後の作業

Red Hatでソリューションアーキテクトをしている田中司恩(@tnk4on)です。 この連載はvSphere環境上にOpenShift Container Platform(以下、OpenShift)およびOpenShift Virtualizationの環境を構築する方法を解説するシリーズです。

第2回はOpenShiftのインストール後の作業について解説します。今後の連載予定は下記の通りです。

(2024/7/24追記:第3回の内容を改訂し、元の内容を番外編に変更しました)

-目次-


インストール後の作業

本記事ではOpenShiftのインストール後の作業として、下記の内容を紹介します。

  1. Webコンソールの表示設定
  2. OpenShift CLI(oc)による操作
  3. 不要なPodの削除
  4. アイデンティティープロバイダーの設定とkubeadminユーザーの削除

なお、OpenShiftのインストール後の作業は製品ドキュメントの「インストール後の設定」にまとまっています。

インストール後の設定 | Red Hat Product Documentation

今回の連載はOpenShift Virtualizationの検証目的なのでそれほど多くのDay2作業を行いません。 ストレージや関連するイメージレジストリーの設定は「第3回:共有ストレージの作成」で行います。

前提条件

  • 連載第1回の作業を完了していることとします
  • 全体の構成や各パラメーターなどは第1回を参照してください
  • 作業用端末のプロンプトは%とします
  • 踏み台サーバーのプロンプトは$とします
  • 踏み台サーバーの作業は明示的に記載がある場合を除いて、作業ディレクトリ${HOME}/workで作業することとします

OpenShiftインストール完了後の構成
OpenShiftインストール完了後の構成

1. Webコンソールの表示設定

前回のインストール作業が完了しWebコンソールにログインした状態からスタートします。

1-1 テーマの変更

Webコンソールのテーマはデフォルトではシステムのテーマにしたがって表示されます。

Webコンソールのライトとダークのテーマカラー
Webコンソールのライトとダークのテーマカラー

OpenShiftのテーマを固定して変更したい場合は、ユーザー設定から変更を行います。 画面右上のユーザー名を選択し、プルダウンからユーザー設定を選択します。

Webコンソールのユーザー設定
Webコンソールのユーザー設定

デフォルトは「システムのデフォルト」が選択されていますので、変更する場合は「ライト」または「ダーク」を選択します。

ユーザー設定のテーマ
ユーザー設定のテーマ

1-2 言語設定

デフォルトはブラウザの言語設定を使用します。別の言語に変更して固定したい場合は、チェックボックスを外して指定の言語を選択します。

ユーザー設定の言語設定
ユーザー設定の言語設定

2. OpenShift CLI(oc)による操作

OpenShiftの操作の1つのOpenShift CLI(oc)を使ったCLIの操作について解説します。

2-1 ocコマンドとは

ocコマンドを使用することでOpenShiftのクラスタ操作をCLIで行ったり、CLIでアプリケーションを作成できます。

ocコマンドのドキュメントは下記を参照してください。

第2章 OpenShift CLI (oc) | Red Hat Product Documentation

2-2 インストール後に使用できる2つの管理者アカウント

ocコマンドによる操作をするためにはOpenShiftクラスターにログインする必要があります。 インストール直後に使用できる管理アカウントは2つあります。

  • kubeadmin
  • system:admin

kubeadminはインストール後にWebコンソールへログインする時に使用したアカウントです。 system:adminはインストール後にダウンロードしたkubeconfigファイルを使ったログイン時に使用されるアカウントです。

OpenShiftにログインする複数の方法のまとめ
OpenShiftにログインする複数の方法のまとめ

どちらもクラスターの管理者アカウント(最上位の権限)ですが、kubeadminユーザーの方はインストール後の一時利用を目的として用意されています。 そのため、Webコンソールにログインすると画面上部に「一時的な管理ユーザーとしてログインしています。他のユーザーがログインできるように、クラスターのOAuth設定を更新してください。」と警告が出続けます。

一時的な管理ユーザーでログインしている表示が掲載され続ける
一時的な管理ユーザーでログインしている表示が掲載され続ける

本記事の後半では別の管理者アカウントの作成とkubeadminユーザーの削除について紹介します。

2-3 kubeadminユーザーを使ったログイン方法

kubeadminユーザーを使ったocコマンドによるログインは下記のように行います。 -uオプションでログインするユーザー名:kubeadminを指定します。引数としてログイン先のOpenShiftのKubernetes APIをURLとして指定します。ポート番号は6443です。

$ oc login -u kubeadmin https://api.ocp.home.lab:6443

Webコンソールでアクセスした時と同様に、インストール後の状態では自己署名証明書を使っていますので接続の警告が出ます。yを入力した後、パスワードの入力プロンプトが表示されますのでパスワードを入力します。

$ oc login -u kubeadmin https://api.ocp.home.lab:6443
The server uses a certificate signed by an unknown authority.
You can bypass the certificate check, but any data you send to the server could be intercepted by others.
Use insecure connections? (y/n): y

WARNING: Using insecure TLS client config. Setting this option is not supported!

Console URL: https://api.ocp.home.lab:6443/console
Authentication required for https://api.ocp.home.lab:6443 (openshift)
Username: kubeadmin
Password:

ログインが成功すると下記のような表示が出力されます。デフォルトではdefaultプロジェクトを開いた状態になります。

...
Login successful.

You have access to 70 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "default".
Welcome! See 'oc help' to get started.

プロジェクトはKubernetesのnamespaceを拡張したものです。ここではOpenShift上の独立した論理的な分割単位でマルチテナントを実現するもの、くらいで覚えておけば良いでしょう。

ログインが成功すればocコマンドを使った各種操作が実行できます。 いくつかコマンドを実行してみましょう。

$ oc whoami
kube:admin
$ oc cluster-info
Kubernetes control plane is running at https://api.ocp.home.lab:6443

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ oc get nodes
NAME                   STATUS   ROLES                         AGE   VERSION
node-01.ocp.home.lab   Ready    control-plane,master,worker   37h   v1.29.5+29c95f3
node-02.ocp.home.lab   Ready    control-plane,master,worker   37h   v1.29.5+29c95f3
node-03.ocp.home.lab   Ready    control-plane,master,worker   37h   v1.29.5+29c95f3
  • oc whoami:現在ログインしているユーザー名を表示
  • oc cluster-info:現在接続しているOpenShiftのクラスター情報を表示
  • oc get nodes:OpenShiftクラスターを構成している各ノードを表示

ログアウトを行うにはoc logoutを実行します。

$ oc logout
Logged "kube:admin" out on "https://api.ocp.home.lab:6443"

oc loginを行うとホームディレクトリ配下に.kubeディレクトリが作成されます。 .kube/configにはログインしたユーザーのトークン情報が記載され、デフォルトでは24時間の有効期限が設定されます。 トークンの有効期限が切れると下記のようにocコマンドが実行できなくなります。

$ oc whoami
error: You must be logged in to the server (Unauthorized)

トークンの有効期限が切れた場合は再度ocコマンドでログインを行ってください。

デフォルトのトークンの期間を変更する場合は下記のドキュメントを参考にしてください。

3.4. 内部 OAuth サーバーのトークン期間の設定 | Red Hat Product Documentation

2-4 kubeconfigを使ったログイン方法

kubeconfigファイルを使ったログイン方法はインストールのドキュメントに載っている方法でよく利用されます。 KUBECONFIG環境変数にkubeconfigファイルを指定することで、ユーザー名やパスワードを入力することなく固定のユーザー名:system:adminでログインができます。 なお、system:adminを使ったログインはCLIのみ利用可能で、Webコンソールでは使用できない点はご注意ください。

kubeconfigファイルを使ったログイン方法のドキュメントは下記です。

3.12. インストールの完了 | Red Hat Product Documentation

(1)kubeconfigについて

kubeconfigファイルは再利用ができません。たとえばOpenShiftを再インストールした場合は、新しいクラスター用のkubeconfigファイルを入手して使用する必要があります。 kubeconfigファイルは必ずバックアップを取っておくようにしましょう。

kubeconfigファイルを紛失したり損傷した場合は下記の手順で復旧できる場合があります

(2)kubeconfigファイルの入手

前回ダウンロードしたkubeconfigファイルを踏み台サーバーにコピーします。 kubeconfigファイルは作業用端末のカレントディレクトリにあることとします。

踏み台サーバーにkubeconfigファイルの配置先となるauthディレクトリを作成します。

OpenShiftのドキュメントでは以前から慣用的にauthディレクトリ配下にkubeconfigファイルを配置するように示されてるのでそれに従います。

(作業用端末で実行)
% ssh bastion mkdir work/auth

踏み台サーバーにkubeconfigファイルをコピーします。

(作業用端末で実行)
% scp kubeconfig bastion:work/auth/

踏み台サーバーにログインします。

(作業用端末で実行)
% ssh bastion

(3)kubeconfigファイルを使ったログイン

まず、oc logoutコマンドを実行してログアウトを行います。

$ oc logout
Logged "kube:admin" out on "https://api.ocp.home.lab:6443"

現在のシェルセッションにKUBECONFIG環境変数をセットします。

$ export KUBECONFIG=${HOME}/work/auth/kubeconfig
  • フルパスでkubeconfigファイルを指定することで別のディレクトリに移動した場合でもocコマンドが実行できるようにします

oc whoamiコマンドを実行し現在ログインのユーザーを確認します。

$ oc whoami
system:admin

ocコマンドが実行できるか確認します。

$ oc cluster-info
Kubernetes control plane is running at https://api.ocp.home.lab:6443

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ oc get nodes
NAME                   STATUS   ROLES                         AGE   VERSION
node-01.ocp.home.lab   Ready    control-plane,master,worker   38h   v1.29.5+29c95f3
node-02.ocp.home.lab   Ready    control-plane,master,worker   38h   v1.29.5+29c95f3
node-03.ocp.home.lab   Ready    control-plane,master,worker   38h   v1.29.5+29c95f3

oc loginコマンドを使った場合と異なり、ログイン操作不要でocコマンドを実行できるようになりました。

kubeconfigファイルを使った操作をやめる場合、明示的なログアウトの処理はありません。 その代わりにKUBECONFIG環境変数を解除して同等の処理とします。

$ echo $KUBECONFIG
/home/user/work/auth/kubeconfig
$ unset KUBECONFIG
$ echo $KUBECONFIG

$ oc whoami
Error from server (Forbidden): users.user.openshift.io "~" is forbidden: User "system:anonymous" cannot get resource "users" in API group "user.openshift.io" at the cluster scope

(4)oc loginとkubeconfig使用時の注意点

oc loginkubeconfigの併用は行わず、ログアウトまたは環境変数の解除を行ってどちらか一方のみの操作で行うようにしてください。

KCSにも下記の記載があります。

Important: Don't execute oc login when using the kubeconfig file, as it will switch them from using the special system:admin user (which uses client certificates) to token-based authentication using the credentials specified.

(翻訳) 重要: kubeconfig ファイルを使用している場合、oc login を実行しないでください。実行すると、クライアント証明書を使用する特別な system:admin ユーザーから、指定された資格情報を使用するトークンベースの認証に切り替わってしまいます。

たとえば、export KUBECONFIGを行った状態で、oc loginを行うと.kubeディレクトリが作成されず、kubeconfigファイルにユーザーのログイン情報が書き込まれます。

$ export KUBECONFIG=${HOME}/work/auth/kubeconfig
$ oc whoami
system:admin
$ oc login -u kubeadmin https://api.ocp.home.lab:6443
Console URL: https://api.ocp.home.lab:6443/console
Authentication required for https://api.ocp.home.lab:6443 (openshift)
Username: kubeadmin
Password:
Login successful.

You have access to 70 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "default".
$ ls -d ~/.kube
ls: '/home/user/.kube' にアクセスできません: そのようなファイルやディレクトリはありません

それと同時にkubeconfigファイルを使ったsystem:adminユーザーでのログインができなくなります。

$ export KUBECONFIG=${HOME}/work/auth/kubeconfig
$ oc whoami
Error from server (Forbidden): users.user.openshift.io "~" is forbidden: User "system:anonymous" cannot get resource "users" in API group "user.openshift.io" at the cluster scope

こうなると元のkubeconfigファイルから復旧するか、上記で紹介したKCSの方法でkubeconfigファイルを復旧する必要があります。 ご注意ください。

2-5 Cluster Operatorの出力確認

ocコマンドを使った操作の1つである「Cluster Operatorの出力確認」について紹介します。 Cluster OperatorはOpenShiftクラスター全体のインフラストラクチャと管理を担当する重要なコンポーネントです。 Cluster Operatorがすべて正常に動作しているかどうかが、OpenShiftのクラスターの状態を確認する1つの手段になります。

(1)Cluster Operatorの一覧を出力

oc get clusteroperatorsコマンドを実行するとCluster Operatorの一覧を出力できます。 OpenShiftクラスターが正常にしている場合は、AVAILABLEがすべてTruePROGRESSINGDEGRADEDがすべてFalseになります。 oc get clusteroperatorsコマンドはoc get coと省略して入力できます。

$ oc get co
NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
authentication                             4.16.0    True        False         False      7m1s
baremetal                                  4.16.0    True        False         False      30m
cloud-controller-manager                   4.16.0    True        False         False      43m
cloud-credential                           4.16.0    True        False         False      50m
cluster-autoscaler                         4.16.0    True        False         False      32m
config-operator                            4.16.0    True        False         False      33m
console                                    4.16.0    True        False         False      14m
control-plane-machine-set                  4.16.0    True        False         False      30m
csi-snapshot-controller                    4.16.0    True        False         False      33m
dns                                        4.16.0    True        False         False      33m
etcd                                       4.16.0    True        False         False      31m
image-registry                             4.16.0    True        False         False      14m
ingress                                    4.16.0    True        False         False      18m
insights                                   4.16.0    True        False         False      28m
kube-apiserver                             4.16.0    True        False         False      23m
kube-controller-manager                    4.16.0    True        False         False      24m
kube-scheduler                             4.16.0    True        False         False      24m
kube-storage-version-migrator              4.16.0    True        False         False      34m
machine-api                                4.16.0    True        False         False      21m
machine-approver                           4.16.0    True        False         False      34m
machine-config                             4.16.0    True        False         False      33m
marketplace                                4.16.0    True        False         False      32m
monitoring                                 4.16.0    True        False         False      11m
network                                    4.16.0    True        False         False      35m
node-tuning                                4.16.0    True        False         False      18m
openshift-apiserver                        4.16.0    True        False         False      22m
openshift-controller-manager               4.16.0    True        False         False      27m
openshift-samples                          4.16.0    True        False         False      22m
operator-lifecycle-manager                 4.16.0    True        False         False      30m
operator-lifecycle-manager-catalog         4.16.0    True        False         False      30m
operator-lifecycle-manager-packageserver   4.16.0    True        False         False      22m
service-ca                                 4.16.0    True        False         False      35m
storage                                    4.16.0    True        False         False      34m

(2)インストール途中でのCluster Operatorのモニタリング

OpenShiftのインストールの途中にkubeconfigファイルをダウンロードし、Cluster Operatorの一覧を出力することでインストールの経過状況をモニタリングできます。 watchコマンドを合わせて実行して進行状況を自動でモニタリングできます。

$ watch oc get co
NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
authentication                             4.16.0    False       True          True       13m     OAuthServerDeploymentAvailable: no oauth-openshift.openshift-authentication pods available on any node....
baremetal                                  4.16.0    True        False         False      9m18s
cloud-controller-manager                   4.16.0    True        False         False      22m
cloud-credential                           4.16.0    True        False         False      29m
cluster-autoscaler                         4.16.0    True        False         False      11m
config-operator                            4.16.0    True        False         False      12m
console
control-plane-machine-set                  4.16.0    True        False         False      9m32s
csi-snapshot-controller                    4.16.0    True        False         False      12m
dns                                        4.16.0    True        False         False      12m
etcd                                       4.16.0    True        True          False      10m     NodeInstallerProgressing: 2 nodes are at revision 5; 0 nodes have achieved new revision 6
image-registry                             4.16.0    True        False         False      47s
ingress                                              False       True          True       11m     The "default" ingress controller reports Available=False: IngressControllerUnavailable: One or more status conditions indicate unavailable: DeploymentAvailable=False (DeploymentUnavailable: The deployment has Available status condition set to False (reason: MinimumReplicasUnavailable) with message: Deployment does not have minimum availability.)
insights                                   4.16.0    True        False         False      7m14s
kube-apiserver                             4.16.0    True        True          False      2m38s   NodeInstallerProgressing: 1 node is at revision 0; 1 node is at revision 3; 0 nodes have achieved new revision 6
kube-controller-manager                    4.16.0    True        True          False      3m3s    NodeInstallerProgressing: 1 node is at revision 3; 1 node is at revision 4
kube-scheduler                             4.16.0    True        True          False      3m37s   NodeInstallerProgressing: 1 node is at revision 3; 1 node is at revision 4
kube-storage-version-migrator              4.16.0    True        False         False      13m
machine-api                                4.16.0    True        False         False      48s
machine-approver                           4.16.0    True        False         False      12m
machine-config                             4.16.0    True        False         False      12m
marketplace                                4.16.0    True        False         False      11m
monitoring                                           Unknown     True          Unknown    11m     Rolling out the stack.
network                                    4.16.0    True        False         False      14m
node-tuning                                4.16.0    True        False         False      8m56s
openshift-apiserver                        4.16.0    True        False         False      65s
openshift-controller-manager               4.16.0    True        True          False      6m12s   Progressing: deployment/controller-manager: updated replicas is 1, desired replicas is 2...
openshift-samples                          4.16.0    True        False         False      55s
operator-lifecycle-manager                 4.16.0    True        False         False      9m25s
operator-lifecycle-manager-catalog         4.16.0    True        False         False      9m27s
operator-lifecycle-manager-packageserver   4.16.0    True        False         False      75s
service-ca                                 4.16.0    True        False         False      14m
storage                                    4.16.0    True        False         False      13m

なお、すべてのOperatorのAVAILABLETrueにならずAssisted Installerの画面上でインストール完了になることがあります。 これは処理の進行上タイムラグが出ることはありますが問題はありません。

3. 不要なPodの削除

OpenShiftのインストール完了後、クラスターインベントリーの欄にエラーのPodが表示されることがあります。

インストール後、エラーになったPodが表示されることがある
インストール後、エラーになったPodが表示されることがある

エラーの数字のリンクを押すと、エラーでフィルタリングされたPodの一覧が表示されます。

エラーになったPodの一覧表示
エラーになったPodの一覧表示

これはインストール時になんらかの理由でエラーになって残ったものですが、不要なので削除できます。GUI上でPodの一覧表示からPodを1つ1つを選んで削除することもできますが、数が多いと手間がかかります。

このような繰り返す作業はCLIで行う方が効率的です。先ほど使えるようにしたocコマンドでCLIを使って一括で削除してみましょう。

ocコマンドでエラーになったPodを確認する場合は下記のコマンドを実行します。 --field-selector=オプションでステータスがFailedになったPodをフィルタリングできます。

$ oc get pods --field-selector=status.phase=Failed -A
NAMESPACE                              NAME                               READY   STATUS   RESTARTS   AGE
openshift-kube-apiserver               installer-2-node-02.ocp.home.lab   0/1     Error    0          43m
openshift-kube-apiserver               installer-4-node-03.ocp.home.lab   0/1     Error    0          33m
openshift-kube-controller-manager      installer-2-node-02.ocp.home.lab   0/1     Error    0          44m
openshift-operator-lifecycle-manager   collect-profiles-28666305-hlq7g    0/1     Error    0          37m

Podを削除する場合はoc delete podsコマンドを実行します。確認の場合と同じく--field-selector=オプションを使ってPodをフィルタリングします。

$ oc delete pods --field-selector=status.phase=Failed -A
pod "installer-2-node-02.ocp.home.lab" deleted
pod "installer-4-node-03.ocp.home.lab" deleted
pod "installer-2-node-02.ocp.home.lab" deleted
pod "collect-profiles-28666305-hlq7g" deleted

Podの削除後、エラーになったPodが消えたことを確認します。

$ oc get pods --field-selector=status.phase=Failed -A
No resources found

エラーになったPodが削除された状態
エラーになったPodが削除された状態

4. アイデンティティープロバイダーの設定とkubeadminユーザーの削除

4-1 アイデンティティープロバイダーについて

OpenShiftのインストール後から使用しているkubeadminユーザーは一時的な管理ユーザーで、恒久的に使用できるユーザーではありません。 そのためkubeadminユーザーをそのまま使っていると、Webコンソールの上部に青い表示が出続けることになります。

一時的な管理ユーザーでログインしている表示が掲載され続ける
一時的な管理ユーザーでログインしている表示が掲載され続ける

「クラスターのOauth設定」の文字のリンクを選択するとOpenShiftクラスターのOauthの画面が表示されます。 デフォルトではアイデンティティープロバイダーは何も登録されておらず、そのままでは管理ユーザーの変更ができません。

まずはアイデンティティープロバイダーの設定を行うところから開始します。 OpenShiftはさまざまなアイデンティティープロバイダーに対応しており、大規模なエンタープライズでの利用にも対応できます。 今回は小規模な検証用途ですので、一番シンプルに実装できるhtpasswdを使って設定を行います。

アイデンティティープロバイダー設定については下記のドキュメントを参照してください。

第6章 アイデンティティープロバイダー設定について | Red Hat Product Documentation

アイデンティティープロバイダーを使ったログインの構成は、本記事2-2の「図:OpenShiftにログインする複数の方法のまとめ」を参照ください。

4-2 htpasswd アイデンティティープロバイダーの設定

まず、htpasswdファイルの作成を行います。htpasswdファイルは、各ユーザーのユーザー名とハッシュ化されたパスワードを含むフラットファイルです。 htpasswdファイルはhtpasswdコマンドを使ってファイルの作成とユーザーの追加を行います。 今回はファイル名:users.htpasswd、ユーザー名:ocpadmin、パスワード:passwordで作成を行います。

$ htpasswd -c -B -b users.htpasswd ocpadmin password

次に、htpasswdファイルが含まれるSecretオブジェクトを作成します。

$ oc create secret generic htpass-secret --from-file=htpasswd=users.htpasswd -n openshift-config

secretの一覧を表示し、作成したhtpass-secretが含まれているか確認します。

$ oc get secret -n openshift-config
NAME                                      TYPE                             DATA   AGE
builder-dockercfg-77z9v                   kubernetes.io/dockercfg          1      13h
default-dockercfg-zjt6b                   kubernetes.io/dockercfg          1      13h
deployer-dockercfg-5z9qv                  kubernetes.io/dockercfg          1      13h
etcd-client                               kubernetes.io/tls                2      13h
etcd-metric-signer                        kubernetes.io/tls                2      13h
etcd-signer                               kubernetes.io/tls                2      13h
htpass-secret                             Opaque                           1      2m53s
initial-service-account-private-key       Opaque                           1      13h
pull-secret                               kubernetes.io/dockerconfigjson   1      13h
webhook-authentication-integrated-oauth   Opaque                           1      13h

htpasswdのカスタムリソース(CR)を作成します。これはhtpasswdアイデンティティープロバイダーのパラメーターと許可される値を定義したものです。 oauth_cr.yamlというファイル名で作成します。

$ cat > oauth_cr.yaml <<EOF
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: my_htpasswd_provider
    mappingMethod: claim
    type: HTPasswd
    htpasswd:
      fileData:
        name: htpass-secret
EOF
  • my_htpasswd_provider:このプロバイダー名は、プロバイダーのユーザー名に接頭辞として付加され、アイデンティティー名が作成されます。
  • mappingMethod:このプロバイダーのアイデンティティーとUserオブジェクト間にマッピングが確立される方法を指定します
  • htpass-secret:htpasswdファイルが含まれる既存のシークレットです。

htpasswdのカスタムリソースをクラスターに適用します。

$ oc apply -f oauth_cr.yaml

作成したユーザーocpadminをクラスター管理者として定義します。OpenShiftではcluster-adminというロールをユーザーに適用することでこれを行います。

11.2. RBAC の使用によるパーミッションの定義および適用 | Red Hat Product Documentation

$ oc create clusterrolebinding admin --clusterrole=cluster-admin --user=ocpadmin

これでocpadminユーザーをクラスター管理者として作成することができました。

4-3 アイデンティティープロバイダーを使ったWebコンソールのログイン

アイデンティティープロバイダーの設定が完了しましたので、Webコンソールからkubeadminユーザーをログアウトします。 画面右上のユーザー名を選択しプルダウンからログアウトを選択します。

Webコンソールからログアウトする
Webコンソールからログアウトする

ログイン画面に戻ると以前とは異なり、ユーザー名とパスワードの入力欄が消え、代わりにkube:adminと登録したhtpasswdアイデンティティープロバイダー名:my_htpasswd_providerが表示されます。

htpasswdのカスタムリソースの適用直後はCluster Operator:authenticationの更新が完了しておらず、選択画面が出てこないことがあります。しばらく待ってからブラウザをリロードしてください。

ユーザー名とパスワードの代わりにアイデンティティープロバイダーの選択が表示
ユーザー名とパスワードの代わりにアイデンティティープロバイダーの選択が表示

my_htpasswd_providerを選択し、続けて表示されるユーザー名とパスワードに先ほど作成したocpadminのユーザー情報を入力します。

新しい管理者ユーザーのユーザー名とパスワードを入力
新しい管理者ユーザーのユーザー名とパスワードを入力

ocpadminで管理者としてWebコンソールにログインができました。

新しい管理者ユーザーでWebコンソールにログイン
新しい管理者ユーザーでWebコンソールにログイン

ocコマンドでユーザー情報を表示すると、ユーザー名と対応するアイデンティティープロバイダー名が確認できます。

$ oc get users
NAME       UID                                    FULL NAME   IDENTITIES
ocpadmin   60272a66-73b6-42b9-aec6-8941340acdd7               my_htpasswd_provider:ocpadmin

4-4 アイデンティティープロバイダーを使ったocログイン

今度はoc loginコマンドを使い、作成したユーザー:ocpadminを指定してログインします。

「2-4 kubeconfigを使ったログイン方法」で書いたように、oc loginの前にKUBECONFIG環境変数を解除してから実施します。 ログインの手順は「2-3 kubeadminユーザーを使ったログイン方法」と同じです。

$ unset KUBECONFIG
$ oc login -u ocpadmin https://api.ocp.home.lab:6443
The server uses a certificate signed by an unknown authority.
You can bypass the certificate check, but any data you send to the server could be intercepted by others.
Use insecure connections? (y/n): y

WARNING: Using insecure TLS client config. Setting this option is not supported!

Console URL: https://api.ocp.home.lab:6443/console
Authentication required for https://api.ocp.home.lab:6443 (openshift)
Username: ocpadmin
Password:
Login successful.

You have access to 70 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "default".
Welcome! See 'oc help' to get started.

現在のセッションのユーザー名を確認します。

$ oc whoami
ocpadmin

4-5 kubeadminユーザーの削除

新しい管理者ユーザーの作成が完了したので、kubeadminユーザーの削除を行います。

手順は下記のドキュメントに従います。

6.3. kubeadmin ユーザーの削除 | Red Hat Product Documentation

kubeadminユーザーを削除する前提条件は下記の通りです。

  • 1つ以上のアイデンティティープロバイダーを設定しておく必要があります。
  • cluster-adminロールをユーザーに追加しておく必要があります。
  • 管理者としてログインしている必要があります。

ここでは「4-4 アイデンティティープロバイダーを使ったocログイン」の続きで、ocpadminユーザーでログインしている状態で実行します。 kubeadminユーザーの削除は下記のコマンドを実行します。

$ oc delete secrets kubeadmin -n kube-system
secret "kubeadmin" deleted

kubeadminユーザーでログインできないことを確認します。

$ oc logout
Logged "ocpadmin" out on "https://api.ocp.home.lab:6443"
$ oc login -u kubeadmin https://api.ocp.home.lab:6443
WARNING: Using insecure TLS client config. Setting this option is not supported!

Console URL: https://api.ocp.home.lab:6443/console
Authentication required for https://api.ocp.home.lab:6443 (openshift)
Username: kubeadmin
Password:
Login failed (401 Unauthorized)
Verify you have provided the correct credentials.

Webコンソールをログインし、再度ログインWebコンソールのトップ画面に戻ると元のユーザー名とパスワードを入力する表示に変わります。 これは登録されているアイデンティティープロバイダーが1種類しかないためです。

アイデンティティープロバイダーが1つの時のWebコンソールのログイン画面
アイデンティティープロバイダーが1つの時のWebコンソールのログイン画面

まとめ

OpenShiftのインストール後の作業についてご紹介しました。 OpenShiftはWebコンソールも利用できますが、まだまだ多くの作業はocコマンドを使ったCLI操作が中心です。 またその設定方法はYAML形式のカスタムリソースを作成して適用するなどKuberentes特有の作業であり、新しい操作には慣れが必要です。 その反面パラメーターや設定変更後の状態をコードとして定義できる点は、手作業などの属人性の排除に繋がります。 本連載を通じて少しずつでもクラウドネイティブなインフラ管理の便利さを体感頂ければと思います。

(次回予告) 次回はOpenShift Virtualizationに必須の、共有ストレージの作成について解説します。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。