はじめに
IBM Cloud上のOpenShift環境(ROKS)に対して、OpenShift CLI(oc)コマンドを利用してログインする流れについて記載しました。イメージとしては、ブラウザからTokenを取得&同Tokenを利用してoc loginを試みます。
環境情報
$ oc version Client Version: 4.6.32
ログイン情報の取得
IBM Cloudにログイン後、「Openshift>クラスター」と進むと「OpenShift Web コンソール」というボタンがあります。
ここを押下するとWebコンソールが開き、右上の「IAM#XX」というユーザ情報が表示されている箇所をプルダウンすると「Copy login command」が選択可能。これを選択するとタブが開いて以下情報が表示されます。
Your API token is sha256~_XX Log in with this token oc login --token=sha256~_XX --server=https://cX-e.jp-tok.containers.cloud.ibm.com:XX Use this token directly against the API curl -H "Authorization: Bearer sha256~_XX" "https://cX-e.jp-tok.containers.cloud.ibm.com:XX/apis/user.openshift.io/v1/users/~"
このoc login...と記載のある箇所を利用します。
実際にログインする
サーバーのURLにprivateという文言がないのでVPN接続等は不要でpingが通るので
$ ping cX-e.jp-tok.containers.cloud.ibm.com cX.jp-tok.containers.cloud.ibm.com [128.168.75.X]に ping を送信しています 32 バイトのデータ: 128.168.75.X からの応答: バイト数 =32 時間 =42ms TTL=51 ... ...
同ログインコマンドをそのまま押下するとログインに成功して
$ oc login --token=sha256~_.. --server=https://cX-e.jp-tok.containers.cloud.ibm.com:X Logged into ... as "IAM#XX" using the token provided.
コンテキストが格納されます。
$ kubectl config get-contexts * default/cX-e-jp-tok-containers-cloud-ibm-com:X/IAM#XX cX-e-jp-tok-containers-cloud-ibm-com:X IAM#X/cX-e-jp-tok-containers-cloud-ibm-com:X default
尚、期間がすぎると再度Tokenを取得する必要があります。
$ oc get node Unable to connect to the server: failed to refresh token: oauth2: cannot fetch token: 400 Bad Request Response: { "errorCode": "BXNIM0408E", "errorMessage": "Provided refresh token is expired" }
終わりに
下記の流れと同じでログインに成功するとUserが動的に作成されて
情報もコマンドから確認できます。
$ oc get user NAME UID FULL NAME IDENTITIES ... IAM#XX XXX IAM:XX
同トークンは一定期間が経つと期限が切れますが、ibmcloudコマンド不要でクラスターにアクセスができます。
ちなみにAdmin権限であれば以下でログインも可能です。
$ ibmcloud oc cluster config -c xx --admin
以上、ご参考になれば幸いです。